Beispiel #1
0
    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
Beispiel #2
0
    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()
Beispiel #3
0
    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")