Закидываем пару файлов в проект и пишем СМС-сообщения в строках типа:
"{#l=Привет!<<smile>>}Хм, снова смс с незнакомого номера..."
"{#l=Привет!<<smile>>}Хм, снова смс с незнакомого номера..."
# забрасываем sms.rpy и 7dots.rpy в папку game вашего проекта и пишем смс-ки # теги для смс: # "{#l=Привет!}" - для смс от левого собеседника # "{#r=И тебе привет!}" - для смс от правого собеседника # "{#c=Лосяш покинул беседу.}" - для системных смс по центру # "{#on}" или $ sms_on() - показать окно с смс # "{#off}" или $ sms_off() - спрятать окно с смс # "{#cls}" или $ sms_cls() - очистить окно с смс # в одной строке может быть несколько разных тегов и обычный текст # "<<smile>>" - вот так добавлять картинки # историю сообщений можно просмотреть, листая экран мышкой или колесиком # так же реализовано плавное исчезновение/появление текстбокса с учетои смс init python: # звуки смс sms_c = "sms_c" sms_l = "sms_l" sms_r = "sms_r" # длительность вибрации (если устройство ее поддерживает) sms_vibrate = .5 # положение окна с смс sms_xalign, sms_yalign = .75, .25 # размеры окна с смс (экран сотового) sms_width, sms_height = 450, 600 # размеры одного смс sms_w, sms_h = int(sms_width * .75), int(config.screen_height * .05) # размеры заголовка с именем собеседника sms_caption_height = 100 sms_caption_width = sms_width # имя собеседника sms_name = _("Неизвестный") # отступы для пузырьков смс sms_xpadding = 32 sms_ypadding = 16 # внешние sms_border = 16 # для хранения текста всех смс sms_all = [] # теги для смс - в центре, слева, справа sms_tags = ["c", "l", "r"] # все тэги для смс, включая управление окном sms_all_tags = sms_tags + ["on", "off", "cls"] # получить текст и стиль смс из строки типа "r=Привет!" def get_sms_text_style(txt): smsstyle, smstext = get_key_val(txt) if smsstyle in sms_tags: return "sms_" + smsstyle, smstext return None, txt # изъять текст смс из текстбокса и закинуть в экран смс def sms(text): global sms_all, sms_last_what # получить теги в виде строк tags = get_tags_str(text) # перебрать строки с тегами for i in tags: # разобрать строку на части, разделенные знаком =равно= key, val = get_key_val(i) # очистка окна смс if key == "cls": sms_cls() # показать окно смс if key == "on": sms_on() # спрятать окно смс if key == "off": sms_off() # новое сообщение в окне смс if key in sms_tags: if val is None: val = "" # меняем смайлы на картинки val = val.replace("<<", "{image=") val = val.replace(">>", "}") # меняем ссылки val = val.replace("|", "{a=call:") val = val.replace("]]", "{/a}") # добавляем на экран смс sms_all.append(key + "=" + val) renpy.restart_interaction() # звук сообщения sms_sound = "sms_" + key if sms_sound: splay(sms_sound) if sms_vibrate > 0: renpy.vibrate(sms_vibrate) # из функции в action SMS = renpy.curry(sms) # показать экран смс def sms_on(effect=dissolve): renpy.show_screen('sms_screen', _layer="master") renpy.transition(effect) # спрятать экран смс def sms_off(effect=dissolve): renpy.hide_screen('sms_screen', layer="master") renpy.transition(effect) # очистить экран смс def sms_cls(effect=dissolve): global sms_all sms_all = [] sms_on(effect=effect) # для хранения последнего видимого в текстбоксе текста sms_last_what = None # листать вниз yadjValue = float("inf") yadj = ui.adjustment() init: # прозрачность transform transparent(alpha=.0): alpha alpha # стиль для фрейма с смсками style sms_frame is frame: # изображение пустого экрана background "smsbg" yfill True xminimum sms_width xmaximum sms_width yminimum sms_height ymaximum sms_height xmargin 0 ymargin 0 xpadding 0 ypadding 0 init python: # стиль системных смс по центру style.sms_c = Style(style.button) style.sms_c.background = "#0000" style.sms_c.xalign = .5 style.sms_c.xmargin = sms_border style.sms_c.ymargin = int(sms_border / 2) style.sms_c.xpadding = 0 style.sms_c.ypadding = sms_ypadding # стиль смс слева style.sms_l = Style(style.sms_c) style.sms_l.xpadding = sms_xpadding style.sms_l.ypadding = sms_ypadding style.sms_l.xmaximum = sms_w style.sms_l.yminimum = sms_h style.sms_l.xalign = .0 style.sms_l.background = Frame("smsleft", 16, 16) # стиль смс справа style.sms_r = Style(style.sms_l) style.sms_r.xalign = 1.0 style.sms_r.background = Frame("smsright", 16, 16) # цвет системных сообщений style.sms_c_text.color = "#0008" style.sms_l_text.color = "#fff" style.sms_r_text.color = "#fff" init: # стиль окошка с именем собеседника style sms_caption is button: background Frame("smstop", 0, 0) xfill True xminimum sms_caption_width yminimum sms_caption_height # стиль окошка с именем собеседника style sms_bottom is button: background Frame("smsbottom", 0, 0) xminimum sms_caption_width yminimum int(sms_caption_height / 2) # стиль текста с именем собеседника style sms_caption_text is button_text: color "#fff" font "fonts/robotoblack.ttf" align (.4, .75) # эффект для появления/исчезновения текстбокса transform inout(t=.25): on show: alpha .0 linear t alpha 1.0 on hide: alpha 1.0 linear t alpha .0 # проявить transform inin(t=.25): alpha .0 linear t alpha 1.0 # растворить transform outout(t=.25): alpha 1.0 linear t alpha .0 # экран с смсками screen sms_screen: python: yadj.value = yadjValue vbox: align(sms_xalign, sms_yalign) frame: style "sms_frame" vbox: # имя собеседника textbutton sms_name style "sms_caption" align(.5, .0) # контейнер для пузырьков с сообщениями frame: xmargin 0 ymargin 0 xpadding 0 ypadding 0 background None viewport: id "sms_vp" xinitial 1.0 yfill False mousewheel True draggable False side_xfill True transclude yadjustment yadj vbox: xfill True yanchor 1.0 yalign 1.0 for i in sms_all: # пузырьки с сообщениями $ sms_style, sms_text = get_sms_text_style(i) textbutton sms_text: if sms_style: style sms_style action [] textbutton " " style "sms_bottom" action [] yalign 1.0 # переписываем экран say screen say(who, what): # обработка тегов смс on "show" action SMS(what) on "hide" action SetVariable("sms_last_what", del_tags(what)) style_prefix "say" window: # чтобы пустое окно не маячило if not del_tags(what): # а плавно исчезало if sms_last_what: at outout() else: # на старте было вообще невидимым at transparent() else: if not sms_last_what: # плавно появлялось, если появился видимый текст at inin() else: # чтобы текстовое окно плавно появлялось и исчезало в остальных случаях at inout() id "window" if who is not None: window: id "namebox" style "namebox" text who id "who" text what id "what" ## Если есть боковое изображение ("голова"), показывает её поверх текста. ## По стандарту не показывается на варианте для мобильных устройств — мало ## места. if not renpy.variant("small"): add SideImage() xalign 0.0 yalign 1.0
На Андроиде в общем работвет, но ни одну картинку не показывает, смена пути никак не помогает
ОтветитьУдалитькартинки должны быть объявлены. способ работает с displayable, а не с файлами
Удалитьа что за приложение что вы на андроиде делаете?
Удалитья не делаю
УдалитьHi, I'm trying to add your messaging system in my project, is there a way to use custom screen for this system? I have a modified say screen and when I add this everything is messed up. I hope you can help me.
ОтветитьУдалитья не вижу ни твоего кода, ни багрепорта. и как я должен помогать, угадывать?
Удалитьelse:
ОтветитьУдалитьif not sms_last_what:
# плавно появлялось, если появился видимый текст
at inin()
else:
# чтобы текстовое окно плавно появлялось и исчезало в остальных случаях
at inout()
Эта часть кода мешала текстбоксу, он каждый раз мигал при появлении текста
Если у кого была еще такая проблема, вот решение - просто убрать код
У меня вопрос, можно ли объявить несколько имен собеседника? Я найти не могу, просто есть sms_name по дефолту и все.
ОтветитьУдалитьздесь - нет. допиливайте под себя
УдалитьЖаль(
УдалитьПривет. Огромное спасибо за смс-ки ;) Всё пашет.
ОтветитьУдалитьВопрос: на андроид версии историю сообщений можно просматривать "пальцем"?
да, если строку draggable False заменить на draggable True
УдалитьБольшое спасибо за подсказку :)
Удалитьпомогите мне реализовать наподобие систему, только вместо смс диалоговые окошки рядом с персонажами и в зависимости от тега оно было бы либо справа либо слево
ОтветитьУдалитьк сожалению, именно сейчас у меня нет времени делать чужие проекты, много работы. попробуйте написать на стене группы: https://vk.com/renpy
УдалитьОтличный ресурс, все работает, но возник вопрос, как можно изменить шрифт самих сообщений (нашел только шрифт имени собеседника в заглавии). Интересует сам шрифт и его размер (хотелось сделать поменьше)
ОтветитьУдалитьсоздать стили style sms_c_text, sms_l_text, sms_r_text, добавить туда font "имя_шрифта"
Удалитьну и кроме font еще size размер_шрифта
УдалитьМожно пример в коде. Нужно менять какие-то строки в файле sms.rpy? или дописать туда строки? Я нашел кусок кода init python:
Удалить# стиль системных смс по центру
style.sms_c = Style(style.button)
style.sms_c.background = "#0000"
style.sms_c.xalign = .5
style.sms_c.xmargin = sms_border
style.sms_c.ymargin = sms_border / 2
style.sms_c.xpadding = 0
style.sms_c.ypadding = sms_ypadding
# стиль смс слева
style.sms_l = Style(style.sms_c)
style.sms_l.xpadding = sms_xpadding
style.sms_l.ypadding = sms_ypadding
style.sms_l.xmaximum = sms_w
style.sms_l.yminimum = sms_h
style.sms_l.xalign = .0
style.sms_l.background = Frame("smsleft", 16, 16)
# стиль смс справа
style.sms_r = Style(style.sms_l)
style.sms_r.xalign = 1.0
style.sms_r.background = Frame("smsright", 16, 16)
# цвет системных сообщений
style.sms_c_text.color = "da0000"
style.sms_l_text.color = "#fff"
style.sms_r_text.color = "#fff"
Куда вписать название шрифта и размер?
пример:
Удалитьinit:
style sms_c_text:
font "arial.ttf"
size 32
А что означает отступы для пузырьков смс?
ОтветитьУдалитьчтобы сообщения не прижимались к краям экрана и друг к дружке
Удалитьпри объявлении спрайтов с эффектом "dissolve" текстбокс постоянно исчезает и появляется.
ОтветитьУдалитькак исправить?
справки по ренпаю можно навести здесь: https://vk.com/renpy
Удалить