Добавлен Clamp,
опубликован
По старой доброй традиции сначала — код, потом — комментарии.
Используемые дефайны и переменные:
define
{
void = nothing
bool = boolean
int = integer
init = initializer
}
int Id = 1
string array Text [1000]
string array Answer [1000][10]
int array Action [1000][10]
int array AnsNum [1000]
int MaxSelectedString = 1
int SelectedString = 1
string SelectedTextColor = "|cffffa500"
string UnselectedTextColor = "|cff8b4513"
Сама система
library DialogsCore init DialogsCoreInit uses Dialogs
{
void RefreshScreen()
{
int i = 1
ClearTextMessages()
DisplayTextToPlayer(Player(0),0,0, Text[Id])
loop
{
if(i == SelectedString)
{
DisplayTextToPlayer(Player(0),0,0, SelectedTextColor + Answer[Id][i])
}
else
{
DisplayTextToPlayer(Player(0),0,0, UnselectedTextColor + Answer[Id][i])
}
exitwhen i == AnsNum[Id]
i++
}
}
void PressDOWN()
{
if(SelectedString + 1 <= MaxSelectedString)
{
SelectedString++
}
else
{
SelectedString = 1
}
RefreshScreen()
}
void PressUP()
{
if(SelectedString - 1 >= 1)
{
SelectedString--
}
else
{
SelectedString = MaxSelectedString
}
RefreshScreen()
}
void PressOK()
{
int i = 1
Id = Action[Id][SelectedString]
MaxSelectedString = AnsNum[Id]
SelectedString = 1
RefreshScreen()
}
void DialogsCoreInit()
{
MaxSelectedString = AnsNum[1]
trigger trig = CreateTrigger()
TriggerRegisterPlayerEvent(trig,Player(0),EVENT_PLAYER_ARROW_DOWN_DOWN)
TriggerAddAction(trig,function PressDOWN)
trig = CreateTrigger()
TriggerRegisterPlayerEvent(trig,Player(0),EVENT_PLAYER_ARROW_UP_DOWN)
TriggerAddAction(trig,function PressUP)
trig = CreateTrigger()
TriggerRegisterPlayerEvent(trig,Player(0),EVENT_PLAYER_ARROW_RIGHT_DOWN)
TriggerAddAction(trig,function PressOK)
trig = null
RefreshScreen()
}
}
Пример использования системы (теперь с комментариями!)
library Dialogs init DialogsInit
{
void DialogsMainTexts()
{
int Used = 4 //использованные диалоги (просто для удобства)
//первый индекс - айди диалога
Text[1] = "No1" //заголовок текущего диалога a.k.a. речь NPC
Answer[1][1] = "Go to 2" //вариант ответа #1
Answer[1][2] = "Go to 3" //вариант ответа #2
Answer[1][3] = "Go to 4" //вариант ответа #3
Action[1][1] = 2 //айди вызываемого первым ответом диалога
Action[1][2] = 3 //айди вызываемого вторым ответом диалога
Action[1][3] = 4 //айди вызываемого третьим ответом диалога
AnsNum[1] = 3 //количество ответов в ветке
Text[2] = "No2"
Answer[2][1] = "Go to 1"
Answer[2][2] = "Go to 2"
Answer[2][3] = "Go to 3"
Answer[2][4] = "Go to 4"
Action[2][1] = 1
Action[2][2] = 2
Action[2][3] = 3
Action[2][4] = 4
AnsNum[2] = 4
Text[3] = "No3"
Answer[3][1] = "Go to 1"
Answer[3][2] = "Go to 2"
Action[3][1] = 1
Action[3][2] = 2
AnsNum[3] = 2
Text[4] = "No4"
Answer[4][1] = "Go to 1"
Answer[4][2] = "Go to 2"
Answer[4][3] = "Go to 3"
Action[4][1] = 1
Action[4][2] = 2
Action[4][3] = 3
AnsNum[4] = 3
}
void DialogsInit()
{
DialogsMainTexts()
//тут можно разбивать по функциям разные ветви диалога, например
}
}
Суть невероятно проста: скачем по массивам через прямую адресацию.
Плюсы ищите сами, а минус один — нельзя влепить еще какие-нибудь действия, кроме открытия новой ветви диалога.
Плюсы ищите сами, а минус один — нельзя влепить еще какие-нибудь действия, кроме открытия новой ветви диалога.
Не более 10 ответов.
Не более 255 символов на высказывание NPC/пункт меню/ответ.
Не более 1000 диалогов.
Не более 255 символов на высказывание NPC/пункт меню/ответ.
Не более 1000 диалогов.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Clamp
Ибо сейчас тупо влом докручивать, тем более она не нужна мне пока что.