Пример #1
0
def saveSession():
    filename = promptSaveFile(translate('views', 'Save Game Session'),
                              translate('views', 'Random Game files (*.rgg)'),
                              MAP_DIR)
    if not filename:
        return
    jsondump(GlobalState.session.dump(), checkFileExtension(filename, ".rgg"))
Пример #2
0
def respondICWhisperTarget(sender, message, chname, portrait):
	if len(portrait) > 1:
		portfile = makePortableFilename(path.join(PORTRAIT_DIR, portrait))
		ICSay(translate('remote', '<table><tr><td><img src="{port}" width="{size}" height="{size}"></td><td>{name} whispers: {message}</td></tr></table><br />').format(
			port=portfile,
			size=getPortraitSize(),
			name=linkedName(chname),
			message=message))
	else:
		ICSay(translate('remote', '{name} whispers: {message}').format(
			name=linkedName(chname),
			message=message))
Пример #3
0
	def _cleanValue(self, value):
		try:
			value = int(value)
		except:
			raise validationError(translate('integerField', 'You must enter a number for the {0} field.').format(self.name))
		if self.min is None or self.min <= value:
			if self.max is None or self.max >= value:
				return value
		raise validationError(
			translate('integerField', 'You must enter a number for {0} between {1} and {2}.').
				format(self.name,
					self.min or translate('integerField', 'negative infinity'),
					self.max or translate('integerField', 'infinity')))
Пример #4
0
def respondICSay(chname, message, portrait):
	if len(portrait) > 1:
		portfile = makePortableFilename(path.join(PORTRAIT_DIR, portrait))
		IAMTHEDOOMPHANTOM = crm.translateFile(makePortableFilename(path.join(PORTRAIT_DIR, portrait)), RESOURCE_IMAGE)
		#^ Don't remember whether this is still needed for transfer etc.
		ICSay(translate('remote', '<table><tr><td><img src="{port}" width="{size}" height="{size}"></td><td>{name}: {sayText}</td></tr></table><br />').format(
			port=portfile,
			size=getPortraitSize(),
			name=linkedName(chname),
			sayText=message))
	else:
		ICSay(translate('remote', '{name}: {sayText}</p>').format(
		name=linkedName(chname),
		sayText=message))
Пример #5
0
def loadSession():
    """Allows the user to load a new map."""
    filename = promptLoadFile(translate('views', 'Open Game Session'),
                              translate('views', 'Random Game files (*.rgg)'),
                              MAP_DIR)
    if not filename:
        return
    try:
        obj = jsonload(filename)
        _loadSession(obj)
        sendSession(GlobalState.session.dump())
    except Exception as e:
        showErrorMessage(
            translate('views', "Unable to read {0}.").format(filename))
        print(e)
Пример #6
0
	def _cleanValue(self, value):
		if value is None and self.allowEmpty:
			return ''
		if isinstance(value, BASE_STRING):
			if self.allowEmpty or len(value) > 0:
				return value
		raise validationError(translate('stringField', 'You must enter text into the {0} field.').format(self.name))
Пример #7
0
def chat(st, chname, portrait):
    """Parses and executes chat commands."""
    st = UNICODE_STRING(st)

    if (len(st) <= 0):
        return
    if ('<' in st
            and '>' not in st) or ('<' in st and '>' in st
                                   and '<' in str(st)[str(st).rfind('>'):]):
        ICSay(
            translate(
                'chat',
                "Please type &#38;#60; if you wish to include &#60; in your message."
            ))
        return

    if st[0] != '/' or len(st) > 1 and st[1] == '/':
        if len(st) > 1 and st[1] == '/':
            st = st[1:]
        command = 'say'
        message = st.strip()
    else:
        command, message = splitword(st[1:])
        command = str(command).lower()
    #print command, message

    if command in chatCommands:
        chatCommands[command](message, chname, portrait)
    else:
        if command not in ('help', '?'):
            ICSay(
                translate('chatdoc', "Invalid command.",
                          'Unknown chat command name.'))
        elif message in chatCommands:
            ICSay(translate('chatdoc', chatCommands[message].documentation))
            return
        ICSay(
            translate(
                'chatdoc', "Command Help:<br>"
                "Typing ordinary text and pressing 'enter' "
                "will display to all players. Other commands may be invoked "
                "with '/' plus the name of the command plus any arguments."
                "<dl><dt>Commands</dt><dd>{commandList}</dd></dl><br>").format(
                    commandList=translate(
                        'chatdoc', '</dd><dd>',
                        'Goes inbetween the commands in the commandList.').
                    join(chatCommandNames)))
