示例#1
0
def handleJoinServer(client, _id, passd, lang):
    if _id != client.penguin.id or passd != client.penguin.password:
        client.send('e', 101)
        returnValue(client.disconnect())

    # User logged in!
    yield client.engine.redis.server.hincrby('server:{}'.format(client.engine.id), 'population', 1)
    yield client.engine.redis.server.hmset("online:{}".format(client.penguin.id), {'joined' : 1, 'world': client.engine.id})
    yield client.engine.redis.server.sadd("users:{}".format(client.engine.id), client['swid'])

    client.initialize()
    yield client['RefreshHandler'].CacheInitializedDefer
    GeneralEvent.call("penguin-logged", client.ref)

    # 47 -> all lang except russian, 111 -> all incl russian; russian lang is deprecated and no longer exists
    # to get support for any lang, use bitmask = LANG1_BITMASK ^ LANG2_BITMASK ^ ...
    client.penguin.lang_allowed = bool(lang & client['data'].avatar.language)
    client.penguin.language = client['data'].avatar.language if not client['moderator'] else 47

    # todo: epf
    client.send('js', *(map(int, [0, client['RefreshHandler'].inInventory(428), client['moderator']])))
    client.send('gps', client['id'], '|'.join([str(k.stamp) for k in client['data'].stamps]))

    client.canRecvPacket = True # Start receiving XT Packets

    member = client['member'].mrem
    if client.Protocol == AS3_PROTOCOL:
        client.send('lp', client, client['coins'], 0, 1440, int(time() * 1000), client['age'], 0, int(client['age'])-1, member or '', '', client['cache'].playerWidget, client['cache'].mapCategory, client['cache'].igloo)
    elif client.Protocol == AS2_PROTOCOL:
        # #user_str%coins%issafe%egg%time%age%banned%minplay%memdays
        client.send('lp', client, client['coins'], 0, 1440, int(time() * 1000), client['age'], 0, int(client['age'])/60, member, 0)
    
    client.engine.roomHandler.joinRoom(client, 'town', 'name') # TODO Check for max-users limit
示例#2
0
def handleAddItem(client, item):
    item = client.engine.itemCrumbs[item]

    if item is None:
        return client.send('e', 402)

    if item.is_bait and not client['moderator']:
        # Ban the player?
        client.log('warn',
                   '[Exploit detected] Player trying to add a bait item :',
                   item.id)
        return client.send('e', 410)

    if item in client['inventory']:
        return client.send('e', 400)

    if item.is_member and not client['member']:
        return client.send('e', 999)

    if item.is_epf and not client['epf']:
        #Suspecious?
        return client.send('e', 410)

    if client.addItem(item):
        client.send('ai', item, client['coins'])
        GeneralEvent.call('add-item:{}'.format(item))
示例#3
0
文件: Room.py 项目: TheEssem/Timeline
    def append(self, client):
        self.deChequeReferences()
        if not isinstance(client, self.roomHandler.engine.protocol):
            return

        if client in self:
            return  #client.send('e', 200)

        if len(self) + 1 > self.max:
            return client.send('e', 210)

        if self.member and not client['member']:
            return client.send('e', 999)

        if self.requiredItem is not None:
            if not self.requiredItem in client['inventory']:
                return client.send('e', 212)

        super(Room, self).append(client)
        client.penguin.room = self

        client.engine.redis.server.hmset(
            "online:{}".format(client.penguin.id),
            {'place': self.ext_id if not client['stealth_mode'] else None})
        GeneralEvent.call('joined-room', client, self.id)
        GeneralEvent.call('joined-room-{}'.format(self.ext_id), client,
                          self.ext_id)

        self.onAdd(client)
示例#4
0
def handleJoinServer(client, _id, passd, lang):
    if _id != client.penguin.id or passd != client.penguin.password:
        client.send('e', 101)
        returnValue(client.disconnect())

    # User logged in!
    GeneralEvent.call("penguin-logged", client.selfRefer)
    yield client.engine.redis.server.hincrby(
        'server:{}'.format(client.engine.id), 'population', 1)
    yield client.engine.redis.server.hmset(
        "online:{}".format(client.penguin.id), {'joined': 1})

    client.initialize()
    client.send(
        'js',
        *(map(int,
              [client['member'] > 0, client['moderator'], client['epf']])))
    client.send('gps', client['id'], client['stampHandler'])

    client.canRecvPacket = True  # Start receiving XT Packets

    member = int(client['member']) if int(client['member']) > 0 else 0
    client.send('lp', client, client['coins'], 0, 1024, int(time() * 1000),
                client['age'], 0, client['age'], member, '',
                client['cache'].playerWidget, client['cache'].mapCategory,
                client['cache'].igloo)

    client.engine.roomHandler.joinRoom(
        client, 'dojofire', 'name')  # TODO Check for max-users limit
示例#5
0
def handleAddItem(client, item):
    item = client.engine.itemCrumbs[item]

    if item is None:
        returnValue(client.send('e', 402))

    if item.is_bait and not client['moderator']:
        # Ban the player?
        client.log('warn',
                   '[Exploit detected] Player trying to add a bait item :',
                   item.id)
        returnValue(client.send('e', 410))

    if client['RefreshHandler'].inInventory(int(item)):
        returnValue(client.send('e', 400))

    if item.is_member and not client['member']:
        returnValue(client.send('e', 999))

    if item.is_epf and not client['epf']:
        #Suspecious?
        returnValue(client.send('e', 410))

    added = yield client.addItem(item)
    if added:
        client['RefreshHandler'].forceRefresh()

        GeneralEvent.call('add-item:{}'.format(item), client)
示例#6
0
def handleStartMail(client, data):
    if client['mail'] is None:
        return client.send('mst', -1, -1)

    GeneralEvent.call('mail-start', client)

    unread = len([k for k in client['mail'] if k.opened < 1])
    client.send('mst', unread, len(client['mail']))
示例#7
0
def handleSendMessage(client, _id, message):
    if not client['id'] == _id:
        return

    message = message.strip(' ').replace('|', '\|')

    GeneralEvent.call('before-message', client, message)

    if client['muted']:
        GeneralEvent.call('after-message-muted', client, message)
        return

    client['room'].send('sm', _id, message)

    GeneralEvent.call('after-message', client, message)
示例#8
0
def handleSendMessage(client, _id, message):
    if not client['id'] == _id:
        return

    message = message.strip(' ').replace('|', '\\|')

    GeneralEvent.call('before-message', client, message)

    if client['muted']:
        GeneralEvent.call('after-message-muted', client, message)
        return

    if client['stealth_mode'] or client['mascot_mode']:
        return

    toxic = Toxicity(message)
    if toxic > 60:
        # wow toxic...
        if toxic > 90:
            # he's a racist, ban him
            GeneralEvent('ban-player',
                         client,
                         0,
                         'Rude. Toxicity [{}] message: {}'.format(
                             toxic, message),
                         type=3,
                         ban_type=610)
        elif toxic > 80:
            # Kick'em
            GeneralEvent(
                'kick-player', client,
                'Rude. Toxicity [{}] message: {}'.format(toxic, message))
        else:
            GeneralEvent(
                'mute-player', client,
                'Rude. Toxicity [{}] message: {}'.format(toxic, message))

        return

    client['room'].send('sm', _id, message)

    GeneralEvent.call('after-message', client, message)
示例#9
0
def handleStartMail(client, data):
    GeneralEvent.call('mail-start', client)

    unread = len([k for k in client['data'].mails if not k.opened])
    client.send('mst', unread, len(client['data'].mails))