Gem of the North


Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению ) -ОтветитьНовая темаГолосование-

> Вопросы и ответы 2
DarkSet
Отправлено: Mar 6 2006, 07:55 PM
|Цитировать


Group Icon



У меня назрела пара вопросов. Есть ли в этом недо С обращение к конкретной позиции переменной типа стринг? обращение st[i] где st - string. i - integer он что то упорно не понимает.

И еще, как с описанием множеств? Помнится в том же паскале я написал ('0'..'9') и компилятор понимает что имеются в виду цифры от 0 до 9 все, тут как то так можно? Или только полным перечислением?


--------------------
The gods may throw a dice
their minds as cold as ice
and someone way down here
loses someone dear
(с) ABBA "The Winner Takes It All"
| PM| Email Poster| Users Website| ICQ| MSN|
Вверх Вниз
denis0k
Отправлено: Mar 6 2006, 09:12 PM
|Цитировать


Group Icon



1. Извращайся через GetSubString.
2. Извращайся через цикл.

Вот такой недоси smile.gif Кстати, че-то я массивов вообще в нвскрипте не замечал.


--------------------
Люди делятся на 4 типа: одни играют в LA2, другие в Aion, третьи в WoW. А четвёртые сочувствуют первым трём.
| PM| Users Website|
Вверх Вниз
zergirl
Отправлено: Mar 6 2006, 10:07 PM
|Цитировать


Group Icon



CODE

string GetStringAt(string str, int pos)
{
 return (GetSubString(str, pos, 1));
}

// ...

void main()
{
 // ...
 string str = "Sample string";
 string ch = GetStringAt(str, 5);
 SendMessageToPC(GetFirstPC(), ch); // -> "e"
 // ...
}


--------------------
Дурёха
| PM| Email Poster|
Вверх Вниз
zergirl
Отправлено: Mar 6 2006, 10:18 PM
|Цитировать


Group Icon



массивы

вариант 1:
CODE

// без error-чекинга

void CreateArray(string name, int len)
{
 object mod = GetModule();
 for (int i = 0; i < len; ++i)
 {
   SetLocalInt(mod, name + "_len", len);
 }
}

int DeleteArray(string name)
{
 object mod = GetModule();

 for (int i = 0; i < len; ++i)
 {
   DeleteLocalString(mod, name + "_" + i, len);
 }
 DeleteLocalInt(mod, name + "_len", len);
}

string ArrayGet(string name, int pos)
{
 object mod = GetModule();
 return (GetLocalString(mod, name + "_" + i));
}

int ArraySet(string name, int pos, string val)
{
 object mod = GetModule();
 SetLocalString(mod, name + "_" + i, val);
}


варинт 2:
смотрим hashtable модуль для nwnx2
http://www.nwnx.org/


--------------------
Дурёха
| PM| Email Poster|
Вверх Вниз
DarkSet
Отправлено: Mar 7 2006, 12:54 AM
|Цитировать


Group Icon



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


--------------------
The gods may throw a dice
their minds as cold as ice
and someone way down here
loses someone dear
(с) ABBA "The Winner Takes It All"
| PM| Email Poster| Users Website| ICQ| MSN|
Вверх Вниз
zergirl
Отправлено: Mar 7 2006, 07:21 AM
|Цитировать


Group Icon



В чем проблема написать интерфейс ко множествам с реализацией через массивы? =)

ps О какой встроенной поддержке множеств может идти речь в языке, в котором нет массивов? =)


--------------------
Дурёха
| PM| Email Poster|
Вверх Вниз
zergirl
Отправлено: Mar 7 2006, 08:14 AM
|Цитировать


Group Icon



множества (v1.02 =)):

CODE

int ArrayLength(string name)
{
 object mod = GetModule();
 return (GetLocalInt(mod, name + "_len"));
}

int ArrayResize(string name, int diff)
{
 object mod = GetModule();
 int len = ArrayLength(name);

 if (len + diff < 0)
 {
   return (FALSE);
 }

 SetLocalInt(mod, name + "_len", len + diff);

 // Удалить лишние элементы
 if (diff < 0)
 {
   for (int i = 0; i < -diff; ++i)
   {
     int pos = len - i;
     DeleteLocalString(mod, name + "_" + pos);
   }
 }
}

// ...

void CreateSet(string name)
{
 CreateArray(name, 0);
}

void DeleteSet(string name)
{
 DeleteArray(name);
}

void SetAdd(string name, string val)
{
 if (!SetIn(name, val))
 {
   int pos = ArrayLength(name);
   ArrayResize(name, 1);
   ArraySet(name, len, val);
 }
}

int SetRemove(string name, string val)
{
 int len = ArrayLength(name);
 for (int i = 0; i < len; ++i)
 {
   if (ArrayGet(name, i) == val)
   {
     // Сдвинуть все элементы после удаленного влево
     for (int j = i + 1; j < len; ++j)
     {
       ArraySet(name, j - 1, ArrayGet(name, j));
     }
     ArrayResize(name, -1);
     return (TRUE);
   }
 }
 return (FALSE);
}

int SetIn(string name, string val)
{
 int len = ArrayLength(name);
 for (int i = 0; i < len; ++i)
 {
   if (ArrayGet(name, i) == val)
   {
     return (TRUE);
   }
 }
 return (FALSE);
}