Пример #8
0
def emote(message, chname, portrait):
    if not message:
        ICSay(
            translate(
                'chat', "Syntax: /me DOES ACTION. Displays '[HANDLE] DOES "
                "ACTION' in italic font."))
    else:
        sendICEmote(message, chname, portrait)
Пример #9
0
def emote(message):
    if not message:
        say(
            translate(
                'chat', "Syntax: /me DOES ACTION. Displays '[HANDLE] DOES "
                "ACTION' in italic font."))
    else:
        sendEmote(message)
Пример #10
0
def whisper(message):
    if not message:
        say(
            translate(
                'chat', "Syntax: /whisper HANDLE MESSAGE. Sends a message "
                "only to the specified user. Spaces MUST be correct."
                " Handle may be caps-sensitive."))
    else:
        target, rest = splitword(message)
        if target.lower() == localuser().username:
            emote(translate('chat', "mutters something."))
        elif not rest:
            say(
                translate('chat', "What do you want to tell {target}?").format(
                    target=target))
        else:
            sendWhisper(target, rest)
Пример #11
0
def clientConnect(client, username):
	"""Occurs when the client is ready to start sending data."""
	#print "Client connected."
	renameuser(localhandle(), username)
	_closeAllMaps()
	setUwidgetLocal()
	say(translate('remote', "Welcome, {name}!").format(name=username))
	client.preemptivelyOpenTransferSocket()
Пример #12
0
def clearSession():
    if promptYesNo(
            translate(
                'views',
                'Are you sure you want to clear the current session completely for all connected players?'
            )) == 16384:
        _clearSession()
        sendClearSession()
Пример #13
0
def randomname(message):
    if len(message) <= 0:
        say(
            translate(
                'chat',
                "Syntax: /generate NAMETYPE. For a list of available generators, see /generate keys. Use /generate help NAMETYPE for more information on a generator."
            ))
    else:
        generateName(*splitword(message.lower()))
Пример #14
0
def clientDisconnect(client, errorMessage):
	"""Occurs when the client connection disconnects without being told to.

	errorMessage -- a human-readable error message for why the connection failed

	"""
	#print "Client disconnected."
	say(translate('remote', "Disconnected. {0}").format(errorMessage))
	clearUserList()
Пример #15
0
 def __init__(self,
              host=None,
              port=6812,
              username=translate('net', 'Anonymous',
                                 'default connection username'),
              passw=''):
     self.host = host or localUser() or localHost()
     self.port = port
     self.username = username
     self.password = passw
Пример #16
0
def respondError(message, *args, **kwargs):
	"""Responds as an error message.

	message -- the error message to send
		should be fake translated so it is
		done on the client instead of the server.

	Extra arguments are passed to format the translated string.

	"""
	say(translate('error', message).format(*args, **kwargs))
