def logout(script): if not script.connection.login_id: return '[INFO] You are not logged in!' database.update_player(script.server.db_con, script.connection.login_id, script.connection.name) script.connection.login_id = None script.connection.rank = None script.connection.rights.update([]) return 'Successfully logged out.'
def register(script, password=None, repeating=None): if not password or not repeating: return '[INFO] Use /register <Password> <Password Repeating> to register in order to get your own unique numeric ID.' if password != repeating: return '[REGISTRATION] Your password does not equal its repeating.' regid = database.register_player(script.server.db_con, script.connection.name, script.connection.address.host, password) if regid: database.update_player(script.server.db_con, regid, script.connection.name) return '[REGISTRATION] You can use /login %s %s now everytime you want to login.' % (regid, password) return '[ERROR] Registration failed.'
def login(script, id, password): if not id or not password: return '[INFO] Use /login <ID> <Password> when you are already registered else use /register <Password> <Password Repeating> to register in order to get your own unique numeric ID.' try: id = int(id) except Exception: return '[ERROR] Invalid ID given.' dbres = database.login_player(script.server.db_con, script.connection.name, id, password) if dbres: script.connection.login_id = id database.update_player(script.server.db_con, id, script.connection.name) if not dbres.rank is None: script.connection.rights.update(dbres.rank) return '[LOGIN] Successfully logged in as %s %s. Your last login name was %s with IP %s.' % (dbres.rank.upper(), script.connection.name, dbres.ingame_name, dbres.last_ip) return '[LOGIN] Successfully logged in as %s. Your last login name was %s with IP %s.' % (script.connection.name, dbres.ingame_name, dbres.last_ip) else: return '[ERROR] To many arguments!' return '[ERROR] Login failed.'
def login(script, id, password): if not id or not password: return '[INFO] Use /login <ID> <Password> when you are already registered else use /register <Password> <Password Repeating> to register in order to get your own unique numeric ID.' try: id = int(id) except Exception: return '[ERROR] Invalid ID given.' dbres = database.login_player(script.server.db_con, id, password) if dbres: script.connection.login_id = id database.update_player(script.server.db_con, id, script.connection.name) if not dbres[1] is None: script.connection.rank = dbres[1].lower() user_types = script.server.ranks.get(script.connection.rank, []) script.connection.rights.update(user_types) return '[LOGIN] Successfully logged in as %s %s. Your last login name was %s with IP %s.' % (script.connection.rank, script.connection.name, dbres[0], dbres[2]) return '[LOGIN] Successfully logged in as %s. Your last login name was %s with IP %s.' % (script.connection.name, dbres[0], dbres[2]) else: return '[ERROR] Got no database result!' return '[ERROR] Login failed.'
def update(self): self.scripts.call('update') uxtime = reactor.seconds() if self.last_secondly_check: update_seconds_delta = uxtime - self.last_secondly_check else: update_seconds_delta = 0 if update_seconds_delta < 1: self.updates_since_last_second += 1 else: ups = math.floor((self.updates_per_second + (self.updates_since_last_second / update_seconds_delta)) / 2) self.updates_since_last_second = 0 if ups != self.updates_per_second: dus = ups - self.updates_per_second self.updates_per_second = ups if dus > 0: print "\rUpdates/s: %s (+%s)" % (ups, dus) elif dus < 0: print "\rUpdates/s: %s (-%s)" % (ups, dus) for player in self.players.values(): if player.packet_count > 0: ppr = math.ceil( ( player.packet_rate + ( player.packet_count / update_seconds_delta ) ) / 2 ) player.packet_count = 0 if ppr != player.packet_rate: dpr = ppr - player.packet_rate player.packet_rate = ppr if dpr > 0: print "\rPackets/s for %s: %s (+%s)" % (player.name, player.packet_rate, dpr) elif dpr < 0: print "\rPackets/s for %s: %s (-%s)" % (player.name, player.packet_rate, dpr) # entity updates for entity_id, entity in self.entities.iteritems(): entity_packet.set_entity(entity, entity_id, entity.mask) entity.mask = 0 self.broadcast_packet(entity_packet) self.broadcast_packet(update_finished_packet) # other updates update_packet = self.update_packet if self.items_changed: for chunk in self.world.chunks.values(): item_list = ChunkItems() item_list.chunk_x = chunk.chunk_x item_list.chunk_y = chunk.chunk_y item_list.items = chunk.item_list update_packet.chunk_items.append(item_list) for item in chunk.item_list: item.drop_time = 0 self.items_changed = False self.broadcast_packet(update_packet) update_packet.reset() if update_seconds_delta != 0: for player in self.players.values(): if player.time_last_packet >= (uxtime - constants.CLIENT_RECV_TIMEOUT): if player.entity_data.changed: player.entity_data.changed = False ret = player.do_anticheat_actions() if (not ret) and player.login_id: database.update_player(self.db_con, player.login_id, player.name) else: print '[WARNING] Connection timed out for Player %s #%s' % (player.entity_data.name, player.entity_id) player.kick('Connection timed out') self.broadcast_time()