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


Форум TeamX » Тех. поддержка » Скрипты (Все вопросы по скриптингу - сюда)

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 ] Все собщения

 
Mynah
Модератор

Откуда: Пермь
Регистрация: Окт. 2004

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

2Wasteland Ghost:
Цитата:

stored_node := "Node002";
call stored_node;


Об этой особенности синтаксиса фоловских сриптов не знал. Big thnks :) Будем использовать.

2Raven:
Цитата:

перебирает все "юзерские" мсг-шки, смотрит на 100-ую строчку на наличие слова "LABEL: Vasya", например.


Предпочитаю alt+f7 в totalcmd  по дате :)
Цитата:

Вообще же я даже написал скрипт, который парсит свою мсг-шку как ... скрипт.


А вот это - полезно :) Спасибо за идею :)

2pal:
Имхо, noid'овский декомпилер лучше... он ближе к оригинальным скриптам фола.

(Отредактировал(а) Mynah - 15:24 - 17 Ноября, 2004)

-----
Scio me nihil scire

Отправлено: 13:22 - 17 Ноября, 2004
Wasteland Ghost
Маленькое Злое Привидение

Откуда: Россия, Самара
Регистрация: Дек. 2002

Всего: 2251 сообщение

2pal Что там смысл имеет, а что нет надо смотреть конкретно по гварам. Это ж из Ф1 гвары? Вот и посмотри :).
По вопросу. Что там декомпилер выдаёт - без понятия :). Но вот что я про say_option знаю:

void gSay_Option(int msg_list, int msg_num, procedure target, int reaction) - вывести вариант ответа в диалоге без проверки интеллекта
Аргументы:
msg_list - номер файла msg
msg_num - номер строки в файле msg
target - процедура, к которой осуществляется переход при выборе соответствующего ответа
reaction - эмоциональная реакция (см. DEFINE.H):
GOOD_REACTION (49)
NEUTRAL_REACTION (50)
BAD_REACTION (51)
Возвращаемое значение:
нет

Отправлено: 16:03 - 17 Ноября, 2004
pal
Пользователь

Откуда: Estonia, Narva
Регистрация: Янв. 2003

Всего: 42 сообщения

To Wasteland Ghost:
большой спасибо за исчерпывающий ответ!
то что и искал.
единственный момент:
target - процедура, к которой осуществляется переход при выборе соответствующего ответа
в том примеру где я видел этот код стоит число.я так понимаю нумерация берется из заголовка скрипта где процедуры описаны. вопрос отсчёт тут с 1 ведётся или 0 ?

To Mynah:
эхх согласен что Noid'овский лучше тока мне Ipp-шный компилер больше по душе , точнее по паскалевскому синтаксису
дело вкуса....

Отправлено: 16:28 - 17 Ноября, 2004
Raven
Пользователь

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

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

>>Предпочитаю alt+f7 в totalcmd  по дате :)

Alt+F7 , конечно, рулит, но ты не понял смысла фразы :-)

Идея в том, что таким образом ты "отучаешь" скрипт от фиксированого номера (помнишь #define NAME?). Т.е. такому скрипту абсолютно пофигу на какой там строчке scripts.lst его прописали. Он сам ищет нужную ему мсг-шку по определённой ключевой фразе и запоминает её номер. Scripts.lst в этом случае перестаёт быть узким местом.

>>А вот это - полезно :) Спасибо за идею :)

Хи. Незачто. Ты попробуй парсер написать :-) Могу выслать тебе свой.Правда, там ни строчки комментариев на 10кб кода :-)

Основная идея, от которой всё пошло, проста: нужно вынести Node-процедуры в мсг-файл. Как это делается (я с этого начинал, сейчас всё совсем иначе).

Заводится мсг-шка такого вот формата:
------------------------------
{100}{}{NODE_START}
{101}{}{Привет} //Аргумент для Reply
{102}{}{Ага}    //Текстовый аргумент для Option
{103}{}{Нод1}   //Ссылка на нод для этого Option
{104}{}{Пока}   //Аналогично 102
{105}{}{Выход}  //
{106}{}{NODE_END}

{200}{}{NODE_Нод1}
<...>
{341}{}{NODE_Выход}
<...>
-------------------------------

Пишется примерно такой код:
variable start_node;
--------------------------------
variable start_node;

procedure talk_p_proc begin
call parse_node("START");
end

procedure parse_node(variable str) begin
variable i:=1;
//str-имя нода для парсинга
str:="NODE_"+str; //приводим к единому формату, str="NODE_START"
while mstr(i)!=str do i+=1; //Ищем начало нода. У нас i==100
Reply(i+1); //Выводим в Reply стр. 101
start_opt:=i+2; //start_opt = номеру стр. с первым Option (стр. 102)
i:=0;
while mstr(start_opt+i)!="NODE_END" do begin //Всё до конца нода парсим как Option-ы
 if (i/2+1)==1 then Option(mstr(start_opt+i),Node001);  //Первый Option диалога фактически ссылается на Node001
 else if (i/2+1)==2 then Option(mstr(start_opt+i),Node002); //Второй - на Node002 и т.д.
 <...>