Пример #17
0
    def __init__(self,
                 mapExistenceCheck=None,
                 pogExistenceCheck=None,
                 charExistenceCheck=None):

        main = mainWindow

        self.menubar = main.menuBar()

        self.mapExistenceCheck = mapExistenceCheck
        self.pogExistenceCheck = pogExistenceCheck
        self.charExistenceCheck = charExistenceCheck

        # ACTIONS

        self.newMapAct = QAction(translate("menubar", "&New Map..."), main)
        self.newMapAct.setShortcut("Ctrl+N")

        self.loadMapAct = QAction(translate("menubar", "Load Map..."), main)
        #self.loadMapAct.setShortcut("Ctrl+L")

        self.saveMapAct = QAction(translate("menubar", "Save Map As..."), main)
        #self.saveMapAct.setShortcut("Ctrl+S")

        self.closeSpecificMapAct = QAction(translate("menubar", "Close Map"),
                                           main)

        self.closeMapAct = QAction(translate("menubar", "&Close All Maps"),
                                   main)
        self.closeMapAct.setShortcut("Ctrl+Shift+W")

        self.loadSessAct = QAction(translate("menubar", "&Load Session..."),
                                   main)
        self.loadSessAct.setShortcut("Ctrl+L")

        self.saveSessAct = QAction(translate("menubar", "&Save Session As..."),
                                   main)
        self.saveSessAct.setShortcut("Ctrl+S")

        self.clearSessAct = QAction(translate("menubar", "Clear Session"),
                                    main)

        self.deletePogsAct = QAction(translate("menubar", "Delete All Pogs"),
                                     main)

        self.saveCharsAct = QAction(
            translate("menubar", "Save IC Characters As..."), main)

        self.loadCharsAct = QAction(
            translate("menubar", "Load IC Characters..."), main)

        self.gfxSettingsAct = QAction(
            translate("menubar", "Configure Graphics..."), main)

        self.drawTimerSettingsAct = QAction(
            translate("menubar", "Configure FPS..."), main)

        self.hostGameAct = QAction(translate("menubar", "&Host Game..."), main)
        self.hostGameAct.setShortcut("Ctrl+H")

        self.joinGameAct = QAction(translate("menubar", "&Join Game..."), main)
        self.joinGameAct.setShortcut("Ctrl+J")

        self.disconnectAct = QAction(translate("menubar", "&Disconnect"), main)
        self.disconnectAct.setShortcut("Ctrl+D")

        self.sendFileAct = QAction(translate("menubar", "Send file..."), main)

        self.createSurveyAct = QAction(
            translate("menubar", "Create Survey..."), main)

        self.aboutAct = QAction(translate("menubar", "&About"), main)
        self.aboutAct.setShortcut("Ctrl+A")

        self.thicknessOneAct = QAction(translate("menubar", "&One"), main)
        self.thicknessTwoAct = QAction(translate("menubar", "&Two"), main)
        self.thicknessThreeAct = QAction(translate("menubar", "&Three"), main)

        self.toggleAlertsAct = QAction(
            translate("menubar", "Chat Username Notify"), main)
        self.toggleAlertsAct.setCheckable(True)
        self.toggleAlertsAct.setChecked(True)

        self.toggleTimestampsAct = QAction(
            translate("menubar", "OOC Chat Timestamps"), main)
        self.toggleTimestampsAct.setCheckable(True)
        self.toggleTimestampsAct.setChecked(False)

        self.toggleRightclickAct = QAction(
            translate("menubar", "Right-Click Opens Pog Ctrl-Click Menu"),
            main)
        self.toggleRightclickAct.setCheckable(True)
        self.toggleRightclickAct.setChecked(True)

        self.lockToGridAct = QAction(
            translate("menubar", "Lock Pogs to Map Grid"), main)
        self.lockToGridAct.setCheckable(True)
        self.lockToGridAct.setChecked(False)

        try:
            js = jsonload(path.join(SAVE_DIR, "ui_settings.rgs"))
            if loadString('chatWidget.notify', js.get('notify')) == "Off":
                self.toggleAlertsAct.setChecked(False)
        except:
            pass

        try:
            js = jsonload(path.join(SAVE_DIR, "ui_settings.rgs"))
            if loadString('chatWidget.rightclick',
                          js.get('rightclick')) == "Off":
                self.toggleRightclickAct.setChecked(False)
        except:
            pass

        try:
            js = jsonload(path.join(SAVE_DIR, "ui_settings.rgs"))
            if loadString('chatWidget.timestamp', js.get('timestamp')) == "On":
                self.toggleTimestampsAct.setChecked(True)
        except:
            pass

        try:
            js = jsonload(path.join(SAVE_DIR, "ui_settings.rgs"))
            if loadString('chatWidget.gridlock', js.get('gridlock')) == "On":
                self.lockToGridAct.setChecked(True)
        except:
            pass

        self.setTimestampFormatAct = QAction(
            translate("menubar", "Set Timestamp Format..."), main)

        self.portraitMenu = QAction(
            translate("menubar", "Set IC Portrait Size..."), main)

        self.selectIcon = QAction(QIcon("./data/FAD-select-icon.png"),
                                  "Select Tool", main)
        self.selectIcon.setShortcut("Ctrl+T")
        self.selectIcon.setToolTip("Select Tool (Ctrl+T)")

        #self.moveIcon = QAction(QIcon("./data/FAD-move-icon.png"), "Move Tool", main)
        #self.moveIcon.setShortcut("Ctrl+M")
        #self.moveIcon.setToolTip("Move Tool (Ctrl+M)")

        self.drawIcon = QAction(QIcon("./data/FAD-freehand-icon.png"),
                                "Draw Tool", main)
        self.drawIcon.setShortcut("Ctrl+E")
        self.drawIcon.setToolTip("Draw Tool (Ctrl+E)")

        self.deleteIcon = QAction(QIcon("./data/FAD-eraser-icon.png"),
                                  "Delete Tool", main)
        self.deleteIcon.setShortcut("Ctrl+R")
        self.deleteIcon.setToolTip("Delete Tool (Ctrl+R)")

        # MENUS

        fileMenu = QMenu(translate("menubar", "&File"), main)
        fileMenu.addAction(self.newMapAct)
        fileMenu.addAction(self.loadMapAct)
        fileMenu.addAction(self.saveMapAct)
        fileMenu.addSeparator()
        fileMenu.addAction(self.closeSpecificMapAct)
        fileMenu.addAction(self.closeMapAct)
        fileMenu.addSeparator()
        fileMenu.addAction(self.deletePogsAct)
        fileMenu.addSeparator()
        fileMenu.addAction(self.saveCharsAct)
        fileMenu.addAction(self.loadCharsAct)
        fileMenu.addSeparator()
        fileMenu.addAction(self.saveSessAct)
        fileMenu.addAction(self.loadSessAct)
        fileMenu.addAction(self.clearSessAct)

        self.mapExistsActs = [
            self.saveMapAct, self.closeSpecificMapAct, self.closeMapAct
        ]
        self.pogExistsActs = [
            self.deletePogsAct,
        ]
        self.characterExistsActs = [
            self.saveCharsAct,
        ]

        self.internetMenu = QMenu(translate("menubar", "&Internet"), main)
        self.internetMenu.addAction(self.hostGameAct)
        self.internetMenu.addAction(self.joinGameAct)
        self.internetMenu.addSeparator()
        self.internetMenu.addAction(self.createSurveyAct)
        self.internetMenu.addAction(self.sendFileAct)
        self.internetMenu.addSeparator()
        self.internetMenu.addAction(self.disconnectAct)

        self.connectedActs = [
            self.createSurveyAct, self.sendFileAct, self.disconnectAct
        ]
        self.disconnectedActs = [self.hostGameAct, self.joinGameAct]

        self.thicknessMenu = QMenu(translate("menubar", "&Thickness"), main)
        for x in range(1, 11):
            self.thicknessMenu.addAction(QAction(str(x), main))

        self.colourMenu = QMenu(translate("menubar", "&Colour"), main)
        #Don't translate colour names yet
        self.colourMenu.addAction(QAction("White", main))
        self.colourMenu.addAction(QAction("Red", main))
        self.colourMenu.addAction(QAction("Orange", main))
        self.colourMenu.addAction(QAction("Yellow", main))
        self.colourMenu.addAction(QAction("Green", main))
        self.colourMenu.addAction(QAction("Blue", main))
        self.colourMenu.addAction(QAction("Purple", main))
        self.colourMenu.addAction(QAction("Black", main))
        self.colourMenu.addAction(QAction("Custom...", main))

        drawMenu = QMenu(translate("menubar", "&Draw"), main)
        drawMenu.addMenu(self.thicknessMenu)
        drawMenu.addMenu(self.colourMenu)

        self.stylesMenu = QMenu(translate("menubar", "&Styles"), main)
        for style in list(sheets.keys()):
            act = QAction(style, main)
            act.isDark = sheets[style][1]
            self.stylesMenu.addAction(act)

        self.langMenu = QMenu(translate("menubar", "&Language"), main)
        ned = QAction(translate("menubar", "Dutch"), main)
        ned.setIconText("Dutch")
        self.langMenu.addAction(ned)
        eng = QAction(translate("menubar", "English"), main)
        eng.setIconText("English")
        self.langMenu.addAction(eng)
        nhn = QAction(translate("menubar", "Japanese"), main)
        nhn.setIconText("Japanese")
        self.langMenu.addAction(nhn)
        deu = QAction(translate("menubar", "German"), main)
        deu.setIconText("German")
        self.langMenu.addAction(deu)

        self.optionsMenu = QMenu(translate("menubar", "&Options"), main)
        self.optionsMenu.addMenu(self.langMenu)
        self.optionsMenu.addMenu(self.stylesMenu)
        self.optionsMenu.addSeparator()
        self.optionsMenu.addAction(self.toggleAlertsAct)
        self.optionsMenu.addAction(self.toggleTimestampsAct)
        self.optionsMenu.addAction(self.toggleRightclickAct)
        self.optionsMenu.addAction(self.lockToGridAct)
        self.optionsMenu.addAction(self.setTimestampFormatAct)
        self.optionsMenu.addAction(self.portraitMenu)
        self.optionsMenu.addAction(self.gfxSettingsAct)
        self.optionsMenu.addAction(self.drawTimerSettingsAct)

        self.windowMenu = QMenu(translate("menubar", "Window"), main)

        self.helpMenu = QMenu(translate("menubar", "&Help"), main)
        self.helpMenu.addAction(self.aboutAct)

        # MENUBAR

        self.menubar.addMenu(fileMenu)
        self.menubar.addMenu(self.internetMenu)
        self.menubar.addMenu(drawMenu)
        self.menubar.addMenu(self.optionsMenu)
        if list(int(r) for r in PYQT_VERSION_STR.split(".")) < [4, 8, 0]:
            warning = QMessageBox()
            warning.setText("".join((
                "Your version of PyQt (", PYQT_VERSION_STR,
                ") is incompatible with RGG's Window menu, which requires 4.8.0 or newer. Right-click on the menu bar to get an alternate menu."
            )))
            warning.exec_()
        else:
            self.menubar.addMenu(self.windowMenu)
        self.menubar.addMenu(self.helpMenu)
        self.menubar.addSeparator()
        self.menubar.addAction(self.selectIcon)
        #self.menubar.addAction(self.moveIcon)
        self.menubar.addAction(self.drawIcon)
        self.menubar.addAction(self.deleteIcon)

        # EVENTS

        self.selectIconClicked()
        self.selectIcon.triggered.connect(self.selectIconClicked)
        #self.moveIcon.triggered.connect(self.moveIconClicked)
        self.drawIcon.triggered.connect(self.drawIconClicked)
        self.deleteIcon.triggered.connect(self.deleteIconClicked)

        fileMenu.aboutToShow.connect(self.updateFileMenu)
        self.internetMenu.aboutToShow.connect(self.updateInternetMenu)
        self.windowMenu.aboutToShow.connect(self.updateWidgetMenu)

        self.aboutAct.triggered.connect(self.about)
