Сообщения в игре (In-game Messages)
Перейти к навигации
Перейти к поиску
Если вы хотите иметь внутриигровую систему обмена сообщениями - может быть, электронная почта, собрание писем или что-то в этом роде - тогда следующий код обеспечивает основу для дальнейшей работы или может использоваться без изменений.
Для использования системы, скопируйте и вставьте нижеприведённый код в файл new.rpy в папку с вашей игрой:
init python:
# Стили сообщения
style.messageWindow = Style(style.window)
style.messageColumns = Style(style.hbox)
style.messageListBox = Style(style.vbox)
style.messageListViewport = Style(style.viewport)
style.messageButton = Style(style.button)
style.messageButtonText = Style(style.button_text)
style.messageScrollBar = Style(style.vscrollbar)
style.messageBodyScrollBar = Style(style.vscrollbar)
style.messageBodyBox = Style(style.vbox)
style.messageBodyViewport = Style(style.viewport)
style.messageText = Style(style.say_dialogue)
style.messageControls = Style(style.hbox)
# Значения стиля по умолчанию...
style.messageWindow.ymaximum = 600
style.messageColumns.spacing = 10
style.messageListViewport.xminimum = 280
style.messageListViewport.xmaximum = 280
style.messageListBox.yalign = 0.0
style.messageButton["Message"].xfill = True
style.messageButton["CurrentMessage"].xfill = True
style.messageButtonText["Message"].color="#99A"
style.messageButtonText["CurrentMessage"].color="#FFF"
style.messageBodyViewport.xminimum = 460
style.messageBodyViewport.xmaximum = 460
style.messageBodyViewport.ymaximum = 550
style.messageBodyScrollBar.ymaximum=550
style.messageControls.spacing = 10
def init_messages():
if hasattr(store, "messages") == False:
store.messages = []
def add_message(subject, sender, message, condition=None):
init_messages()
store.messages.append( (subject, sender, message, condition) )
def show_messages():
message = None
while message != -1:
message = show_message_ui(message)
def show_message_ui(currentMessage):
init_messages()
messageCount = count_messages()
ui.window(style=style.messageWindow)
ui.hbox(style=style.messageColumns) # настройки для трёх столбцов элемента управления
vp = ui.viewport(style=style.messageListViewport)
ui.window(style=style.messageListBox)
ui.vbox() # настройки для получения списка рассылки
index = 0
for message in store.messages:
if (message[3] == None or eval(message[3]) == True):
styleIndex = "Message"
if (index == currentMessage):
styleIndex = "CurrentMessage"
ui.button(clicked=ui.returns(index),
style=style.messageButton[styleIndex])
ui.text(message[0] + " - " + message[1], style=style.messageButtonText[styleIndex])
index = index + 1
ui.close() # список рассылки в vbox
ui.bar(adjustment=vp.yadjustment, style=style.messageScrollBar)
ui.window(style=style.messageBodyBox)
ui.vbox() # настройки для содержимого, находящегося справка; сообщения и кнопки
ui.hbox()
vp2 = ui.viewport(style=style.messageBodyViewport)
if (currentMessage >= 0) and (currentMessage < messageCount):
hasMessage = True
ui.text(store.messages[currentMessage][2], style=style.messageText)
else:
hasMessage = False
ui.null()
ui.bar(adjustment=vp2.yadjustment, style=style.messageBodyScrollBar)
ui.close()
ui.hbox(style=style.messageControls) # настройки для кнопок
ui.button(clicked=ui.returns(-1),
style=style.messageButton["Закрыть сообщения"])
ui.text("Закрыть сообщения", style = style.messageButtonText["Закрыть сообщения"])
if hasMessage:
ui.button(clicked=ui.returns(-2),
style=style.messageButton["Удалить сообщения"])
t = ui.text("Удалить сообщения", style = style.messageButtonText["Удалить сообщения"])
ui.close() # кнопки в hbox
ui.close() # столбец, находящийся справа в vbox
ui.close() # столбцы в hbox
result = ui.interact()
if result == -2: #(удалить текущее сообщение)
del store.messages[currentMessage]
return None
else:
return result
def count_messages():
init_messages()
return len(store.messages)
def count_visible_messages():
init_messages()
count = 0
for message in store.messages:
if (message[3] == None or eval(message[3]) == True):
count = count + 1
return count
Пример использования (Example Usage)[править | править код]
init:
$ e = Character('Эйлин', color="#c8ffc8")
# Игра начинается здесь.
label start:
e "Добро пожаловать в систему обмена сообщениями! Прямо сейчас у вас нет ни одного сообщения."
$ show_messages()
e "Видите?"
$ add_message("Добро пожаловать в систему обмена сообщениями", "Система сообщений",
"Сейчас вам пришло первое сообщение!")
e "Итак, мы добавили сообщение для вас."
$ show_messages()
e "Далее, мы добавим пару сообщений..."
$ add_message("Мои фотографии из отпуска", "Боб", "Drone drone drone drone drone drone drone " +
"drone drone drone drone drone drone drone drone drone drone drone drone drone drone " +
"drone drone drone drone drone drone drone drone drone drone drone drone drone drone " +
"drone drone drone drone drone drone drone drone drone drone drone drone drone drone " +
"drone drone drone drone drone drone drone drone drone drone drone drone drone drone " +
"drone drone drone drone drone drone drone drone drone drone drone drone drone drone " +
"drone drone drone drone drone drone drone drone drone drone drone drone drone drone " +
"drone drone drone drone drone drone drone drone drone drone drone drone drone drone " +
"drone drone drone drone drone drone drone drone drone drone drone drone drone drone " +
"drone drone drone drone drone drone drone drone drone drone drone drone drone drone " +
"drone drone drone drone drone drone drone drone drone drone drone drone drone drone...")
$ add_message("Где ты?", "Саймон", "Тебя уже давно не было на FaceSpace! То есть,"
" {i}десять минут{/i}, чувак! Где ты?!")
$ add_message("Купить вещи", "Миссисипи", "Знаете ли вы, что мужчина, купивший книги ранее,"+
" продолжает их покупать? Как насчет того, чтобы купить несколько книг?\n"+
"Вот несколько книг, которые могут вам понравиться:\n- {i}Убить простака{/i}\n"+
"- {i}Девушка с пиратской татуировкой{/i}\n- {i}Кошка с девятью хвостами{/i}")
$ add_message("Вторник", "Мама", "Ты не забыл, что обещал прийти во вторник?" +
" Надеюсь, что не забыл.")
$ add_message("Re: Вторник", "Мама", "Ты не позвонил. Ты все ещё собираешься прийти?"+
" Я делаю пирог.")
$ add_message("Re: Re: Вторник", "Мама", "Почему тебе не сказать, приедешь ты или нет?" +
" Ты проверил свою почту? Ты в порядке? Надеюсь, ты не попал в автокатастрофу или" +
" что-то подобное. Их всё время показывают в новостях. С тобой действительно все в порядке?" +
" Пожалуйста, сообщи мне!")
$ show_messages()
e "Теперь мы добавим немного спама..."
python:
spam_filter = False
#spam...
for x in range(20):
add_message("Миллиард долларов!", "Принц Терренс из Нигерии", "Я являюсь" +
" управляющим нигерийского Центрального Банка и мне нужен иностранный счет," +
" чтобы разместить миллиард долларов на два (2) месяца без всякой видимой" +
" причины. Вы можете заработать миллионы в своих интересах, просто сообщите мне номер вашей кредитной карты" +
" и ПИН-код сегодня!",
condition="spam_filter == False")
$ show_messages()
e "Йеп! Хорошо, давайте включим спам-фильтр..."
$ spam_filter = True
$ show_messages()
$ message_count = count_messages()
$ visible_count = count_visible_messages()
e "И после всего этого, теперь у вас %(message_count)s сообщения,
из которых вы можете прочитать %(visible_count)s."
Источник[править | править код]
Статья "In-game Messages" на английском языке
На главную страницу | Книга рецептов Энциклопедии Ren'Py | Книга рецептов Ren'Py | Вернуться к началу статьи |