![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#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 |
![]() ![]() |
Текстовая версия | Сейчас: 27th April 2024 - 03:11 |