Пример #18
0
def respondSay(username, message):
	say(translate('remote', '{name}: {sayText}').format(
		name=linkedName(username),
		sayText=message))
Пример #19
0
	def _cleanValue(self, value):
		if value <= self.max and value >= self.min:
			return value
		raise validationError(translate('sliderField', 'You must enter a valid choice for the {0} field.').format(self.name))
Пример #20
0
def respondWhisperTarget(sender, message):
	say(translate('remote', '{username} whispers: {message}').format(
		username=linkedName(sender),
		message=message))
Пример #21
0
def respondWhisperSender(target, message):
	say(translate('remote', 'To {username}: {message}').format(
		username=linkedName(target),
		message=message))
Пример #22
0
def respondEmote(username, message):
	say(translate('remote', '<i>{name} {emote}</i>').format(
		name=linkedName(username),
		emote=message))
Пример #23
0
def disconnectionMessage(message, error, *args, **kwargs):
	"""Special translation for a disconnection message."""
	#print "Server dropped user."
	error = translate('socket', error)
	say(translate('error', message).format(*args, error=disconnect, **kwargs))
Пример #24
0
	def _cleanValue(self, value):
		if len(self.choices) <= 0:
			return ''
		if value in self.choices:
			return value
		raise validationError(translate('dropDownField', 'You must enter a valid choice for the {0} field.').format(self.name))
Пример #25
0
def randomname(message, chname, portrait):
    if len(message) <= 0:
        ICSay(translate('chat', "Syntax: /generate NAMETYPE."))
    else:
        generateName(*splitword(message.lower()))
Пример #26
0
def respondUserJoin(username):
	say(translate('remote', "{name} has joined!").format(name=username))
	addUserToList(username)
Пример #27
0
def respondDice(username, message):
	say(translate('remote', '{sayText}').format(
		sayText=message))
	ICSay(translate('remote', '{sayText}').format(
		sayText=message))