Changeset 566


Ignore:
Timestamp:
06/26/10 18:30:19 (9 years ago)
Author:
beliar
Message:

Patch by Beliar.

  • Fixed inventory/container contents not saved/restored correctly
  • Changed numbering of inventory-item id's to only add a number if the original id is in use. (Id's are being saved and we don't want to add another number to one already present)
Location:
trunk/game
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/game/maps/map2_agents.yaml

    r563 r566  
    1414#   along with PARPG.  If not, see <http://www.gnu.org/licenses/>. 
    1515--- 
    16 ShantyDoor: 
    17     ViewName: "ShantyDoor" 
    18     RealName: "ShantyDoor" 
     16ToMall: 
     17    ViewName: "To Mall" 
     18    RealName: "To Mall" 
    1919    ObjectType: "ShantyDoor" 
    2020    Position: [-2.0, 6.0, 0.0] 
  • trunk/game/maps/map_agents.yaml

    r565 r566  
    2424    - {ID: "Dagger", object_type: "Dagger"} 
    2525--- 
    26 ShantyDoor: 
    27     ViewName: "ShantyDoor" 
    28     RealName: "ShantyDoor" 
     26ToFarm: 
     27    ViewName: "To Farm" 
     28    RealName: "To Farm" 
    2929    ObjectType: "ShantyDoor" 
    3030    Position: [-6.0, -13.0, 0.0] 
  • trunk/game/scripts/gamemodel.py

    r565 r566  
    112112        info.update(extra) 
    113113        ID = info.pop("id") if info.has_key("id") else info.pop("ID") 
    114         id_number = 0 
    115         while self.game_state.hasObject(ID + "_" + str(id_number)): 
    116             id_number += 1 
    117             if id_number > self.MAX_ID_NUMBER: 
    118                 raise ValueError("Number exceeds MAX_ID_NUMBER:" +  
    119                                  str(self.MAX_ID_NUMBER)) 
    120         ID = ID + "_" + str(id_number) 
     114        if self.game_state.hasObject(ID): 
     115            id_number = 1 
     116            while self.game_state.hasObject(ID + "_" + str(id_number)): 
     117                id_number += 1 
     118                if id_number > self.MAX_ID_NUMBER: 
     119                    raise ValueError("Number exceeds MAX_ID_NUMBER:" +  
     120                                     str(self.MAX_ID_NUMBER)) 
     121            ID = ID + "_" + str(id_number) 
    121122        new_item = CarryableItem(ID = ID, **info)  
    122123        self.game_state.addObject(None, new_item) 
     
    208209                self.addAgent(map_name, agent) 
    209210                 
    210         load_file.close() 
    211          
    212211        # Load the current map 
    213212        if self.game_state.current_map_name: 
    214213            self.loadMap(self.game_state.current_map_name)          
     214        load_file.close() 
     215         
    215216 
    216217        # Recreate all the behaviours. These can't be saved because FIFE 
     
    301302        if not self.agents.has_key(namespace): 
    302303            self.agents[namespace] = {} 
    303  
     304             
    304305        self.agents[namespace].update(agent) 
    305306        object_model = "" 
     
    312313        loadImportFile(import_file, self.engine) 
    313314         
     315    def readAgentsOfMap(self, map_name): 
     316        """Read the agents of the map 
     317        @param map_name: Name of the map 
     318        @type map_name: str 
     319        """ 
     320        #Get the agents of the map         
     321        map_agents_file = self.map_files[map_name].\ 
     322                            replace(".xml", "_agents.yaml")    
     323        agents_data = file(map_agents_file) 
     324        agents = yaml.load_all(agents_data) 
     325        for agent in agents: 
     326            if not agent == None: 
     327                self.addAgent(map_name, agent)   
     328     
    314329    def readAllAgents(self): 
    315330        """Read the agents of the all_agents_file and store them""" 
     
    350365           @param map_name: Name of the map to load 
    351366           @return: None""" 
    352         self.game_state.current_map_name = map_name 
    353  
    354367        if not map_name in self.maps:   
    355368            map_file = self.map_files[map_name] 
    356             map_agents_file = map_file.replace(".xml", "_agents.yaml")    
    357369            new_map = GameMap(self.engine, self) 
    358370            self.maps[map_name] = new_map 
    359             #Get the agents of the map 
    360             agents_data = file(map_agents_file) 
    361             agents = yaml.load_all(agents_data) 
    362             for agent in agents: 
    363                 if not agent == None: 
    364                     self.addAgent(map_name, agent)   
    365             new_map.load(self.map_files[map_name]) 
    366         else: 
    367             self.setActiveMap(map_name) 
    368  
     371            new_map.load(map_file) 
     372     
    369373    def createAgent(self, agent, inst_id): 
    370374        object_type = agent["ObjectType"] 
     
    480484        self.game_state.PlayerCharacter.start() 
    481485                       
    482     def changeMap(self, map_name, target_position): 
     486    def changeMap(self, map_name, target_position = None): 
    483487        """Registers for a map change on the next pump(). 
    484488           @type map_name: String 
     
    519523        self.active_map = self.maps[map_name] 
    520524        self.active_map.makeActive() 
     525        self.game_state.current_map_name = map_name 
    521526 
    522527    def createMapObject (self, layer, attributes, instance): 
  • trunk/game/scripts/gamescenecontroller.py

    r563 r566  
    173173        """ 
    174174        if self.model.map_change: 
    175             player_agent = self.model.active_map.\ 
    176                                 agent_layer.getInstance("PlayerCharacter") 
    177             self.model.active_map.agent_layer.deleteInstance(player_agent) 
    178             self.model.loadMap(self.model.target_map_name)       
    179             player_char = self.model.game_state.PlayerCharacter 
    180             self.model.game_state.PlayerCharacter = None 
    181             pc_agent = self.model.agents[self.model.ALL_AGENTS_KEY]["PlayerCharacter"]  
    182             pc_agent["Map"] = self.model.target_map_name  
    183             pc_agent["Position"] = self.model.target_position 
    184             pc_agent["Inventory"] = player_char.inventory.serializeInventory() 
     175            if self.model.active_map: 
     176                player_agent = self.model.active_map.\ 
     177                                    agent_layer.getInstance("PlayerCharacter") 
     178                self.model.active_map.agent_layer.deleteInstance(player_agent) 
     179                player_char = self.model.game_state.PlayerCharacter 
     180                self.model.game_state.PlayerCharacter = None 
     181                pc_agent = self.model.agents[self.model.ALL_AGENTS_KEY]\ 
     182                                                ["PlayerCharacter"]  
     183                pc_agent["Map"] = self.model.target_map_name  
     184                pc_agent["Position"] = self.model.target_position 
     185                pc_agent["Inventory"] = player_char.inventory.serializeInventory() 
     186            self.model.loadMap(self.model.target_map_name) 
     187            self.model.setActiveMap(self.model.target_map_name)           
     188            self.model.readAgentsOfMap(self.model.target_map_name) 
    185189            self.model.placeAgents() 
    186190            self.model.placePC() 
     
    190194            # At this point we sync the contents of the ready slots  
    191195            # with the contents of the inventory. 
    192             self.view.hud.initializeInventory()           
    193          
    194         if self.model.load_saver: 
    195             self.load(self.savegame) 
    196             self.model.load_saver = False 
    197                  
     196            self.view.hud.inventory = None 
     197            self.view.hud.initializeInventory()          
     198                         
    198199    def nullFunc(self, userdata): 
    199200        """Sample callback for the context menus.""" 
     
    277278        # Remove all currently loaded maps so we can start fresh 
    278279        self.model.deleteMaps() 
     280        self.view.hud.inventory = None 
    279281 
    280282        self.model.load(*args, **kwargs) 
     283        self.view.hud.initializeInventory()           
    281284 
    282285    def quitGame(self): 
  • trunk/game/scripts/gui/hud.py

    r553 r566  
    143143                                                       self.inventory_storage, 
    144144                                                       inv_callbacks) 
     145        else: 
     146            self.inventory.inventory_storage = self.inventory_storage 
    145147        self.refreshReadyImages() 
    146148 
  • trunk/game/scripts/inventory.py

    r563 r566  
    135135            elif len(slot.items) > 0: 
    136136                item = slot.items[0] 
    137                 item_dict = item.item_dict = item.getStateForSaving() 
     137                item_dict = item.getStateForSaving() 
    138138                item_dict["slot"] = key                                 
    139139                item_dict["type"] = type(item).__name__  
  • trunk/game/scripts/parpg.py

    r563 r566  
    119119                                            self.view,  
    120120                                            self.model) 
    121         self.model.loadMap(str(self._setting.get("PARPG", "Map"))) 
    122         self.model.placeAgents() 
    123         self.model.placePC() 
     121        start_map = self._setting.get("PARPG", "Map") 
     122        #self.model.loadMap(start_map) 
     123        #self.model.readAgentsOfMap(start_map) 
     124        self.model.changeMap(start_map) 
     125        #self.model.placeAgents() 
     126        #self.model.placePC() 
    124127        pychan.init(self.engine, debug = True) 
    125128 
Note: See TracChangeset for help on using the changeset viewer.