def load_game(self, nom): if os.path.isdir("data/save_srv/"+nom): self.out("Loading characters...") file = open("data/save_srv/"+nom+"/char" , 'r') buffer = file.read().split("\n") for i in buffer: i=i.split(";") if len(i)>1: new_client = Client() new_client.nom = i[0] new_client.inv.empty() new_client.inv.load(i[1]) self.clients_saved.append(new_client) self.out(new_client.nom+" loaded ") self.out("Loading "+nom+"...") i = 0 while map.open_map("save_srv/"+nom+"/map"+str(i)) != []: self.maps.append(map.Map(map.open_map("save_srv/"+nom+"/map"+str(i)),i)) i = i+1 i = -1 while map.open_map("save_srv/"+nom+"/map"+str(i)) != []: self.maps.append(map.Map(map.open_map("save_srv/"+nom+"/map"+str(i)),i)) i = i-1 return True else: return False
def new_game(self, nom): self.out("Generating "+nom+"...") # Copie map std i = 0 if not os.path.isdir("data/save_srv/"): os.mkdir("data/save_srv/") if not os.path.isdir("data/save_srv/"+nom+"/"): os.mkdir("data/save_srv/"+nom+"/") while map.open_map("map/std/map"+str(i)) != []: map.save_map("save_srv/"+nom+"/map"+str(i),map.open_map("map/std/map"+str(i))) i = i+1 # Génération sous-sol map.save_map("save_srv/"+nom+"/map-1", self.gen_map(-1)) # Fichier global file = open("data/save_srv/"+nom+"/char", "w") file.write("") file.close()
def read(self): clients_to_read = [] try: clients_to_read, wlist, xlist = select.select(self.get_clients(), [], [], 0.05) except select.error: pass else: for client in clients_to_read: try: pbuffer = client.recv(1024) buffer_ret = " " if pbuffer == "exit": self.runned = False buffer = pbuffer.split(";") if buffer[0] == "co_perso": founded = False for i in self.clients: if i.nom == buffer[1]: founded = True break if not founded: founded = False for i in self.clients_saved: if i.nom == buffer[1]: self.get_client(client).inv.empty() self.get_client(client).inv.load(i.inv.save()) self.clients_saved.remove(i) break self.get_client(client).nom = buffer[1] self.get_client(client).color = [] self.get_client(client).color.append(buffer[2]) self.get_client(client).color.append(buffer[3]) self.get_client(client).color.append(buffer[4]) self.get_client(client).color.append(buffer[5]) self.get_client(client).color.append(buffer[6]) self.event.append("connect;"+self.get_client(client).nom) self.event.append("say;"+self.get_client(client).nom+" connected") buffer_ret = "Connected" self.out(str(self.get_client(client).adr)+self.get_client(client).nom+" connected !\a") else: buffer_ret = "Pseudo already used" elif buffer[0] == "get_welcome": buffer_ret="say;"+self.msg_welcome elif buffer[0] == "get_persos": buffer_ret = "" for i in self.clients: if i != self.get_client(client): buffer_ret += i.get_char()+"\n" buffer_ret+= " " elif buffer[0] == "get_perso": if buffer[1] != self.get_client(client).nom and self.get_client_nom(buffer[1]) != None: buffer_ret = self.get_client_nom(buffer[1]).get_char() elif buffer[0] == "get_mobs": buffer_ret=str(int(self.mobs)) # Inventory elif buffer[0] == "set_inv": self.get_client(client).inv.empty() self.get_client(client).inv.load(buffer[1]) elif buffer[0] == "get_inv": buffer_ret=self.get_client(client).inv.save() # Map elif buffer[0] == "get_map": buffer_ret=map.map2char(self.get_map(int(buffer[1])).map) elif buffer[0] == "set_map": id_map = int(buffer[1]) self.get_client(client).map = id_map found = False for i in self.maps: if i.id == id_map: found = True if not found: map.save_map("save_srv/"+self.world+"/map"+str(id_map), self.gen_map(id_map)) self.maps.append(map.Map(map.open_map("save_srv/"+self.world+"/map"+str(id_map)),id_map)) elif buffer[0] == "set_map_perso": self.get_client(client).map = int(buffer[1]) self.get_client(client).id_porte = int(buffer[2]) elif buffer[0] == "set_vie": self.get_client(client).vie = int(buffer[1]) elif buffer[0] == "nbr_player": buffer_ret = str(len(self.clients)) elif buffer[0] == "get_last_event": buffer_ret=str(len(self.event)) elif buffer[0] == "get_last_event_map": buffer_ret=str(len(self.get_map(int(buffer[1])).event)) elif buffer[0] == "get_event_map": buffer_ret=self.get_map(self.get_client(client).map).send_event(int(buffer[1]), self.get_client(client).nom) elif buffer[0] == "get_event": buffer_ret=self.send_event(int(buffer[1])) elif buffer[0] == "jump": self.get_client(client).isingrav = True elif buffer[0] == "stop_jump": self.get_client(client).isingrav = False elif buffer[0] == "destroy_block": self.get_map(self.get_client(client).map).event.append(self.get_client(client).nom+";"+pbuffer) x = int(buffer[1]) y = int(buffer[2]) for i in self.get_map(self.get_client(client).map).map: if i.x == x and i.y == y: if isinstance(i, Coal): self.get_client(client).inv.add(item.Item(34, 4)) else: self.get_client(client).inv.add(i) self.get_map(self.get_client(client).map).map.remove(i) # hit block elif buffer[0] == "hit_block": self.get_map(self.get_client(client).map).event.append(self.get_client(client).nom+";"+pbuffer) x = int(buffer[1]) y = int(buffer[2]) damage = float(buffer[3]) for i in self.get_map(self.get_client(client).map).map: if i.x == x and i.y == y: if i.hit(damage): if isinstance(i, Coal): self.get_client(client).inv.add(item.Item(34, 4)) else: self.get_client(client).inv.add(i) self.get_map(self.get_client(client).map).map.remove(i) # Set Block elif buffer[0] == "set_block": self.get_map(self.get_client(client).map).event.append(self.get_client(client).nom+";"+pbuffer) x = int(buffer[1]) y = int(buffer[2]) for i in self.get_map(self.get_client(client).map).map: if i.x == x and i.y == y: self.get_map(self.get_client(client).map).map.remove(i) self.get_map(self.get_client(client).map).map.append(map.char2bloc(buffer[3])) # Add block elif buffer[0] == "add_block": self.get_map(self.get_client(client).map).event.append(self.get_client(client).nom+";"+pbuffer) bloc = map.char2bloc(buffer[1]) self.get_client(client).inv.changer_select(self.get_client(client).inv.search(item.Item_Bloc(bloc))) self.get_client(client).inv.delete() self.get_map(self.get_client(client).map).map.append(bloc) elif buffer[0] == "lock_chest": self.get_map(self.get_client(client).map).event.append(self.get_client(client).nom+";"+pbuffer) elif buffer[0] == "say": self.out(self.get_client(client).nom+"> "+buffer[1]) buffer_unspaced = buffer[1].split() if buffer_unspaced[0] == "/me" and len(buffer_unspaced)>1: del buffer_unspaced[0] buffer[1] = " ".join(buffer_unspaced) self.event.append("say;"+self.get_client(client).nom+" "+buffer[1]) elif buffer_unspaced[0] == "/help": buffer_ret = "say;"+\ "Commands help : "+\ "\n/help : Shows a list of server commands"+\ "\n/welcome : Shows welcome message"+\ "\n/list or /ls : list all connected players"+\ "\n/me action : Sends a message as an action" elif buffer_unspaced[0] == "/list" or buffer_unspaced[0] == "/ls": buffer_ret = "say;"+str(len(self.clients))+" player(s) connected :" for i in self.clients: buffer_ret += "\n-"+i.nom elif buffer_unspaced[0] == "/welcome": buffer_ret="say;"+self.msg_welcome elif buffer_unspaced[0] == "/sign": map_temp = self.get_map(self.get_client(client).map).map[:] map_temp.reverse() for i in map_temp: if isinstance(i, Sign): del buffer_unspaced[0] buffer[1] = " ".join(buffer_unspaced) i.txt = buffer[1] self.get_map(self.get_client(client).map).event.append("server;set_block;"+str(i.x)+";"+str(i.y)+";"+map.bloc2char(i)) break map_temp = None else: self.event.append("say;"+self.get_client(client).nom+"> "+buffer[1]) client.send(buffer_ret) except socket.error: self.break_connection(client)
def map_(self): map.open_map(self.ent_open_map.get() + ".mapdat")