Changeset 591


Ignore:
Timestamp:
07/17/10 14:35:34 (9 years ago)
Author:
beliar
Message:

Patch by Beliar.

  • Renamed replaceStuff in dialogues to replaceThing
  • Added replaceStuff to dialogues, this replaces a set of items

with another set of items.

  • Added removeItem to Inventory, removes an item from the inventory independent if it is in the backpack or a slot
  • moved give-method from NonPlayerCharacter? to CharacterBase?
  • getStuff now longer checks if the player already has an item of that type. (For what reason was that there?)
  • giveStuff now actually gives the item to the npc
Location:
trunk/game
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/game/dialogue/fguard.yaml

    r571 r591  
    374374       # reset the quest: Note we need to make sure we don't generate an infinite supply of combat boots! 
    375375       - restart_quest: fedex 
    376        - replace_stuff: 
     376       - replace_thing: 
    377377          who: pc 
    378378          old_item: Boots 
  • trunk/game/scripts/dialogue.py

    r584 r591  
    255255                                                    ["who"], 
    256256                                                command.get("replace_stuff")\ 
     257                                                    ["old_items"], 
     258                                                command.get("replace_stuff")\ 
     259                                                    ["new_items"]) 
     260            elif command.get("replace_thing"): 
     261                self.callbacks["replace_thing"](state,  
     262                                                command.get("replace_thing")\ 
     263                                                    ["who"], 
     264                                                command.get("replace_thing")\ 
    257265                                                    ["old_item"], 
    258                                                 command.get("replace_stuff")\ 
     266                                                command.get("replace_thing")\ 
    259267                                                    ["new_item"]) 
    260268 
     
    272280 
    273281            else: 
    274                 raise Exception("Unknown command %s %s" % (command,)) 
     282                raise Exception("Unknown command %s" % (command,)) 
  • trunk/game/scripts/gui/dialoguegui.py

    r590 r591  
    101101            @param thing: item_id of the item 
    102102            @type thing: str """ 
    103             if not state['pc'].inventory.\ 
    104                                                 findItem(item_id = thing): 
    105                 try : 
    106                     self.npc.give(self.npc.inventory.findItem(item_id = thing),  
    107                                   state['pc']) 
    108                     print "You've now have the %s" % thing 
    109                 except ValueError : 
    110                     print "NPC doesn't have the %s" % thing 
     103            item = state['npc'].inventory.findItem(item_id = thing) 
     104            if item: 
     105                state['npc'].give(item, state['pc']) 
     106                print "You've now have the %s" % thing 
     107            else: 
     108                print "NPC doesn't have the %s" % thing 
    111109 
    112110        def giveStuff(state, thing): 
     
    114112            @param thing: item_id of the item 
    115113            @type thing: str """ 
     114            """Moves an item from the npc inventory to the players 
     115            @param thing: item_id of the item 
     116            @type thing: str """ 
    116117            item = state['pc'].inventory.findItem(item_id = thing) 
    117118            if item: 
    118                 state['pc'].inventory.takeItem(item) 
    119                 print "You no longer have the %s" % thing 
    120  
    121         def replaceStuff(state, who, old_item, new_item): 
     119                state['pc'].give(item, state['npc']) 
     120                print "%s now has the %s" % (state['npc'].name, thing) 
     121            else : 
     122                print "You don't have the %s" % thing 
     123 
     124        def replaceStuff(state, who, old_items, new_items): 
     125            """Replaces an item in the inventory of either the pc or npc 
     126            with another 
     127            @param who: Sets whose item to replace. Should be either pc or npc 
     128            @type who: str 
     129            @param old_items: item_ids of the items to replace 
     130            @type old_item: list of str 
     131            @param new_item: Types of the items that replace the old items 
     132            @type new_item: list of str """ 
     133            old_item_instances = [] 
     134            for item_id in old_items: 
     135                old_item_instances.append(state[who].inventory.\ 
     136                                                findItem(item_id = item_id)) 
     137            if old_item_instances: 
     138                for old_item in old_item_instances: 
     139                    state[who].inventory.removeItem(old_item) 
     140                print "You no longer have " + ", ".join(old_items) 
     141            if new_items: 
     142                for new_item in new_items: 
     143                    inst_dict = {} 
     144                    inst_dict["ID"] = new_item 
     145                    inst_dict["object_type"] = new_item 
     146                    new_item = self.controller.model.\ 
     147                                createContainerObject(inst_dict) 
     148                    state[who].inventory.placeItem(new_item) 
     149                print "You now have " + ", ".join(new_items)         
     150 
     151        def replaceThing(state, who, old_item, new_item): 
    122152            """Replaces an item in the inventory of either the pc or npc 
    123153            with another 
     
    155185            "restart_quest" : restartQuest, 
    156186            'give_stuff'    : giveStuff, 
    157             "replace_stuff" : replaceStuff 
     187            'replace_stuff' : replaceStuff, 
     188            'replace_thing' : replaceThing 
     189             
    158190        } 
    159191 
  • trunk/game/scripts/inventory.py

    r590 r591  
    5454            raise ValueError ('I do not contain this item: %s' % item) 
    5555        self.items[self.item_lookup[item.ID]].takeItem(item) 
     56        del self.item_lookup[item.ID] 
     57 
     58    def removeItem(self, item): 
     59        if not item.ID in self.item_lookup: 
     60            raise ValueError ('I do not contain this item: %s' % item) 
     61        self.items[self.item_lookup[item.ID]].removeItem(item) 
    5662        del self.item_lookup[item.ID] 
    5763 
  • trunk/game/scripts/objects/actors.py

    r590 r591  
    220220        self.behaviour.agent.setLocation(location) 
    221221 
     222    def give (self, item, actor): 
     223        """Gives the specified item to the different actor. Raises an exception if the item was invalid or not found 
     224           @type item: Carryable 
     225           @param item: The item object to give 
     226           @param actor: Person to give item to""" 
     227        if item == None:  
     228            raise ValueError("I don't have %s" % item.name) 
     229        self.inventory.takeItem(item) 
     230        actor.inventory.placeItem(item)            
     231         
    222232    def hasItem(self, item_id): 
    223233        """Returns wether an item is present in the players inventory or not 
     
    388398        self.behaviour.pc = pc.behaviour.agent 
    389399        self.behaviour.idle() 
    390          
    391     def give (self, item, actor): 
    392         """Gives the specified item to the different actor. Raises an exception if the item was invalid or not found 
    393            @type item: Carryable 
    394            @param item: The item object to give 
    395            @param actor: Person to give item to""" 
    396         if item == None:  
    397             raise ValueError("I don't have %s" % item.name) 
    398         self.inventory.takeItem(item) 
    399         actor.inventory.placeItem(item)            
Note: See TracChangeset for help on using the changeset viewer.