Exemple #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"))
Exemple #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))
Exemple #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')))
Exemple #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))
Exemple #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)
Exemple #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))
Exemple #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)))
Exemple #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)
Exemple #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)
Exemple #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)
Exemple #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()
Exemple #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()
Exemple #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()))
Exemple #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()
Exemple #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
Exemple #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))
Exemple #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)
Exemple #18
0
def respondSay(username, message):
	say(translate('remote', '{name}: {sayText}').format(
		name=linkedName(username),
		sayText=message))
Exemple #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))
Exemple #20
0
def respondWhisperTarget(sender, message):
	say(translate('remote', '{username} whispers: {message}').format(
		username=linkedName(sender),
		message=message))
Exemple #21
0
def respondWhisperSender(target, message):
	say(translate('remote', 'To {username}: {message}').format(
		username=linkedName(target),
		message=message))
Exemple #22
0
def respondEmote(username, message):
	say(translate('remote', '<i>{name} {emote}</i>').format(
		name=linkedName(username),
		emote=message))
Exemple #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))
Exemple #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))
Exemple #25
0
def randomname(message, chname, portrait):
    if len(message) <= 0:
        ICSay(translate('chat', "Syntax: /generate NAMETYPE."))
    else:
        generateName(*splitword(message.lower()))
Exemple #26
0
def respondUserJoin(username):
	say(translate('remote', "{name} has joined!").format(name=username))
	addUserToList(username)
Exemple #27
0
def respondDice(username, message):
	say(translate('remote', '{sayText}').format(
		sayText=message))
	ICSay(translate('remote', '{sayText}').format(
		sayText=message))