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
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))
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)
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
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)
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']))
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)
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)
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))