Page 6 of 7

Re: Basic Message System

Posted: Sun Aug 20, 2017 11:28 am
by TheChatotMaestro
[Resolved, deleted because unanswered and largely unimportant, stupid mistake on my part.]

Re: Basic Message System

Posted: Wed Aug 23, 2017 8:33 pm
by TheChatotMaestro
I kept trying, and nothing fixed it... I'm so sorry if repeated posting is annoying, I just really like the idea of this system, and really want to try it out in my game. Anyone ever had this issue? (Using latest version of Ren'Py, so that's probably the source of a lot of problems since this code's kinda old.)

Re: Basic Message System

Posted: Mon Sep 11, 2017 9:59 pm
by TheChatotMaestro
Fixed my earlier problem lol, revisited this after ages, but now I'm getting this...

Code: Select all

I'm sorry, but errors were detected in your script. Please correct the
errors listed below, and try again.


File "game/messages.rpy", line 148: u'text' is not a keyword argument or valid child for the label statement.
    text ("Messages: %d (%d unread)") % (message_count(), new_message_count())
        ^

Ren'Py Version: Ren'Py 6.99.12.4.2187
The block in question:

Code: Select all

screen mailbox:
    tag menu
    modal True
    default current_message = None
    $ available_drafts = [i for i in contacts if i.draft_label]    
    frame:
        style_group "mailbox"
        vbox:
            label "Inbox":
                if new_message_count() > 0:
                    text ("Messages: %d (%d unread)") % (message_count(), new_message_count())
                else:
                    text ("Messages: %d") % message_count()
                side "c r":
                    area (0,0,800,93)
                    viewport id "message_list":
                        draggable True mousewheel True
                        vbox:
                            for i in mail:
                                if i.view:
                                    if not i.read:
                                        textbutton ("*NEW* " + i.sender + " - " + i.subject) action [SetScreenVariable("current_message",i), i.mark_read] xfill True
                                    else:
                                        textbutton (i.sender + " - " + i.subject) action SetScreenVariable("current_message",i) xfill True
                    vbar value YScrollValue("message_list")
            hbox:
                null height 20
            side "c r":
                area (0,0,800,380)
                viewport id "view_message":
                    draggable True mousewheel True
                    vbox:
                        if current_message:
                            text ("From: " + current_message.sender)
                            text ("Subject: " + current_message.subject)
                            text current_message.body
                vbar value YScrollValue("view_message")
            use mailbox_commands
