Changeset 350 for trunk


Ignore:
Timestamp:
10/28/09 06:46:08 (10 years ago)
Author:
orlandov
Message:

Patch by Vaporice and or1andov:

  • add a quest model to the dialogue demo
  • refactor zenbit's dialogue tree to use quest engine
Location:
trunk/game
Files:
4 added
3 edited

Legend:

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

    r343 r350  
    3030              - "Glad to see you're feeling better." 
    3131              - gratitude 
    32               - pc.hasSatisfiedQuest('beer') and beer.quality > 1 
     32              - pc.met('bart') and not quest.hasFinishedQuest('beer') 
    3333            -  
    3434              - "Same old Bart,  I see." 
     
    4646              - "Are you drunk?" 
    4747              - elaborate_beer 
    48               - pc.canAcceptQuest('beer') 
     48              - not quest.hasQuest('beer') and not quest.hasFinishedQuest('beer') 
    4949            # above should always be true since there is no other way to get the quest   
    5050            - 
     
    6464    quest_beer:            
    6565         - say:  "You sir, are a gentleman and a scholar.  I am sure folks around here will help you find what you need." 
    66          - start_quest: beer 
     66         - start_quest: quests/beer.yaml 
    6767         - responses: 
    6868           -  
     
    7979             - "Hey, Bart - here is my shopping list I need to brew us up something tasty.  Can you help?" 
    8080             - help_beer 
    81              - pc.questIsCurrent("beer") 
     81             - quest.hasQuest("beer") 
    8282             # and howtobeer.state == "read" - howtobeer is an object the PC starts with, it has to be read for the PC to know what he needs to make beer. 
    8383           - 
    8484             - "By the way, Bart, I am looking for a chap named 'Pekko', you know were I can find him?" 
    8585             - help_fedex 
    86              - pc.questIsCurrent("fedex") 
     86             - quest.hasQuest("fedex") 
    8787           - 
    8888             - "Hey, try my fantastic brew!" 
    8989             - beer_tasting 
    90              - not not 'beer' in pc.inventory 
     90             - ('beer' in pc.inventory) 
    9191             # this is a bug in parser, bare string 'beer' cannot be first token 
    9292           - 
     
    9696             - "Well, I am off to make some beer, wish me luck!" 
    9797             - end 
    98              - pc.questIsCurrent('beer') 
     98             - quest.hasQuest('beer') 
    9999           - 
    100100             - "Adios, Bart" 
    101101             - end 
    102              - not pc.questIsCurrent('beer') 
     102             - not quest.hasQuest('beer') 
    103103           - 
    104104             - "Pekko was murdered.  And someone's responsible." 
     
    264264              - "What about Janie?" 
    265265              - janie_pekko_connection 
    266               - pc.hasSatisfiedQuest('fedex') 
     266              - quest.hasFinishedQuest('fedex') 
    267267            - 
    268268              - "Whatever, murderer.  I'll see you hang." 
     
    290290            -  
    291291              - "Guess we'll find out HOW powerful, now, won't we!" 
    292               - emd 
     292              - end 
    293293 
    294294    light_blackmail: 
  • trunk/game/dialogue_demo.py

    r343 r350  
    1717 
    1818from scripts import dialogue 
     19from scripts import quest_engine 
    1920import yaml 
    2021import sys 
     
    3132    """ 
    3233    def __init__(self): 
    33         self.current_quests = set() 
    34         self.finished_quests = set() 
    35         self.inventory = set() 
     34        self.inventory = set(['beer']) 
    3635        self.peopleIknow = set() 
    3736 
    38     def canAcceptQuest(self, quest): 
    39         return     quest not in self.finished_quests \ 
    40                and quest not in self.current_quests 
    41  
    42     def hasSatisfiedQuest(self, quest): 
    43         return quest in self.finished_quests 
    44      
    45     def questIsCurrent(self,quest): 
    46         return quest in self.current_quests 
    47  
    48     def startQuest(self, quest): 
    49         if quest in self.current_quests: 
    50             raise RuntimeError("Already have quest, %s" % quest) 
    51         self.current_quests.add(quest) 
    52  
    53     def completeQuest(self, quest): 
    54         self.finished_quests.add(quest) 
    55         self.current_quests.remove(quest) 
    56      
    5737    def meet(self,npc): 
    5838        if npc in self.peopleIknow: 
    5939            raise RuntimeError("I already know %s" % npc) 
    6040        self.peopleIknow.add(npc) 
    61          
     41 
    6242    def met(self,npc): 
    6343        return npc in self.peopleIknow 
    64          
     44 
     45 
     46class Beer(object): 
     47    quality = 3 
     48 
     49 
    6550class Box(object): 
    6651    """ 
     
    7055    def __init__(self): 
    7156        self.state = 'closed' 
    72          
     57 
    7358    def isOpen(self): 
    7459        if self.state == 'open': 
     
    7661        else: 
    7762            return False 
    78      
     63 
    7964    def isClosed(self): 
    8065        if self.state == 'closed': 
     
    8267        else: 
    8368             return False 
    84          
     69 
    8570    def open(self): 
    8671        self.state = 'open' 
    8772        return self.state 
    88      
     73 
    8974    def close(self): 
    9075        self.state = 'closed' 
    9176        return self.state 
    92      
     77 
     78 
    9379def main(dialogue_file): 
    9480 
     
    10086        for i, response in enumerate(responses): 
    10187            print "%d. %s" % (i, response) 
    102         print "\nChoose a response: ", 
    103         val = int(sys.stdin.readline().strip()) 
     88 
     89        while True: 
     90            try: 
     91                print "\nChoose a response: ", 
     92                val = int(sys.stdin.readline().strip()) 
     93            except ValueError: 
     94                print "That's not a valid value, amigo" 
     95                continue 
     96            break 
     97 
    10498        print "you picked %s" % (val,) 
    10599        return val 
     
    107101    def start_quest(state, quest): 
    108102        print "You've picked up the '%s' quest!" % quest 
    109         state['pc'].startQuest(quest) 
     103        state['quest'].addQuest(quest) 
    110104 
    111     def complete_quest(state, quest): 
    112         print "You've finished the '%s' quest" % quest 
    113         state['pc'].completeQuest(quest) 
    114   
     105    def complete_quest(state, quest_id): 
     106        print "You've finished the quest %s" % quest_id 
     107        state['quest'].finishQuest(quest_id) 
     108 
     109    def delete_quest(state, quest_id): 
     110        print "You've deleted quest %s" % quest_id 
     111        state['quest'].deleteQuest(quest_id) 
     112 
     113    def increase_value(state, quest_id, variable, value): 
     114        print "Increased %s by %i"%(variable,value) 
     115        state['quest'][quest_id].increaseValue(variable,value) 
     116 
     117    def decrease_value(state, quest_id, variable, value): 
     118        print "Decreased %s by %i"%(variable,value) 
     119        state['quest'][quest_id].decreaseValue(variable,value) 
     120 
     121    def set_value(state,quest_id, variable, value): 
     122        print "Set %s to %i"%(variable,value) 
     123        state['quest'][quest_id].setValue(variable,value) 
     124 
    115125    def meet(state, npc): 
    116126        print "You've met %s!" % npc 
    117127        state['pc'].meet(npc) 
    118         
     128 
    119129    def get_stuff(state, thing): 
    120130        if thing not in state['pc'].inventory: 
    121131            state['pc'].inventory.add(thing) 
    122132            print "You've now have the %s" % thing 
    123      
     133 
    124134    def take_stuff(state,thing): 
    125135        if thing in state['pc'].inventory: 
     
    131141        "start_quest": start_quest, 
    132142        "complete_quest": complete_quest, 
     143        "delete_quest": delete_quest, 
     144        "increase_value": increase_value, 
     145        "decrease_value": decrease_value, 
     146        "set_value": set_value, 
    133147        "meet": meet, 
    134148        "get_stuff" : get_stuff, 
     
    138152    pc = Player() 
    139153    box = Box() 
    140      
     154    quest = quest_engine.QuestEngine() 
     155    beer = Beer() 
     156 
    141157    state = { 
    142         'quests': {}, 
     158        'quest': quest, 
    143159        'pc': pc, 
    144         'box': box 
     160        'box': box, 
     161        'beer': beer 
    145162    } 
    146163 
     
    152169 
    153170if __name__ == "__main__": 
    154     dialogue_file = 'dialogue/sample.yaml' 
     171    print "1 - Dialogue sample\n2 - Quest Sample" 
     172    choice = input("> ") 
     173    if choice == 1: 
     174        dialogue_file = 'dialogue/drunkard.yaml' 
     175    elif choice == 2: 
     176        dialogue_file = 'dialogue/quest_sample.yaml' 
    155177    if len(sys.argv) > 1: 
    156178        dialogue_file = sys.argv[1] 
    157          
     179 
    158180    main(dialogue_file) 
  • trunk/game/scripts/dialogue.py

    r345 r350  
    176176 
    177177        state = self.state 
    178  
    179178        self.section_stack.append(section_name) 
    180179 
     
    186185                                               self.section_stack,)) 
    187186        for command in itertools.cycle(self.getSection(section_name)): 
     187            logging.debug("command was %s" % (command,)) 
    188188            if command.get("say"): 
    189189                if self.callbacks.get('say'): 
     
    202202 
    203203            elif command.get("start_quest"): 
    204                 self.callbacks["start_quest"](state, \ 
    205                                               command.get("start_quest")) 
     204                self.callbacks["start_quest"](state, 
     205                        command.get("start_quest")) 
    206206 
    207207            elif command.get("complete_quest"): 
    208                 self.callbacks["complete_quest"](state, \ 
    209                                                  command.get("complete_quest")) 
     208                self.callbacks["complete_quest"](state, 
     209                        command.get("complete_quest")) 
     210 
     211            elif command.get("delete_quest"): 
     212                self.callbacks["delete_quest"](state, 
     213                        command.get("delete_quest")) 
     214 
     215            elif command.get("increase_value"): 
     216                self.callbacks["increase_value"](state, 
     217                        command.get("increase_value")["quest"], 
     218                        command.get("increase_value")["variable"], 
     219                        command.get("increase_value")["value"]) 
     220 
     221            elif command.get("decrease_value"): 
     222                self.callbacks["decrease_value"](state, 
     223                        command.get("decrease_value")["quest"], 
     224                        command.get("decrease_value")["variable"], 
     225                        command.get("decrease_value")["value"]) 
     226 
     227            elif command.get("set_value"): 
     228                self.callbacks["set_value"](state,  
     229                        command.get("set_value")["quest"], 
     230                        command.get("set_value")["variable"], 
     231                        command.get("set_value")["value"]) 
    210232 
    211233            elif command.get("meet"): 
    212                 self.callbacks["meet"](state, \ 
    213                                                  command.get("meet")) 
     234                self.callbacks["meet"](state, command.get("meet")) 
    214235 
    215236            elif command.get("get_stuff"): 
    216                 self.callbacks["get_stuff"](state, \ 
    217                                                  command.get("get_stuff")) 
     237                self.callbacks["get_stuff"](state, command.get("get_stuff")) 
    218238 
    219239            elif command.get("take_stuff"): 
    220                 self.callbacks["take_stuff"](state, \ 
    221                                                  command.get("take_stuff")) 
    222                  
     240                self.callbacks["take_stuff"](state, command.get("take_stuff")) 
     241 
    223242            elif command.get("dialogue"): 
    224243                command = command.get("dialogue") 
Note: See TracChangeset for help on using the changeset viewer.