Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
14 страниц V   1 2 3 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты: Все вопросы, Алгоритмы, оптимизация, особености и хитрости в скриптинге
Lex
сообщение Apr 2 2006, 19:41
Сообщение #1


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Обсуждение каки-то непонятных моментов в алгоритме, вариантов использования функций, оптимизация скриптов. Тут можно обсудить алгоритмы и особености скриптинга.

>> просьбы написать скрипт не в эту тему, а сюда: Напишите пожалуйста скрипт
>> выкладывать готовые и отлаженные скрипты не в эту тему, а сюда: Готовые скрипты
Тут только вопросы и обсуждение проблем и методов их решения, а так же все непонятки с "должно работать, но не работает".


___

База скриптов (NWN)
Скрипты для новичков (NWN)
Вопросы по скриптам (NWN)
Построение скриптовых сцен (NWN)
Так как скриптинг не сильно изменился, то большая часть вещей, написаная под НВН1 нормально работает и в НВН2. Посмотрите в этих темах, вполне возможно вы найдете интересующую вас информацию.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Gloom
сообщение Nov 29 2006, 07:28
Сообщение #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 - имя игрока
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Vanes
сообщение Nov 29 2006, 08:24
Сообщение #3


Level 11
Иконки Групп

Класс: Вор
Характер: Neutral Evil
Раса: Эльф
NWN: Скриптинг [PW]
Validor2



предпоследняя строка
object oPlayer = GetNextObjectInArea(GetArea(GetObjectByTag("gds_wpt")));

замени на
oPlayer = GetNextObjectInArea(GetArea(GetObjectByTag("gds_wpt")));
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Nov 29 2006, 08:38
Сообщение #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]
И еще интересно почему не работает такая

вечный цикл вообще. первичное условие выхода - валидность перечисляемого объекта.


и так, между прочим, для поиска игроков перебирать все объекты в локации - это, я вам скажу...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Gloom
сообщение Nov 29 2006, 09:17
Сообщение #5


Level 2
*

Класс: Псионик
Характер: True Neutral
Раса: Рептилия



Спасибо за помощь (IMG:style_emoticons/kolobok_light/good.gif)
QUOTE
и так, между прочим, для поиска игроков перебирать все объекты в локации - это, я вам скажу...

это было промежуточное решение, проверка самой возможности...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Plut
сообщение Nov 29 2006, 23:08
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Plut
сообщение Dec 4 2006, 12:29
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Sleeper
сообщение Dec 4 2006, 12:53
Сообщение #8


Level 8
***

Класс: Бард
Характер: Chaotic Neutral
Раса: Полуэльф



Где брать скрипт на открытие магазина через диалог?(IMG:style_emoticons/kolobok_light/biggrin.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Dec 4 2006, 13:11
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Plut
сообщение Dec 4 2006, 13:16
Сообщение #10


Стилспатер
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



QUOTE
А что тебя останавливает? smile.gif

То что оно не отрабатывает. Может там синтаксис какой хитрый...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Dec 4 2006, 13:30
Сообщение #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:
        .....
        .....
    }
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Plut
сообщение Dec 4 2006, 13:36
Сообщение #12


Стилспатер
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



QUOTE
Ну, если компилица, но не работает, то вот что может быть:

Не, это я пример набирал - ошибся... там у меня через свои функции сделано, но смысл (вернее принцип такой). Судя по всему не отрабатывает запуск скрипта из листа свойств плэйсибла. Т.е. если я пишу там ИмяСкрипта(параметр), то оно не работает, а если я убиваю параметры и скрипте и при его вызове, то все нормально.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Dec 4 2006, 13:38
Сообщение #13


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Plut, передавать параметр таким образом в скрипт нельзя. Делай через локальные переменные на игроке/объекте или модуле.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Plut
сообщение Dec 4 2006, 13:44
Сообщение #14


Стилспатер
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



QUOTE
Plut, передавать параметр таким образом в скрипт нельзя. Делай через локальные переменные на игроке/объекте или модуле.

Спасибо за кратки и содержательный ответ. А жаль, все-таки...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Dec 4 2006, 13:46
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Dec 4 2006, 14:05
Сообщение #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;
// И так далее
}
...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Plut
сообщение Dec 4 2006, 17:30
Сообщение #17


Стилспатер
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



CODE
Единственное место, где параметры бы пригодились - диалоги, чтобы передавать например номер ответа и от него плясать.. но насколько я знаю в новом тулсете что-то по этому поводу сделано.. посмотреть тока не могу.

