![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Обсуждение каки-то непонятных моментов в алгоритме, вариантов использования функций, оптимизация скриптов. Тут можно обсудить алгоритмы и особености скриптинга.
>> просьбы написать скрипт не в эту тему, а сюда: Напишите пожалуйста скрипт >> выкладывать готовые и отлаженные скрипты не в эту тему, а сюда: Готовые скрипты Тут только вопросы и обсуждение проблем и методов их решения, а так же все непонятки с "должно работать, но не работает". ___ База скриптов (NWN) Скрипты для новичков (NWN) Вопросы по скриптам (NWN) Построение скриптовых сцен (NWN) Так как скриптинг не сильно изменился, то большая часть вещей, написаная под НВН1 нормально работает и в НВН2. Посмотрите в этих темах, вполне возможно вы найдете интересующую вас информацию. |
![]() |
![]() ![]()
Сообщение
#2
|
|
Level 2 ![]() Класс: Псионик Характер: True Neutral Раса: Рептилия ![]() |
Нужно найти игрока по имени в определенной локации...
И еще интересно почему не работает такая NSS object oPlayer = GetFirstObjectInArea(GetArea(GetObjectByTag("gds_wpt"))); icheck=0; while(icheck==0) { string sCName = GetName(oPlayer); if (sCName == sName) { oTarget=oPlayer; icheck=1; } object oPlayer = GetNextObjectInArea(GetArea(GetObjectByTag("gds_wpt"))); } sName - имя игрока |
![]()
Сообщение
#3
|
|
Level 11 ![]() Класс: Вор Характер: Neutral Evil Раса: Эльф NWN: Скриптинг [PW] Validor2 ![]() |
предпоследняя строка
object oPlayer = GetNextObjectInArea(GetArea(GetObjectByTag("gds_wpt"))); замени на oPlayer = GetNextObjectInArea(GetArea(GetObjectByTag("gds_wpt"))); |
![]()
Сообщение
#4
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
QUOTE(Gloom @ Nov 29 2006, 07:28) [snapback]99455[/snapback] Нужно найти игрока по имени в определенной локации... странное желание... NSS object oArea = GetArea(GetObjectByTag("gds_wpt")); object oPC = GetFirstPC(); while (GetIsObjectValid(oPC)) { if ((oArea == GetArea(oPC) && (sName == GetName(oPC)) break; oPC = GetNextPC(); } if (GetIsObjectValid(oPC)) { // требуемый игрок найден... } else { // не найден... } QUOTE(Gloom @ Nov 29 2006, 07:28) [snapback]99455[/snapback] И еще интересно почему не работает такая вечный цикл вообще. первичное условие выхода - валидность перечисляемого объекта. и так, между прочим, для поиска игроков перебирать все объекты в локации - это, я вам скажу... |
![]()
Сообщение
#5
|
|
Level 2 ![]() Класс: Псионик Характер: True Neutral Раса: Рептилия ![]() |
Спасибо за помощь (IMG:style_emoticons/kolobok_light/good.gif)
QUOTE и так, между прочим, для поиска игроков перебирать все объекты в локации - это, я вам скажу... это было промежуточное решение, проверка самой возможности... |
![]()
Сообщение
#6
|
|
Стилспатер ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
CODE object oPC = GetLastUsedBy(); if(GetIsPC(oPC) ) { ActionStartConversation(oPC); } Так if теперь не работает? Выдает INVALID DECLARATION TYPE на if СОРИ, ИЗВИНИТЕ ЗА ВОПРОС... Не обратил внимания, что имя функции void main() надо писать руками... Сообщение отредактировал Plut - Nov 30 2006, 00:05 |
![]()
Сообщение
#7
|
|
Стилспатер ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
Вопрос такой: можно ли на Event плэйсибла, например On Used, навесить скрипт с параметром, т.е. я хочу, чтоб запускалась одна из ветвей, имеющихся в скрипте. Пример:
CODE void main(int iAction) { switch(iAction) { case 1: object oPC = GetPCSpeaker(); ActionStartConversation(oPC); break; case 2: ..... ..... } } Ну а в On Used, понятно, хочется иметь что-то вроде ИмяСкрипта(1) Сообщение отредактировал Plut - Dec 4 2006, 12:31 |
![]()
Сообщение
#8
|
|
Level 8 ![]() ![]() ![]() Класс: Бард Характер: Chaotic Neutral Раса: Полуэльф ![]() |
Где брать скрипт на открытие магазина через диалог?(IMG:style_emoticons/kolobok_light/biggrin.gif)
|
![]()
Сообщение
#9
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
QUOTE(Plut @ Dec 4 2006, 12:29) [snapback]99761[/snapback] можно ли на Event плэйсибла, например On Used, навесить скрипт с параметром, т.е. я хочу, чтоб запускалась одна из ветвей, имеющихся в скрипте. Пример: А что тебя останавливает? (IMG:style_emoticons/kolobok_light/smile.gif) QUOTE(Sleeper @ Dec 4 2006, 12:53) [snapback]99766[/snapback] Где брать скрипт на открытие магазина через диалог? Чтобы не повторяться: http://www.city-of-masters.ru/forums/index...ost&p=31712 . Там для НВН, но так как скрипты поддаются переносу, то должно работать, может тока какие параметры новые у функций появились. Сообщение отредактировал -fenix- - Dec 4 2006, 13:12 |
![]()
Сообщение
#10
|
|
Стилспатер ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
QUOTE А что тебя останавливает? smile.gif То что оно не отрабатывает. Может там синтаксис какой хитрый... |
![]()
Сообщение
#11
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Ну, если компилица, но не работает, то вот что может быть:
NSS void main(int iAction)
{ switch(iAction) { case 1: object oPC = GetPCSpeaker(); //Это тут откудавы? (IMG:style_emoticons/kolobok_light/smile.gif) Надо GetLastUsedBy()! ActionStartConversation(oPC); break; case 2: ..... ..... } } |
![]()
Сообщение
#12
|
|
Стилспатер ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
QUOTE Ну, если компилица, но не работает, то вот что может быть: Не, это я пример набирал - ошибся... там у меня через свои функции сделано, но смысл (вернее принцип такой). Судя по всему не отрабатывает запуск скрипта из листа свойств плэйсибла. Т.е. если я пишу там ИмяСкрипта(параметр), то оно не работает, а если я убиваю параметры и скрипте и при его вызове, то все нормально. |
![]()
Сообщение
#13
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Plut, передавать параметр таким образом в скрипт нельзя. Делай через локальные переменные на игроке/объекте или модуле.
|
![]()
Сообщение
#14
|
|
Стилспатер ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
QUOTE Plut, передавать параметр таким образом в скрипт нельзя. Делай через локальные переменные на игроке/объекте или модуле. Спасибо за кратки и содержательный ответ. А жаль, все-таки... |
![]()
Сообщение
#15
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Эээ, ну это, не мешало бы увидеть пациента целиком. (IMG:style_emoticons/kolobok_light/smile.gif) А на теории я хз че там как отрабатывает, я в НВН 2 не играл и Обсидиановский Тулсет не видел.
Но есть еще момент. В case низя объявлять или инициализировать переменные, делай это до него. QUOTE(Lex @ Dec 4 2006, 13:38) [snapback]99775[/snapback] Plut, передавать параметр таким образом в скрипт нельзя. Делай через локальные переменные на игроке/объекте или модуле. Ой, так вот в чем суть вопроса была. (IMG:style_emoticons/kolobok_light/smile.gif) Сообщение отредактировал -fenix- - Dec 4 2006, 13:59 |
![]()
Сообщение
#16
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Plut @ Dec 4 2006, 13:44) [snapback]99777[/snapback] пасибо за кратки и содержательный ответ. А жаль, все-таки... не знаю, чего тебе жаль то. Там и нет возможности вписать, да и как? Если переменная статичная, то нафиг она тебе не нужна, а если динамическая, то на каком этапе ты собираешься ее формировать? Непосредственно перед запуском эвента ? Никак (IMG:style_emoticons/kolobok_light/pardon.gif) Единственное место, где параметры бы пригодились - диалоги, чтобы передавать например номер ответа и от него плясать.. но насколько я знаю в новом тулсете что-то по этому поводу сделано.. посмотреть тока не могу. QUOTE(Plut @ Dec 4 2006, 12:29) [snapback]99761[/snapback] Вопрос такой: можно ли на Event плэйсибла, например On Used, навесить скрипт с параметром можно по другому. В локалку плейса вгоняешь параметр. Например "BLOCK" и разные значения туда, а в скрипте NSS ..
int nBLOCK = GetLocalInt(OBJECT_SELF,"BLOCK"); switch (nBLOCK) { case 1: // ---- // break; case 2: // ---- // break; // И так далее } ... |
![]()
Сообщение
#17
|
|
Стилспатер ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
CODE Единственное место, где параметры бы пригодились - диалоги, чтобы передавать например номер ответа и от него плясать.. но насколько я знаю в новом тулсете что-то по этому поводу сделано.. посмотреть тока не могу. Да, по этому поводу там усе сделано. Даже можно строку выводить или в экшн писать по несколько скриптов... Тут все ок. Можно теперь вообще всю обработку диалогов в 1 скрипт запихать... Чтоб не рыть потом тоннами. QUOTE В case низя объявлять или инициализировать переменные, делай это до него. А я в нем и не пытался инициализировать. Я в него пытался передавать входящий параметр... Согласен, можно и так написать. Идея была сделать скрипт, в котором хранятся On Used, например, всех плэйсиблов или всех дверей... разных... в зависимости, например, от тега... ну и т.д. Это все к сокращению количества скриптов. Сообщение отредактировал Plut - Dec 4 2006, 17:42 |
![]()
Сообщение
#18
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Plut @ Dec 4 2006, 17:30) [snapback]99809[/snapback] А я в нем и не пытался инициализировать. пытаешься: QUOTE(Plut @ Dec 4 2006, 12:29) [snapback]99761[/snapback] case 1: object oPC = GetPCSpeaker(); так ни нада. Объявляй object oPC в начале, а в кейсах уже работай с ней. |
![]()
Сообщение
#19
|
|
Стилспатер ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
QUOTE так ни нада. Объявляй object oPC в начале, а в кейсах уже работай с ней. Ну нормально! Ты хочешь сказать, что внутри ветвления нельзя объявлять переменные?!?! Это - бред! 8 лет занимаюсь написанием программ - такого еще не видел... Не знаю, видел ли ты второй тулс, но багов с этим пока не замечено... Господа... Есть проблема. Проблема в файлике http://www.hotfile.ru/30533/ (1,2Мб - модуль для НВН2) Там есть диалог с лежаком. Если при первом подходе нажать отдохнуть, то следующая фраза этого лежака не выводится... Не понимаю... Сообщение отредактировал Plut - Dec 4 2006, 20:52 |
![]()
Сообщение
#20
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Если очень хочется, то можно:
NSS ...
case 0: { object oPC = GetPCSpeaker(); } case 1: ... |
![]()
Сообщение
#21
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
посмотрел еще раз.. можно в НВН так делать. А затык у меня когда-то был из-за попытки в разных ветках объявить переменную с одним именем.. поэтому я ее и до свича ставлю (IMG:style_emoticons/kolobok_light/smile.gif) Но тебе в данном случае все равно лучше сделать как я написал, ибо игрок у тебя во всех ветках одинаковый (IMG:style_emoticons/kolobok_light/smile.gif)
зы: но вот что-то в свичах нельзя делать точно.. а что, я уже и забыл. |
![]()
Сообщение
#22
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
QUOTE(Lex @ Dec 5 2006, 00:56) [snapback]99838[/snapback] зы: но вот что-то в свичах нельзя делать точно.. а что, я уже и забыл. переменные объявленные в свитчах глючили испокон веков, поддавались неоднократной правке, но не факт что залечились до конца. поэтому, во избежание, так сказать, их лучше не использовать вообще. |
![]()
Сообщение
#23
|
|
Стилспатер ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
QUOTE Господа... Есть проблема. Проблема в файлике http://www.hotfile.ru/30533/ (1,2Мб - модуль для НВН2) Там есть диалог с лежаком. Если при первом подходе нажать отдохнуть, то следующая фраза этого лежака не выводится... Не понимаю... Поставил патч 1.03 - все исправилось. Так что - это глюк тулса.... был. Сообщение отредактировал Plut - Dec 5 2006, 10:11 |
![]()
Сообщение
#24
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Хз, как там во втором тулсете, но в первом и правда переменные объявленные в свичах глючили, да и инфа о том, что их объявлять там низя, из Лексекона взята.
|
![]() ![]()
Сообщение
#25
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
QUOTE Да, по этому поводу там усе сделано. Даже можно строку выводить или в экшн писать по несколько скриптов... Тут все ок. Можно теперь вообще всю обработку диалогов в 1 скрипт запихать... Чтоб не рыть потом тоннами. ...ммм а пгодробнее об этом можно и в деталях как именно...для тех, кто пока в обсидиановском тулсете не работает.... насколько все удобней.. итд итп ...плз (IMG:style_emoticons/kolobok_light/biggrin.gif) Сообщение отредактировал mamuc - Dec 5 2006, 12:49 |
![]()
Сообщение
#26
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
QUOTE(mamuc @ Dec 5 2006, 12:48) [snapback]99860[/snapback] QUOTE Да, по этому поводу там усе сделано. Даже можно строку выводить или в экшн писать по несколько скриптов... Тут все ок. Можно теперь вообще всю обработку диалогов в 1 скрипт запихать... Чтоб не рыть потом тоннами. ...ммм а пгодробнее об этом можно и в деталях как именно...для тех, кто пока в обсидиановском тулсете не работает.... насколько все удобней.. итд итп ...плз Берешь ветку диалога, выбираешь Экшн -> Добавить и суешь туды скрипт (ну пока как обычно), далее впечатываешь в появившиеся поля переменные для этого скрипта (появляются если он их поддерживает). Если мало - добававить еще таких скриптов к той же ветке, выполнятся они будут по очереди. В игре уже есть пачка простеньких кирпичиков типа "Заставить (таг1) напасть на объект (таг2)", "Забрать итем (таг)" и т.п. Так что можно выстроить комбинацию из них вместо написания отдельного скрипта для каждой ветки. |
![]() ![]()
Сообщение
#27
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
azathoth большое спасибо за информацию.... (IMG:style_emoticons/kolobok_light/hi.gif)
меня больше всего заинтересовал вот такой нюанс QUOTE Даже можно строку выводить это что-то действительно новое и больше не надо будет с SetCustomToken() работать? или это и есть то самое... ...или я чего-то не так понял... (IMG:style_emoticons/kolobok_light/pardon.gif) |
![]()
Сообщение
#28
|
|
Level 19 ![]() Класс: Обыватель Характер: True Neutral Раса: Дварф NWN: Контент ![]() |
Мамук, я не в теме, но думаю, строка это "string". Т.е. можно выводить строку в фразу из тлк.
|
![]() ![]()
Сообщение
#29
|
|
Level 2 ![]() Класс: Псионик Характер: True Neutral Раса: Рептилия ![]() |
Вопрос косвенно связанный со скриптами... а сколько спелов(spells) в NWN2?
Griffon: Открой spells.2da и посчитай. Сообщение отредактировал Griffon - Dec 6 2006, 10:54 |
![]()
Сообщение
#30
|
|
Стилспатер ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
QUOTE это что-то действительно новое и больше не надо будет с SetCustomToken() работать? или это и есть то самое... Этого я делать пока не пробовал... попробуем возвращать строку.... |
![]() ![]()
Сообщение
#31
|
|
Level 1 Класс: Страж Тьмы Характер: Chaotic Evil Раса: Нежить ![]() |
Народ, а не кто не знает, как поменять расу, пол и класс игрока при входе в локацию и желательно при этом и внешний вид?
|
![]()
Сообщение
#32
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
если не урезали это в НВН2, то по идее SetCreatureAppearance или что-нить в этом роде. А если урезали - полиморфом тока наверное (IMG:style_emoticons/kolobok_light/unknw.gif)
|
![]() ![]()
Сообщение
#33
|
|
Level 1 Класс: Страж Тьмы Характер: Chaotic Evil Раса: Нежить ![]() |
NSS void SetCreatureAppearanceType(object oCreature, int nAppearanceType); Только меняет внешний вид, при этом, если игрок менял при создании персонажа лицо прическу и из-за некоторой одежды персонаж просто исчезает, но все равно спасибо. Будим исследовать дальше. |
![]()
Сообщение
#34
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Класс не поменять точно, максимум, что можно сделать - это сбить уровни до 1, а затем пролевелять РС обратно до того уровня, на котором он был нужным классом(см функции SetXP() и LevelUpHenchman()). Т.е, к примеру, если меняем на файтера, то Маг(20) превратится в Маг(1)-Воин(19). Если игрок 1го уровня, то этот трюк, конечно, не даст вообще никаких результатов.
|
![]() ![]()
Сообщение
#35
|
|
Level 1 Класс: Страж Тьмы Характер: Chaotic Evil Раса: Нежить ![]() |
Просто по ходу сюжета игрок вспоминает свои прошлые жизни, где он был воином магом и творил великие дела. Попробую обойтись только внешним видом и Cut-Сценами вместо боев (IMG:style_emoticons/kolobok_light/sad.gif) . Отсюда следует следующая проблема, как запретить ему просмотр персонажа?
|
![]()
Сообщение
#36
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить ![]() |
ShadowKeeper, ну для кутсцены ничего делать и не нужно, игроку и так доступен только внешний вид. (IMG:style_emoticons/kolobok_light/smile.gif) Посему, SetCreatureAppearanceType, будет в самый раз. (IMG:style_emoticons/kolobok_light/wink3.gif)
|
![]() ![]()
Сообщение
#37
|
|
Level 2 ![]() Класс: Псионик Характер: True Neutral Раса: Рептилия ![]() |
Вопрос следующий
Нужен таг локации в которой находится игрок и еще интересно почему не работает NSS string sCheckTag = GetTag(GetArea(oPC)); он возвращает пустоту |
![]()
Сообщение
#38
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Gloom @ Jan 5 2007, 19:07) [snapback]101568[/snapback] он возвращает пустоту хм.. попробуй для начала определить, получается ли там локация. Типа так: NSS void main() { object oPC = GetFirstPC(); SendMessageToPC(oPC,"Имя: "+GetName(oPC)); object oArea = GetArea(oPC); SendMessageToPC(oPC,"Локация: "+GetName(oArea)); } Короче суть в том, чтобы дебажить на всех этапах (определение игрока, определение локации), чтобы понять где именно косяк. Так как игра только вышла, ни у кого еще нет достаточных знаний об ошибках и подводных камней, так что ищем (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#39
|
|
Level 2 ![]() Класс: Псионик Характер: True Neutral Раса: Рептилия ![]() |
Не получается (IMG:style_emoticons/kolobok_light/sad.gif)
только у меня NSS object oPC = GetEnteringObject(); потомучто скрипт oncliententer |
![]()
Сообщение
#40
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Что не получается-то?
Возможно возвращается пустота, так как стоит скрипт на КлиентЭнтер. Попробуй проверить на тригере или на ОнЭнтер локи. Сообщение отредактировал -fenix- - Jan 5 2007, 19:34 |
![]()
Сообщение
#41
|
|
Level 2 ![]() Класс: Псионик Характер: True Neutral Раса: Рептилия ![]() |
Не получается = возвращает "Локация - " т.е пустоту
он_энтер локи тоже не работает С он_ентер тригера ситуация та же... Пустота Ах да, во всех трех случаях имя игрока показывается правильно |
![]()
Сообщение
#42
|
|
Level 2 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
QUOTE(Gloom @ Jan 5 2007, 20:53) [snapback]101575[/snapback] Не получается = возвращает "Локация - " т.е пустоту он_энтер локи тоже не работает С он_ентер тригера ситуация та же... Пустота Предположу, что название локи на русском. На OnClientEnter не советую вешать. Слабо срабатывает. Лучше на эвенты локации или уж на PC Loaded. Попробовал у себя только что. Версия 1.03. Работает. Кинул вещь на землю в локе и дописал этот код в On Acquire Item (чиста ради срабатывания (IMG:style_emoticons/kolobok_light/smile.gif) ) NSS object oPC = GetFirstPC ();
object oArea = GetArea (oPC); string sName = GetName (oArea); FloatingTextStringOnCreature (sName, oPC); Сообщение отредактировал Narruin - Jan 5 2007, 20:57 |
![]()
Сообщение
#43
|
|
Level 2 ![]() Класс: Псионик Характер: True Neutral Раса: Рептилия ![]() |
Имя локи на английском, версия 1.3, повесил ваш скрипт он_ентер тригера...
NSS object oArea = GetArea (); ругается дебагер NSS FloatingTextStringOnCreature (sName, oPC); текст не показывает Моя ошибка, тепрь показывает имя... у меня DisplayName было пусто |
![]()
Сообщение
#44
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
ну потому что там не скрипт в полном понимании, а набросок (с синтаксическими и прочими ошибками типа лишних пробелов)
Если бы глюк был только в onClientEnter, можно было бы списать на то что не успевает грузиться.. но если такая же петрушка на триггере, то похоже возможно не определяет.. возможное те банально GetArea не работает. Эх,, был бы тулс под рукой, поэкспериментировал бы. зы: попробуй взять локу по тэгу и вывести ее название. зыы: попробуй взять локу не по oPC, а по триггеру, те oArea = GetArea(OBJECT_SELF). -------------- э.. а теперь помедленнее, что показывает и где? (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#45
|
|
Level 2 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
QUOTE(Lex @ Jan 5 2007, 22:02) [snapback]101587[/snapback] те банально GetArea не работает. Эх,, был бы тулс под рукой, поэкспериментировал бы. GetArea работает. |
![]()
Сообщение
#46
|
|
Level 2 ![]() Класс: Псионик Характер: True Neutral Раса: Рептилия ![]() |
Показывает название локации
Тот скрипт который выше NSS object oArea = GetArea (); кстати работает хоть и ругается дебагер остальные варианты тоже работают на он_ентер локации проверял NSS string sName = GetTag(GetArea(OBJECT_SELF)); FloatingTextStringOnCreature (sName, oPC); на on_enter локации работает на oncliententer -нет |
![]()
Сообщение
#47
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Ну вот, знач работает. (IMG:style_emoticons/kolobok_light/smile.gif)
А если на oncliententer не пашет, значит, как гооврил Лекс, не успевает грузиться. Тут вообще многа чего не будет срабатывать. Операции с игроком должны проходить, по идее с вещами на нем, в общем смотреть надо. Сообщение отредактировал -fenix- - Jan 5 2007, 22:12 |
![]()
Сообщение
#48
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
OnClientEnter запускается еще до того, как персонаж попал в какую-либо локацию.
|
![]()
Сообщение
#49
|
|
Level 2 ![]() Класс: Псионик Характер: True Neutral Раса: Рептилия ![]() |
Всем спасибо за помощь (IMG:style_emoticons/kolobok_light/angel.gif)
Сообщение отредактировал Gloom - Jan 7 2007, 09:54 |
![]()
Сообщение
#50
|
|
Level 2 ![]() Класс: Убийца Характер: Lawful Evil Раса: Рептилия ![]() |
Пытаюсь сделать так: При получении предмета такого-то предмет удаляется и появляется рядом волк и становится хенчманом. При попытке удалить предмет вылетает из игры (НВН2). Сдается мне это изза того что не успевает что-то сделать, да? Профи, подскажите как лучше поправить. Вот мой код в OnAcquireItem:
NSS int nObjectType = OBJECT_TYPE_CREATURE;
object oTaker = GetModuleItemAcquiredBy(); object oItem = GetModuleItemAcquired(); location lLocationOfTaker = GetLocation(GetModuleItemAcquiredBy()); if (GetResRef(oItem) == "it_dw10") { ActionTakeItem(oItem, oTaker); //тут вылетает с ошибкой CreateObject(nObjectType, "c_dogwolfdire",lLocationOfTaker, FALSE, "c_dogwolfdire1"); object oHench = GetObjectByTag("c_dogwolfdire1"); AddHenchman(oTaker, oHench); |
![]()
Сообщение
#51
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
ActionTakeItem - это действие, его можно использовать только от имени существ. Модуль (или даже OBJECT_INVALID), от имени которого вызывается OnItemAcquired, не может взять предмет у игрока.
Вместо этого поставь DestroyObject. В строчке NSS AddHenchman(oTaker, oHench); используется oHench, но она ранее не объявлена и не установлена.
|
![]()
Сообщение
#52
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
webkent, слишком много лишнего в твоем коде, для НВН я бы записал так: NSS void main() { object oTarget = GetModuleItemAcquiredBy(); object oItem = GetModuleItemAcquired(); location Loc = GetLocation(oTarget); if (GetTag(oItem) == "itm_***") // Лучше определить через тэг { // Сразу определим хенча object oHench = CreateObject(OBJECT_TYPE_CREATURE, "c_dogwolfdire", Loc, FALSE, "c_dogwolfdire1"); AddHenchman(oTarget, oHench); DestroyObject(oItem, 3.0); // Удалим с задержкой, чтобы исключить баги // На пожарный случай DelayCommand(3.0, DestroyObject(GetItemPossessedBy(oTarget, "itm_***"))); } } |
![]() ![]()
Сообщение
#53
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
QUOTE ActionTakeItem(oItem, oTaker); //тут вылетает с ошибкой как говорится не в ту степь попали (IMG:style_emoticons/kolobok_light/biggrin.gif) кстати- лучше бы сразу не удалять токо что найденый итем, а сделать процесс подлинее (IMG:style_emoticons/kolobok_light/biggrin.gif) - этот итем делал бы волка на каком нить алтаре, например, или повесить скрипт одноразового юза на сам предмет - тогда появление волка -хенча будет или у алтаря илии после юза спец свойства итема (IMG:style_emoticons/kolobok_light/biggrin.gif) CODE CreateObject(nObjectType, "c_dogwolfdire",lLocationOfTaker, FALSE, "c_dogwolfdire1"); object oHench = GetObjectByTag("c_dogwolfdire1"); ..и еще ...а почему 2 строчки (IMG:style_emoticons/kolobok_light/biggrin.gif) ведь можно и одной (IMG:style_emoticons/kolobok_light/biggrin.gif) CODE object oHench = CreateObject(nObjectType, "c_dogwolfdire",lLocationOfTaker, FALSE, "c_dogwolfdire1"); а то создание обьекта - процесс сравнительно "громоздкий"( как правило лучше на этом процесе действие скрипта и заканчивать (IMG:style_emoticons/kolobok_light/biggrin.gif) ), а ты уже ищешь обьект (по тэгу), который еще может и не успел досоздатся (IMG:style_emoticons/kolobok_light/biggrin.gif) п.с. пока ходил по делам ( пост не завершил писать) gennady уже об этом написал (IMG:style_emoticons/kolobok_light/biggrin.gif) Сообщение отредактировал mamuc - Jan 8 2007, 11:59 |
![]()
Сообщение
#54
|
|
Level 2 ![]() Класс: Убийца Характер: Lawful Evil Раса: Рептилия ![]() |
QUOTE как говорится не в ту степь попали кстати- лучше бы сразу не удалять токо что найденый итем, а сделать процесс подлинее - этот итем делал бы волка на каком нить алтаре, например, или повесить скрипт одноразового юза на сам предмет - тогда появление волка -хенча будет или у алтаря илии после юза спец свойства итема Да там просто магазин петомцев =) Ок спасибо всем щас буду править. |
![]()
Сообщение
#55
|
|
Level 2 ![]() Класс: Убийца Характер: Lawful Evil Раса: Рептилия ![]() |
И вот что интересно - Я ставлю волка в тулсете, меняю ему некоторые параметры, меняю ТАГ и меняю Тэмплейт. Потом через скрипт хочу создать волка с таким темплейтом(еще одного) а он не создается. Если пробую создать НПЦ со стандартным темплейтом то всё отлично создается. Вот вопрос - что, разве обязательно еще 1 шаблон создавать чтобы потом через скрипт этого НПЦ создать или как-то можно без этого?
|
![]()
Сообщение
#56
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Все объекты создаются из палитры по их РесРефу. Тобишь, добавляешь в палитру своего волка, делаешь ему уникальный РесРеф и потом по нему создаешь этого волка где тебе надо. В первом НВН была еще возможность создания копии, хз как тут. Но лучше делай через палитру. Еще, если этот непись тебе нужен тока раз, там по квесту он где появляется или еще чего, то можно его для начала кинуть в закрытую локу, а потом просто переместить куда надо.
|
![]()
Сообщение
#57
|
|
Level 2 ![]() Класс: Убийца Характер: Lawful Evil Раса: Рептилия ![]() |
Тупой вопрос: как скриптами убить объект? =)
Сообщение отредактировал webkent - Jan 12 2007, 23:40 |
![]()
Сообщение
#58
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Убить или удалить?
|
![]()
Сообщение
#59
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить ![]() |
2 webkent:
Самое простое: NSS // Destroy oObject (irrevocably). // This will not work on modules and areas. void DestroyObject(object oDestroy, float fDelay=0.0f) Так же, можно ипользовать эффекты. Например дамага/смерти: NSS effect EffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_MAGICAL, int nDamagePower=DAMAGE_POWER_NORMAL) NSS effect EffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE) Применяюцца, они с помощью функции: NSS ApplyEffectToObject. Ну либа ApplyEffectAtLocation; Сообщение отредактировал Waromon - Jan 13 2007, 13:38 |
![]()
Сообщение
#60
|
|
Level 2 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
Подскажите кто знает как "ловить" (как эвент) момент, когда по игроку бьют?
Нужно для реализации durability на вещах. Исользование только On Hit Cast Spell : Unique на мэйн арморе не подходит. Вдруг игрок без армора будет бегать (IMG:style_emoticons/kolobok_light/smile.gif) Тогда шлем, перчи etc. не будут ломаться. Сообщение отредактировал Narruin - Jan 13 2007, 15:50 |
![]() ![]() |
Текстовая версия | Сейчас: 30th July 2025 - 06:30 |