Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2009, 16:21   #1
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию Проблема с квестами...

Я делаю РПГ. Не могу решить проблему с квестами. Я читаю текстовый файл и оттуда команды. Как сделать так чтобы он читал не все сразу, а только до туда где стоит условие? А потом чтобы если выполнялось условие он читал опять до места где стоит условие? Подкажите плз. Думаю из вас кто-то уже это делал.
Shadow_1329 вне форума Ответить с цитированием
Старый 27.07.2009, 16:41   #2
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Код в студию.
Вадим Буренков вне форума Ответить с цитированием
Старый 27.07.2009, 17:22   #3
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

Это код выполнения скриптов(квестов). Особо код еще не готов так как не понимаю этих вещей! Ну в общем вот!
Код:
procedure DoScript(Scriptname:string);//Что нужно выполнять
var f:textFile;
Str:array[1..200] of String;//массив  строк
Nummer:array[1..200] of integer;//массив показателей кол-ва предметов
MaxScripts:integer;//Максимальное кол-во строк в скрипет(квесте)
c,v:byte;
Ident,Nmr,Comnd,ScrptName,Hinttext:string;
begin
AssignFile(f,'../Scripts/'+Scriptname+'.txt');
Reset(f);
readln(f,MaxScripts);//читаем кол-во строк
for c:=1 to MaxScripts do //для этих строк делаем...
begin
readln(f,Str[c]);
Comnd:=GetFromString('[',']',Str[c]);//и все до конца пошли описания команд
 if Comnd= 'AddItem' then
 begin
 Ident:=GetFromString('$','%',Str[c]);
 Nmr:=GetFromString('^','&',Str[c]);
 AddItem(StrToInt(Ident),StrToInt(Nmr));
 end;
 if Comnd= 'RemoveItem' then
 begin
 Ident:=GetFromString('$','%',Str[c]);
 Nmr:=GetFromString('^','&',Str[c]);
 RemoveItem(StrToInt(Ident),StrToInt(Nmr));
 end;
 if Comnd= 'DoScript' then
 begin
 ScrptName:=GetFromString('$','%',Str[c]);
 DoScript(ScrptName);
 end;
 if Comnd= 'ShowHint' then
 begin
 Hinttext:=GetFromString('$','%',Str[c]);
 ShowHints(Hinttext);
 end;
 if Comnd= 'CreateNewPlayer' then
 begin
 CreateNewPlayer;
 end;
 end;
CloseFile(f);
end;

И вот что в текстовом файле у меня

1
[ShowHint] $Соберите 100 колосков пшеницы%
Shadow_1329 вне форума Ответить с цитированием
Старый 27.07.2009, 20:01   #4
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Могу сказать только одно: с такой системой обработки скриптов ты далеко не уйдешь. Чтоб добавить использование конструкций, переменных, условий и прочих возможностей нужно тут все переписывать заново. Могу предложить использовать мой скриптовый движок, в нем есть поддержка того что тебе нужно. Сейчас я пишу статью о нем для одного сайта, если хочешь могу скинуть тебе 1 часть статьи (основа работы и написание компилятора, во второй части которую я пишу приводится использование компилированных скриптов в игре).
Вадим Буренков вне форума Ответить с цитированием
Старый 27.07.2009, 20:11   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Сделайте структуру своему файлу.
Условие поместите в блок каких-то специальных символов. И читаете от одного спец символа до другого.
MaTBeu вне форума Ответить с цитированием
Старый 27.07.2009, 20:49   #6
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

2 Вадим Нет я буду использовать лучше свой скриптовой движок. Но за предложение спасибо(статья 1 часть уже есть и уже читал).
2 Матвей идея хорошая. Но вот как сделать так чтобы он проверял эти условия еще? Таймер юзать не хочу. Сильно он в рамки ставит!
Shadow_1329 вне форума Ответить с цитированием
Старый 27.07.2009, 21:22   #7
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
Нет я буду использовать лучше свой скриптовой движок.
Дело твое. Все же если хочешь сделать нормальный двиг то надо делать его на основе класса. У тебя не правильна структура. Например ты делаешь всю обработку скрипта в одной процедуре. В этой процедуре все переменные временные и существуют только во время работы этой процедуры (несколько миллисекунд). Это противоречит задаче: заставить скрипт ждать пока выполнится условие. Создай класс TScriptThread который имеет переменные под хранение скрипта и процедуры загрузки его в память, обработки и удаления. Процедура обработки находится в таймере и при срабатывании читает и интерпритирует комманду. Это и есть истина как надо делать. По другому у тебя никогда не получится. Почитай повнимательнее статью которую я выкладывал в теме про скрипты. Там как раз и написано все основное, и это работает.

Цитата:
статья 1 часть уже есть и уже читал
Не, это другое. Вот та статья о которой я говорю. Все равно советую почитать

Последний раз редактировалось Вадим Буренков; 27.07.2009 в 21:32.
Вадим Буренков вне форума Ответить с цитированием
Старый 27.07.2009, 23:39   #8
Виталий Серов
Заснувший
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 213
По умолчанию

Цитата:
2 Матвей идея хорошая. Но вот как сделать так чтобы он проверял эти условия еще? Таймер юзать не хочу. Сильно он в рамки ставит!
Читайте данные из файла в отдельном потоке, используя Sleep в цикле...
2Вадим Буренков - прекрасная статья
Виталий Серов вне форума Ответить с цитированием
Старый 28.07.2009, 07:46   #9
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

Хорошая статья!
Shadow_1329 вне форума Ответить с цитированием
Старый 28.07.2009, 08:08   #10
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

Внес кое-какие изменения. Теперь все условия и команды обрабатываются в таймере, а читается все в процедуре. Осталось только сделать условия и все! Ну с эти проблем возникнуть уже не должно.

Последний раз редактировалось Shadow_1329; 28.07.2009 в 08:21.
Shadow_1329 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37