// Если нужны, то могу написать
// void SetCopy(string source, string dest);
// void SetUnion(string source1, string source2, string dest);
// void SetIntersection(string source1, string source2, string dest);
// void SetDifference(string source1, string source2, string dest);


--------------------
Дурёха
| PM| Email Poster|
Вверх Вниз
DarkSet
Отправлено: Mar 7 2006, 10:33 AM
|Цитировать


Group Icon



я не понимаю этот скрипт ) Нет, то есть все ясно, но суть в том что описать можно и перечислением, если надо, это не так сложно ) меня интересовало можно ли это не делать, значит нельзя.

Для моего случая все так сложно не надо, там попроще будет. Ну я разберуся ) Спасибо


--------------------
The gods may throw a dice
their minds as cold as ice
and someone way down here
loses someone dear
(с) ABBA "The Winner Takes It All"
| PM| Email Poster| Users Website| ICQ| MSN|
Вверх Вниз
dumbo
Отправлено: Mar 7 2006, 11:33 AM
|Цитировать


*



QUOTE (DarkSet)
с и паскаль понимают запись а..я как множество маленький букв от а до я включительно, а вот эта фигня что то не понимает, или я неправильно пишу

можно с этого места поподробней? - что там С понимает?.. huh.gif
| PM| Email Poster|
Вверх Вниз
DarkSet
Отправлено: Mar 7 2006, 11:46 AM
|Цитировать


Group Icon



не знаю как это в С описывается. Да и в паскале уже точно не помню smile.gif описание толи ['a'..'z'] толи ('a'..'z'), означает все буквы от а до z. Точнее ищи в хелпе, или описании языков, я с ходу не скажу )


--------------------
The gods may throw a dice
their minds as cold as ice
and someone way down here
loses someone dear
(с) ABBA "The Winner Takes It All"
| PM| Email Poster| Users Website| ICQ| MSN|
Вверх Вниз
DarkSet
Отправлено: Mar 8 2006, 01:24 PM
|Цитировать


Group Icon



как реализован наш банк? Как поиметь доступ к последнему сказанному выражению? Все равно кого, но можно и кого то конкретного.

не понял я толком как он работает. Сначала объект должен сказать что то, а потом запускатся эта функция и находит его последние слова или сначала надо запустить функцию, она начинает слушать, после чего то что скажет объект заносит в переменную?

И совсем непонятно что за третий интеджерный параметр?

Может это работает только в диалоге? Я пытался сделать на ящике на открытие определение объекта на закрытие этот сет лиснпатерн, не получилось. И пытался сделать на открытие сет лиснпатерн а на закрытие просто вывести то что записалось в переменную. Ничего не записалось.


--------------------
The gods may throw a dice
their minds as cold as ice
and someone way down here
loses someone dear
(с) ABBA "The Winner Takes It All"
| PM| Email Poster| Users Website| ICQ| MSN|
Вверх Вниз
dumbo
Отправлено: Mar 10 2006, 09:42 AM
|Цитировать


*



в OnSpawn ставить паттерны и включать слушалку (SetListenPattern, SetListening). третий параметр назначает номер этому паттерну. этот номер вернет функция GetListenPatternNumber, если слушающий услышит фразу, совпадающую с паттерном. а вообще, все это десятикратно разбиралось на форуме wrg.ru - сделай поиск по любой из этих функций.
| PM| Email Poster|
Вверх Вниз
zergirl
Отправлено: Mar 10 2006, 11:06 AM
|Цитировать


Group Icon



будет слушать все фразы вида "I wish ..."

OnSpawn
CODE

void main()
{
   SetListening(OBJECT_SELF, TRUE);
   SetListenPattern(OBJECT_SELF, "I wish **", 1001);
}


OnConversation
CODE

void main()
{
   object oSpeaker = GetLastSpeaker();
   if (GetIsObjectValid(oSpeaker))
   {
       int match = GetListenPatternNumber();
       if (match == 1001)
       {
           int matches = GetMatchedSubstringsCount();
           if (matches == 2)
           {
               string str = GetMatchedSubstring(1);
               // тут идет обработка str
           }
      }
   }
}


--------------------
Дурёха
| PM| Email Poster|
Вверх Вниз
DarkSet
Отправлено: Mar 25 2006, 11:53 AM
|Цитировать


Group Icon



Как поиметь квенту персонажа? Получить ее как то и в каком виде она будет? Как с ней работать?


--------------------
The gods may throw a dice
their minds as cold as ice
and someone way down here
loses someone dear
(с) ABBA "The Winner Takes It All"
| PM| Email Poster| Users Website| ICQ| MSN|
Вверх Вниз
denis0k
Отправлено: Mar 25 2006, 01:39 PM
|Цитировать


Group Icon



Квента - это description (есть у любого объекта), пока никак. Где-то вроде был разговор, что с патча 1.67 можно будет, но я могу ошибаться.


--------------------
Люди делятся на 4 типа: одни играют в LA2, другие в Aion, третьи в WoW. А четвёртые сочувствуют первым трём.
| PM| Users Website|
Вверх Вниз
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Страницы: (2) [1] 2  -ОтветитьНовая темаГолосование-