Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,743
Написано 5,461 полезных сообщений (для 15,676 пользователей)
|
Ответ: Логово Тайна Конопли
Ну, дайте и я пиписькой померяюсь

Function LoadDialogPresets(filename$)
; Функция, загружающая пресеты из текстового файла.
Local Comment ; Отвечает за каменты. Текст внутри камертов не учитывается
Local Quot ; Отвечает за кавычки. Текст в кавычках, даже соответствующий операторам, не учитывается.
File = OpenFile(filename)
If File Then
; Читаем строки по очереди
Repeat
L$ = ReadLine(File)
CommentStart = 1 ; символ начала длинного камента
; Ищем каменты и выкидываем их.
For i = 1 To Len(L)
S$ = Mid(L, i,1)
Select S
Case Chr(34) ; Кавычки
If Not Comment Then
Quot = Not Quot ; Открываем или закрываем кавычки
End If
Case "{" ; Открыт длинный камент
If Not Quot Then
If Comment = 0 Then Comment = 1
CommentStart = i
End If
Case "}" ; Закрыт длинный камент
If Not Quot Then
If Comment = 1 Then Comment = 0 ; Если был включен длинный камент, выключаем его
L = Mid(L,1,CommentStart-1)+Mid(L,i+1, Len(L)) ; Выкидываем его нахер
i = CommentStart-1
End If
Case "/" ; Возможно, короткий камент
S$ = Mid(L, i,2)
Select S
Case "//" ; Если это короткий камент, то отрезаем полностью строку справа от этого знака.
L = Mid(L,1,i-1)
Exit
End Select
End Select
If i = Len(L) And Comment Then
L = Mid(L,1,CommentStart-1)
End If
Next
If Not L = "" Then ; Непосредственно ищем и выполняем команды.
Quot = 0
CommandStart = 1
ParametersStart = 1
For i = 1 To Len(L)
S$ = Mid(L, i,1)
Select S
Case Chr(34) ; Кавычки
Quot = Not Quot
Case "(" ; Команда окончена, начаты параметры
If Not Quot
Command$ = Mid(L,CommandStart, i-CommandStart)
ParametersStart = i+1
End If
Case ")" ; Параметры оконцены, можно их читать
If Not Quot
Parameters$ = Mid(L,ParametersStart, i-ParametersStart)
CommandStart = i+1
; Обрабатываем команду
; Выкидываем пробелы
Command = Replace(command," ","")
ScriptParseParameters(parameters, 1)
; тут выполняем команду
Select Upper(command)
Case "VERSION"
If Upper(ScriptParameters(0)) <> Upper(GameVersion) Then
MB = api_MessageBox (0, "Версия файла диалога: "+Chr(34)+filename+Chr(34)+" - "+Chr(34)+ScriptParameters(0)+Chr(34)+Chr(13)+"Версия игры: "+Chr(34)+GameVersion+Chr(34)+Chr(13)+"Несовпадение версий игры и скрипта может быть причиной ошибок!"+Chr(13)+"Желаете продолжить загрузку данного скрипта?","Несовпадение версий", 48+4)
If MB = 7 Then
Return 0
End If
End If
Case "GAME"
If Upper(ScriptParameters(0)) <> Upper(GameName) Then
MB = api_MessageBox (0, "Файла диалога: "+Chr(34)+filename+Chr(34)+" создан для игры "+Chr(34)+ScriptParameters(0)+Chr(34)+Chr(13)+"Игра: "+Chr(34)+GameName+Chr(34)+Chr(13)+"Несовпадение версий игры и скрипта может быть причиной ошибок!"+Chr(13)+"Желаете продолжить загрузку данного скрипта?","Несовпадение версий", 48+4)
If MB = 7 Then
Return 0
End If
End If
Case "DIALOG"
If DialogProc = 0 Then
DialogProc = 1
; Обнуляем массив параметров ответов
For k=1 To 10
For j=0 To 2
LDP(k,j)= ""
Next
Next
; Выкидываем все прошлые значения
DPQuest$ = ""
DPDuration$ = ""
If ScriptParameters(0) <> "" Then
DPID$ = ScriptParameters(0)
Else
api_MessageBox (0, "Ошибка в файле "+Chr(34)+filename+Chr(34)+" в строке №"+Lnum+Chr(13)+"При объявлении диалога ОБЯЗАТЕЛЬНО нужно указать его идентификатор!","Ошибка в синтаксисе", 16)
End If
Else
api_MessageBox (0, "Ошибка в файле "+Chr(34)+filename+Chr(34)+" в строке №"+Lnum+Chr(13)+"Объявление одного диалога невозможно внутри объявления другого!","Ошибка в синтаксисе", 16)
End If
Case "SETQUEST"
DPQuest$ = ScriptParameters(0)
Case "SETDURATION"
DPDur$ = Int(ScriptParameters(0))
Case "ADDANSWER"
; Выясняем ближайшее пустое значенеи массива
For k=1 To 10
If LDP(k,0) = "" Then
LDP(k,0)=ScriptParameters(0)
LDP(k,1)=ScriptParameters(1)
LDP(k,2)=ScriptParameters(2)
Exit
End If
Next
Case "END"
Select Upper(ScriptParameters(0))
Case "DIALOG"
CreateDialogPreset(DPID, DPQuest, DPDur, LDP(1,0),Int(LDP(1,1)),LDP(1,2), LDP(2,0),Int(LDP(2,1)),LDP(2,2), LDP(3,0),Int(LDP(3,1)),LDP(3,2), LDP(4,0),Int(LDP(4,1)),LDP(4,2), LDP(5,0),Int(LDP(5,1)),LDP(5,2), LDP(6,0),Int(LDP(6,1)),LDP(6,2), LDP(7,0),Int(LDP(7,1)),LDP(7,2), LDP(8,0),Int(LDP(8,1)),LDP(8,2), LDP(9,0),Int(LDP(9,1)),LDP(9,2), LDP(10,0),Int(LDP(10,1)),LDP(10,2))
DialogProc = 0
Case ""
; Конец всея
Return
Default
api_MessageBox (0, "Неизвестная команда: "+Chr(34)+command+" "+ScriptParameters(0)+Chr(34)+Chr(13)+"в файле: "+Chr(34)+filename+Chr(34)+Chr(13)+"Проверьте синтаксис!","Моя твоя не понимай!", 16)
End Select
Default
api_MessageBox (0, "Неизвестная команда: "+Chr(34)+command+Chr(34)+Chr(13)+"в файле: "+Chr(34)+filename+Chr(34)+Chr(13)+"Проверьте синтаксис!","Моя твоя не понимай!", 16)
End Select
End If
End Select
Next
End If
Until Eof(File)
Else
; Файл по какой-то причине не был загружен
api_MessageBox (0, "Не найден файл диалогов: "+Chr(34)+filename+Chr(34)+Chr(13)+"Проверьте путь!","Савсем нет файлу, насяйника (", 16)
End If
End Function
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|