end
end

procedure Node001 begin
call parse_node(mstr(start_node+1));
//Вызываем парсер снова, передавая ему в качестве арг. текст соответствующей первому Option ссылки (стр. 103)
end

procedure Node002 begin
call parse_node(mstr(start_node+3)); //стр. 105
end
<...>
--------------------------------

Итого: код скрипта фиксирован, реальных нодов в нём девять. А "виртуальных" нодов в msg может быть сколько угодно. Т.е. парсер пишется один раз, а все диалоги программируются в мсг. Можно полностью поменять структуру диалога без перекомпиляции.

Минусов (в этом, примитивном, случае) вагон. Чеки на ЛВАРы, выдача предметов, строгий синтаксис, возможность появления бесконечных циклов и т.д. Всё из перечисленного уже исправленно :-)

Кто-то заинтересовался? Если наберётся 3-5 желающих, то можно парсер довести до ума и использовать в работе.

Отправлено: 16:34 - 17 Ноября, 2004
Mynah
Модератор

Откуда: Пермь
Регистрация: Окт. 2004

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

Цитата:

Могу выслать тебе свой.Правда, там ни строчки комментариев на 10кб кода :-)


Мы в такие шагали дали, что не очень-то и дойдёшь :))) Если не сложно - вышли. Я уже почти привык к коду без комментов :)
Вот сюда

-----
Scio me nihil scire

Отправлено: 17:03 - 17 Ноября, 2004
Alan Killenger
Пользователь

Откуда: Россия, Ижевск
Регистрация: Июль 2004

Всего: 404 сообщения

Цитата:
Зато базовый адрес строки укладывается просто замечательно .


Гхды.. Как это? (Лучше бы вы этого не говорили.. То есть вы хотите сказать, что при попытке присвоения переменной значения типа string, переменной автоматически присваивается указатель на эту строку? Указатель как раз четыре байта, но тогда где храниться строка?)

[флуд удалён]

P.P.S. Никто не отвечает, наверное приняли за шутку.. Как узнать, присутствует ли в *.msg файле реплика с заданным номером?

(Отредактировал(а) Alan Killenger - 20:47 - 17 Ноября, 2004)

-----
hit me, nail me, make me god

Отправлено: 19:45 - 17 Ноября, 2004
Wasteland Ghost
Маленькое Злое Привидение

Откуда: Россия, Самара
Регистрация: Дек. 2002

Всего: 2251 сообщение

Когда error на экране появится, тогда и узнаешь :). Скрипт это не обрабатывает, это обрабатывает движок.

Отправлено: 10:39 - 18 Ноября, 2004
Alan Killenger
Пользователь

Откуда: Россия, Ижевск
Регистрация: Июль 2004

Всего: 404 сообщения

1. Как производить проверку работы скрипта? То есть существуют ли какие-либо аналоги пошагового выполнения, как в Pascal'e? Знаю, что скорее всего нет.. но я просто не мог не спросить. А какие-нибудь левые способы? Я, например, в начале работы critter_p_proc вывожу плавающими сообщениями значения всех переменных, может кто знает способ получше?

2. Как заставить криттера подойти к чузену и только потом завести диалог? Ээ.. попытался найти этот момент в скрипте механника из Наварро, но не нашел. Какова технология согласовывания времени воспроизведения анимации и мгновенных действий?

добавление

Раскрыл глаза и узрел: boolean anim_busy(ObjectPtr who), sorry за второй вопрос.

(Отредактировал(а) Alan Killenger - 15:14 - 21 Ноября, 2004)

Отправлено: 15:27 - 18 Ноября, 2004
pal
Пользователь

Откуда: Estonia, Narva
Регистрация: Янв. 2003

Всего: 42 сообщения

кто нибудь может помочь в определнии что делает команда : PlayerHasPresencePerk(1) ?
и есть ли аналоги этой команды? а то декомпилер её перевёл в ipp а компилер её (команду т.е.)  не хочет обратно в int делать .

Отправлено: 17:13 - 18 Ноября, 2004
Mynah
Модератор

Откуда: Пермь
Регистрация: Окт. 2004

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

2pal:
Цитата:

PlayerHasPresencePerk
Return 1 (true) if player has the Presence trait, false (0) otherwise.


Т.е. у этой команды не должно быть параметров. А вообще, тебе сюда.

-----
Scio me nihil scire

Отправлено: 17:37 - 18 Ноября, 2004
 

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 ] Все собщения


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