Anyone understand?
(Deleting previous messages so as not to be spammy. :( )

Re: Basic Message System

Posted: Mon Sep 11, 2017 10:27 pm
by TheChatotMaestro
And like magic, I complain about my problems on the forum and fix them 20 minutes later.
This was kinda tricky, though, so here's what I changed it to:

Code: Select all

screen mailbox:
    tag menu
    modal True
    default current_message = None
    $ available_drafts = [i for i in contacts if i.draft_label]    
    frame:
        style_group "mailbox"
        vbox:
            label "Inbox"
            if new_message_count() > 0:
                text "New Messages: [new_messages]"
            else:
                text "No New Messages"
            side "c r":
                area (0,0,800,93)
                viewport id "message_list":
                    draggable True mousewheel True
                    vbox:
                        for i in mail:
                            if i.view:
                                if not i.read:
                                    textbutton ("*NEW* " + i.sender + " - " + i.subject) action [SetScreenVariable("current_message",i), i.mark_read] xfill True
                                else:
                                    textbutton (i.sender + " - " + i.subject) action SetScreenVariable("current_message",i) xfill True
                    vbar value YScrollValue("message_list")
            hbox:
                null height 20
            side "c r":
                area (0,0,800,380)
                viewport id "view_message":
                    draggable True mousewheel True
                    vbox:
                        if current_message:
                            text ("From: " + current_message.sender)
                            text ("Subject: " + current_message.subject)
                            text current_message.body
                vbar value YScrollValue("view_message")
            use mailbox_commands
Dunno if it does exactly the same thing, but I'm not getting an error message anymore!

Re: Basic Message System

Posted: Tue Sep 19, 2017 10:06 am
by vonhardenberg
LyannaCore wrote: Wed Jun 21, 2017 2:03 pm I realize this systems is a bit old now, so it's probably just something that has changed with Renpy updates, but trying to use it messes up my existing menus.

With the messages.rpy included and integrated as required, they are aligned to the left and have no change when moused over:
Image.

Without the message framework, it looks like this:
Image

The beginning of my script code is like this while using the messages.rpy framework:

Code: Select all

label start: 

## Message Stuff ##
    $ mail = []
    $ mail_queue = [] # for message delay
    $ contacts = []  # for draft feature

    scene black
    with fade
    
    show screen mailbox_overlay
    
    "Where would you like to start?"
    menu:
        "Intro":
            jump start1
        "Waking up":
            jump wake1
        "Laundry":
            $ pcfirstname = "Lyanna"
            $ pclastname = "Core"
            jump laundryservice
        "Ship Paperwork":
            $ pcfirstname = "Lyanna"
            $ pclastname = "Core"
            $ laundrychoice = 1
            jump creation1
        "Ship Start":
            $ pcfirstname = "Lyanna"
            $ pclastname = "Core"
            jump shipstart1
        "System Map":
            $ pcfirstname = "Lyanna"
            $ pclastname = "Core"
            jump system_map
Any ideas what the issue could be?
Is there a more permanent solution to this? I've got the code working as a receive only system, but this reply system looks really cool, and I'd love to be able to use it. But I can't figure out what's wrong to create the issue in the post quoted.

Re: Basic Message System

Posted: Sat Apr 28, 2018 7:27 am
by yoni_
How can we customize the textbutton appearance? the box that displays the name and subject.

Re: Basic Message System

Posted: Sun Apr 29, 2018 1:19 pm
by TheChatotMaestro
had too many tabs open, put this in the wrong thread >M<

Re: Basic Message System

Posted: Sun Jul 29, 2018 12:54 pm
by xplosion
gonna use this, thanks

Re: Basic Message System

Posted: Mon Aug 13, 2018 2:55 pm
by wyverngem

Code: Select all

While running game code:
  File "game/script.rpy", line 43, in <module>
    $ deliver_all()
  File "game/messages.rpy", line 82, in deliver_all
    mail.extend(mail_queue)
UnboundLocalError: local variable 'mail_queue' referenced before assignment

Windows-8-6.2.9200
Ren'Py 7.0.0.196
Anyone else getting this error?

Re: Basic Message System

Posted: Sun Jan 20, 2019 4:39 pm
by Potato0095
Well, it seems we are not getting an answer here. I tested early today, Ren'Py v 7.1.3.1092. At first the game crashed, so I went in a full debug attempt.

I removed the "default choice menu" under the updated one, the game did start, enhance the "DID".

Code: Select all

#    else:
        # this is the default choice menu
#        screen choice(items):
#            style_prefix "choice"

#            vbox:
#                for i in items:
#                    textbutton i.caption action i.action
#        window:
#            style "menu_window"
#                xalign 0.5
#                ypos 405
#                yanchor 0.5

#                vbox:
#                    style "menu"
#                    spacin 2

#                    for caption, action, chosen in items:

#                        if action:

#                            button:
#                                action action
#                                style "choice_button"

#                                text caption style "menu_choice"
#                        else:
#                            text caption style "menu_caption"
#                    for i in items:
#                        textbutton i.caption action i.action
The first line in my script is a menu with 2 choices. Neither appeared. I had similar bugs with menus since I started using this system, so I thought it was the same. I removed the messages.rpy from my game folder.

The game started ok, I clicked start and the choices appeared.

This system is old (2013) and (if I'm not mistaken) didn't receive any official updates for the new GUI Ren'Py system, so it's old AND outdated. I'd recommend using a new one, made / edited by littanana. They tweaked Cute Demon Crashers' code to have a reply system (it has images too!). The last update was on Aug 2018 (if I'm not mistaken), so it's almost up to date (the last Ren'Py stable release is from Nov 2018) with Ren'Py. I didn't test yet though.

viewtopic.php?t=40245

The codes from littanana look like this on the script:

Code: Select all

call message_img("nadia", "it works with images too!","images/pic1.png") # Message with picture included
call message("nadia", "the text box changes depending on how much content there is. dont put too big images or its gonna look weeeeiiiird") # Message without picture
call message("nadia", "you can also do menus here") 

Re: Basic Message System

Posted: Sun Jan 20, 2019 7:03 pm
by Potato0095
It seems that 6.99 accepted "screen choice(items)" inside "screen choice". Ren'Py 7 doesn't. If anyone is willing to debug the code...

Code: Select all

screen choice:

    if reply_screen or draft_screen:
        # this is the menu for message replies and drafts
        frame:
            style_group "mailbox"

            vbox:
                label "Draft"
                if reply_screen:
                    text ("To: " + current_message.sender)
                    text ("Subject: Re: " + current_message.subject)
                else:
                    text ("To: " + contact.name)
                    text ("Subject: " + message_title)
                null  height 30

                for caption, action, chosen in items:

                    if action:
                        button:
                            action action
                            style "menu_choice_button" xalign 0.5

                            text caption text_align 0.5

                    else:
                        text caption style "menu_caption"

    else:
        # this is the default choice menu
        screen choice(items):
            style_prefix "choice"

            vbox:
                for i in items:
                    textbutton i.caption action i.action
        window:
            style "menu_window"
                xalign 0.5
                ypos 405
                yanchor 0.5

                vbox:
                    style "menu"
                    spacin 2

                    for caption, action, chosen in items:

                        if action:

                            button:
                                action action
                                style "choice_button"

                                text caption style "menu_choice"
                        else:
                            text caption style "menu_caption"
                    for i in items:
                        textbutton i.caption action i.action
 

Re: Basic Message System

Posted: Fri Jan 25, 2019 3:57 pm
by wyverngem
wyverngem wrote: Mon Aug 13, 2018 2:55 pm

Code: Select all

While running game code:
  File "game/script.rpy", line 43, in <module>
    $ deliver_all()
  File "game/messages.rpy", line 82, in deliver_all
    mail.extend(mail_queue)
UnboundLocalError: local variable 'mail_queue' referenced before assignment

Windows-8-6.2.9200
Ren'Py 7.0.0.196
Anyone else getting this error?

Marked it as a global mail_queue and it seems to fix the deliver_all.

Code: Select all

    def deliver_all():
        global mail_queue
        mail.extend(mail_queue)
        mail_queue = list()

Re: Basic Message System

Posted: Thu Feb 14, 2019 9:20 pm
by parttimestorier
I've been playing around with this code today and it's really cool - thanks for sharing it, saguaro! But I'm wondering about how to make something work in it, and I'd appreciate if anyone else who has some more experience could help me out.

I think it would be really cool if I could set it up so that once you've read a certain message, another one pops up right away, without the player needing to exit the overlay and click through dialogue to make a new one arrive. I attempted to set that up by putting this part right after the start label, when all the other messages are set up:

Code: Select all

$ add_message("Message Delay!", "Eileen", "This is a delayed message.", delay=True)
And then this in the mailbox screen part of messages.rpy:

Code: Select all

if check("TPS Reports"):
        $ deliver_next()
Ideally, I want it to work so that once you've read the "TPS Reports" message, then the "Message Delay!" message delivers. But for some reason, right now it just delivers the "Message Delay!" message as soon as I open the mailbox, before I've read the "TPS Reports" message, even though I have that if statement in there.

Does anyone have any ideas for how I could make that work? I'd also love to make a new message get delivered once a specific other message has been deleted, if that would be possible.

Re: Basic Message System

Posted: Sun Feb 24, 2019 1:14 pm
by parttimestorier
In case anyone else who uses this code is interested, I've figured out one of the things I wanted to do, which was to check whether the player has deleted a message, similar to how you can check whether they've read one. Underneath the part of messages.rpy with "def check(subject)", which defines how to check whether a message has been read, I've added this:

Code: Select all

def delcheck(subject):
        for item in mail:
            if item.subject == subject:
                if item.view:
                    return False
                else:
                    return True
Technically, I think this will return True if the message simply isn't viewable in the inbox for any reason, so it would also return True for messages that just haven't been delivered yet. But now I can add this to the tutorial code:

Code: Select all

e "Did you read the first Test Message?"
if check("TPS Reports"):
    e "Yep!"
else:
    e "Nope!"
        
e "Did you also delete it?"
if delcheck("TPS Reports"):
    e "Yep!"
else:
    e "Nope!"
And Eileen will say "Yep!" to both questions if you read "TPS Reports" and then deleted it. So, that's a step towards solving one of my problems! I'm still struggling to find a way to deliver new messages based on what's been read and/or deleted without requiring the player to exit the mailbox screen first, but if I figure anything out that might be helpful to other people, I'll post that as well.

Re: Basic Message System

Posted: Wed Feb 27, 2019 2:55 am
by MRF
is there a way to check if an email can be reply ?