Да, по этому поводу там усе сделано. Даже можно строку выводить или в экшн писать по несколько скриптов... Тут все ок. Можно теперь вообще всю обработку диалогов в 1 скрипт запихать... Чтоб не рыть потом тоннами.

QUOTE
В case низя объявлять или инициализировать переменные, делай это до него.

А я в нем и не пытался инициализировать. Я в него пытался передавать входящий параметр...

Согласен, можно и так написать. Идея была сделать скрипт, в котором хранятся On Used, например, всех плэйсиблов или всех дверей... разных... в зависимости, например, от тега... ну и т.д. Это все к сокращению количества скриптов.

Сообщение отредактировал Plut - Dec 4 2006, 17:42
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Dec 4 2006, 18:34
Сообщение #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 в начале, а в кейсах уже работай с ней.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Plut
сообщение Dec 4 2006, 20:51
Сообщение #19


Стилспатер
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



QUOTE
так ни нада. Объявляй object oPC в начале, а в кейсах уже работай с ней.

Ну нормально! Ты хочешь сказать, что внутри ветвления нельзя объявлять переменные?!?! Это - бред! 8 лет занимаюсь написанием программ - такого еще не видел... Не знаю, видел ли ты второй тулс, но багов с этим пока не замечено...

Господа... Есть проблема. Проблема в файлике http://www.hotfile.ru/30533/ (1,2Мб - модуль для НВН2)
Там есть диалог с лежаком. Если при первом подходе нажать отдохнуть, то следующая фраза этого лежака не выводится... Не понимаю...

Сообщение отредактировал Plut - Dec 4 2006, 20:52
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Dec 5 2006, 00:06
Сообщение #20


Level 12
Иконки Групп

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



Если очень хочется, то можно:
NSS
...
case 0:
{
      object oPC = GetPCSpeaker();
}
case 1:
...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Dec 5 2006, 00:56
Сообщение #21


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



посмотрел еще раз.. можно в НВН так делать. А затык у меня когда-то был из-за попытки в разных ветках объявить переменную с одним именем.. поэтому я ее и до свича ставлю (IMG:style_emoticons/kolobok_light/smile.gif) Но тебе в данном случае все равно лучше сделать как я написал, ибо игрок у тебя во всех ветках одинаковый (IMG:style_emoticons/kolobok_light/smile.gif)

зы: но вот что-то в свичах нельзя делать точно.. а что, я уже и забыл.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Dec 5 2006, 06:34
Сообщение #22


Level 9
Иконки Групп

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



QUOTE(Lex @ Dec 5 2006, 00:56) [snapback]99838[/snapback]
зы: но вот что-то в свичах нельзя делать точно.. а что, я уже и забыл.

переменные объявленные в свитчах глючили испокон веков, поддавались неоднократной правке, но не факт что залечились до конца. поэтому, во избежание, так сказать, их лучше не использовать вообще.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Plut
сообщение Dec 5 2006, 10:09
Сообщение #23


Стилспатер
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



QUOTE
Господа... Есть проблема. Проблема в файлике http://www.hotfile.ru/30533/ (1,2Мб - модуль для НВН2) Там есть диалог с лежаком. Если при первом подходе нажать отдохнуть, то следующая фраза этого лежака не выводится... Не понимаю...

Поставил патч 1.03 - все исправилось. Так что - это глюк тулса.... был.

Сообщение отредактировал Plut - Dec 5 2006, 10:11
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Dec 5 2006, 10:55
Сообщение #24


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



Хз, как там во втором тулсете, но в первом и правда переменные объявленные в свичах глючили, да и инфа о том, что их объявлять там низя, из Лексекона взята.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Dec 5 2006, 12:48
Сообщение #25


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



QUOTE
Да, по этому поводу там усе сделано. Даже можно строку выводить или в экшн писать по несколько скриптов... Тут все ок. Можно теперь вообще всю обработку диалогов в 1 скрипт запихать... Чтоб не рыть потом тоннами.

...ммм а пгодробнее об этом можно и в деталях как именно...для тех, кто пока в обсидиановском тулсете не работает....
насколько все удобней.. итд итп ...плз (IMG:style_emoticons/kolobok_light/biggrin.gif)



Сообщение отредактировал mamuc - Dec 5 2006, 12:49
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

14 страниц V   1 2 3 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 19th April 2018 - 14:57