» TeamX (Архив Форума)«


Форум TeamX » Исследования » "Живые" НПС... (...или продолжаем ковырять строки)

Переход по темам
<< Пред. След. >>
Единственная страница этой темы

 
Raven
Пользователь

Откуда: Владик
Регистрация: Февр. 2004

Всего: 408 сообщений

TeamX prodly presents...

Fun with strings vol.2...

get_char, wordar and cust_str procedures...

Итак, други, как понятно из предисловия, причиной моей радости стали три свеженаписанных процедурки, духовные наследники atoi. По порядку о них.

1. char get_char(var original_string, var part_of_string);

Функция принимает полную строку и кусок подстроки, возвращает следующий за подстрокой символ (диапазон по ASCII таблице от 32 до 125 включительно - маленькие и большие буквы, цифры, скобки, пробелы, знаки препинания и прочее) или "Z".

Пример:
-------------------------------------
char:=get_char("Ab c%4?78hj","Ab c%4");
display_msg("char="+char);
-------------------------------------
Выведет:
-------------------------------------
char=?
-------------------------------------

2. string wordar(var array, var cell);

Принимает строку вида "abcd|efgh|klmn|...", где каждый блок может состоять из любых символов, понимаемых get_char. Второй параметр - число от нуля и выше - номер ячейки, содержимое которой надо извлечь.

Пример:
-------------------------------------
word:=obj_name(dude_obj)+"|"+obj_name(self_obj);
display_msg("str="+wordar(word,1));
-------------------------------------
Выведет имя self_obj.

3. string cust_str(var string_template, var word_array);

Получает шаблон строки и массив слов. После этого парсит полученную строку и заменяет в ней символы "###" на слово (соответствующее порядку вхождения) из массива.

Пример1:
acklint.ssl
-------------------------------------
float_msg(self_obj,cust_str(mstr(20),obj_name(dude_obj)+"|"+obj_name(self_obj)),0);
-------------------------------------
acklint.msg
-------------------------------------
{20}{}{Hello, ###, my name is ###. How it goes?}
-------------------------------------
Выведет флоатером (скрипт привязан к Клинту, имя чуза None):
-------------------------------------
Hello, None, my name is Klint. How it goes?
-------------------------------------

Пример2:
acklint.ssl
-------------------------------------
word:=mstr(random(21,22))+"|"+mstr(random(23,24))+"|"+mstr(random(25,26));
float_msg(self_obj,cust_str(mstr(20),word),0);
-------------------------------------
acklint.msg
-------------------------------------
{20}{}{###, ###, ###?}
{21}{}{Hello}
{22}{}{Hi}
{23}{}{pal}
{24}{}{friend}
{25}{}{how it goes}
{26}{}{any news}
-------------------------------------

Две строчки кода и 7 строчек текста дадут один из следующих результатов:
-------------------------------------
Hello, pal, how it goes?
Hello, pal, any news?
Hello, friend, how it goes?
Hello, friend, any news?
Hi, pal, how it goes?
Hi, pal, any news?
Hi, friend, how it goes?
Hi, friend, any news?
-------------------------------------
8 случайных вариантов.
Соответственно, шаблон
{20}{}{### ### ### ###.}
с тремя вариантами для каждого темплейта (13 строк текста + 2 строки кода) даст нам 3^4=81 вариант. Правда, хороший способ оживить НПС? :-)

[десять минут спустя] (я пишу постинги в процессе кодинга. Кто знает мой метод работы - тот поймёт :-))

Чуть дописал cust_str:

string cust_str(var string_template, var word_array, var num_of_variants_for_every_word);

Третий параметр задаёт количество вариантов для каждого слова.

Сразу пример (модифицированный с Клинтом), чтобы стало понятно:
acklint.ssl
-------------------------------------
float_msg(self_obj,cust_str(mstr(20),mstr(21)+"|"+mstr(22)+"|"+mstr(23),3),0);
-------------------------------------
acklint.msg
-------------------------------------
{20}{}{###, ###, ###?}
{21}{}{Hello|Hi|Hey}
{22}{}{pal|friend|man}
{23}{}{how it goes|any news|wazzup}
-------------------------------------
Варианты: 3^3=27 штук. На всё ушла одна строчка кода, 4 строки в msg.

int+msg+исходники:
http://raventx.nm.ru/custstr.rar

Отправлено: 10:50 - 1 Июля, 2005
 

Переход по темам
<< Пред. След. >>
Единственная страница этой темы


Powered by Ikonboard 2.1.9 RUS
Modified by RU.Board Team
© 2000 Ikonboard.com