def list(script): plcount = len(script.server.connections) if plcount <= 0: return '[INFO] There are currently no players online.' plrs = [] for player in script.server.players.values(): plrs.append('%s (%s)' % (player.name, common.get_entity_type_level_str(player.entity_data))) return '[INFO] %s/%s players online: %s' % (plcount, config.max_players, ', '.join(plrs))
def on_join(self): if self.connection_state < 0: print '[WARNING] Connection of %s [%s] already has been invalidated before!' % (self.name, self.address.host) self.kick('Blocked join') return if self.connection_state != 2: print '[WARNING] Player %s [%s] tried to join in invalid state!' % (self.name, self.address.host) self.kick('Invalid state') return if self.check_name() is False: self.kick('Bad name') return # Call join script res = self.scripts.call('on_join').result if res is False: self.kick('Blocked join') print '[WARNING] Joining client %s blocked by script!' % self.address.host return if self.entity_data.level < self.server.config.base.join_level_min: print '[WARNING] Level of player %s [%s] is lower than minimum of %s' % (self.name, self.address.host, self.server.config.base.join_level_min) self.kick('Your level has to be at least %s' % self.server.config.base.join_level_min) return if self.entity_data.level > self.server.config.base.join_level_max: print '[WARNING] Level of player %s [%s] is higher than maximum of %s' % (self.name, self.address.host, self.server.config.base.join_level_max) self.kick('Your level has to be lower than %s' % self.server.config.base.join_level_max) return self.last_pos = self.position # we dont want cheaters being able joining the server if self.do_anticheat_actions(): self.server.send_chat('[ANTICHEAT] Player %s (%s) has been kicked for cheating.' % (self.name, get_entity_type_level_str(self.entity_data))) return print '>>> Player %s %s #%s [%s] joined the game' % (self.name, get_entity_type_level_str(self.entity_data), self.entity_id, self.address.host) self.server.send_chat('>>> %s #%s (%s) joined the game' % (self.name, self.entity_id, get_entity_type_level_str(self.entity_data))) # connection successful -> continue for player in self.server.players.values(): entity_packet.set_entity(player.entity_data, player.entity_id) self.send_packet(entity_packet) self.server.players[(self.entity_id,)] = self self.connection_state = 3
def check_items(self): server = self.server for slotindex in range(13): item = entity_data.equipment[slotindex] if not item or item.type == 0: continue if item.level < 0: self.kick('Illegal item') print '[INFO] Player %s #%s (%s) [%s] had item with level lover than 0' % (self.entity_data.name, self.entity_id, get_entity_type_level_str(self.entity_data), self.address.host) return False if item.material in self.server.config.base.forbid_item_possession: self.kick('Forbidden item') print '[INFO] Player %s #%s (%s) [%s] had forbidden item #%s' % (self.entity_data.name, self.entity_id, get_entity_type_level_str(self.entity_data), self.address.host, item.material) return False return True