Beispiel #1
0
    def remove_curse( self, explo ):
        ''' Lifts curse on all pc for gold '''
        charsheets = dict()
        for pc in explo.camp.party:
            charsheets[ pc ] = charsheet.CharacterSheet( pc , screen=explo.screen, camp=explo.camp )
        psr = charsheet.PartySelectRedrawer( predraw=explo.view, charsheets=charsheets, screen=explo.screen, caption="Remove Curse" )

        while True:
            rpm = charsheet.RightMenu( explo.screen, predraw=psr, add_desc=False )
            psr.menu = rpm
            for pc in explo.camp.party:
                if pc.is_alright() and pc.condition.has_enchantment_of_type( enchantments.CURSE ):
                    rpm.add_item( "{0} - {1}gp".format( str( pc ), self.remove_curse_cost( pc ) ) , pc )
            rpm.sort()
            rpm.add_alpha_keys()
            rpm.add_item( "Exit", None )

            pc = rpm.query()
            if pc:
                if explo.camp.gold >= self.remove_curse_cost( pc ):
                    explo.camp.gold -= self.remove_curse_cost( pc )
                    pc.condition.tidy( enchantments.CURSE )
                    psr.caption = "{0} has been freed!".format( str(pc) )
                else:
                    psr.caption = "You can't afford it!"
            else:
                break
Beispiel #2
0
    def __call__( self, explo ):
        self.charsheets = dict()
        for pc in explo.camp.party:
            self.charsheets[ pc ] = charsheet.CharacterSheet( pc , screen=explo.screen, camp=explo.camp )
        psr = charsheet.PartySelectRedrawer( predraw=explo.view, charsheets=self.charsheets, screen=explo.screen, caption="Who needs to learn a new job?" )

        keep_going = True
        self.pc = explo.camp.first_living_pc()

        while keep_going:
            rpm = charsheet.RightMenu( explo.screen, predraw=psr, add_desc=False )
            psr.menu = rpm
            for pc in explo.camp.party:
                if self.can_take_at_least_one_job( pc ) and pc.xp >= pc.xp_for_next_level():
                    rpm.add_item( str( pc ), pc )
            rpm.sort()
            rpm.add_alpha_keys()
            rpm.add_item( "Exit", None )

            rpm.set_item_by_value( self.pc )
            pc = rpm.query()

            if pc:
                self.pc = pc
                self.choose_job( explo )
            else:
                keep_going = False

        del self.charsheets
Beispiel #3
0
    def restoration( self, explo ):
        ''' Heals all players for gold '''
        charsheets = dict()
        for pc in explo.camp.party:
            charsheets[ pc ] = charsheet.CharacterSheet( pc , screen=explo.screen, camp=explo.camp )
        psr = charsheet.PartySelectRedrawer( predraw=explo.view, charsheets=charsheets, screen=explo.screen, caption="Restoration" )

        while True:
            rpm = charsheet.RightMenu( explo.screen, predraw=psr, add_desc=False )
            psr.menu = rpm
            for pc in explo.camp.party:
                if pc.is_alright() and pc.stat_damage:
                    rpm.add_item( "{0} - {1}gp".format( str( pc ), self.restoration_cost( pc ) ) , pc )
            rpm.sort()
            rpm.add_alpha_keys()
            rpm.add_item( "Exit", None )

            pc = rpm.query()
            if pc:
                if explo.camp.gold >= self.restoration_cost( pc ):
                    explo.camp.gold -= self.restoration_cost( pc )
                    pc.stat_damage.clear()
                    psr.caption = "{0} has been healed!".format( str(pc) )
                else:
                    psr.caption = "You can't afford it!"
            else:
                break
Beispiel #4
0
    def __call__( self, explo ):
        self.charsheets = dict()
        for pc in explo.camp.party:
            self.charsheets[ pc ] = charsheet.CharacterSheet( pc , screen=explo.screen, camp=explo.camp )
        psr = charsheet.PartySelectRedrawer( predraw=explo.view, charsheets=self.charsheets, screen=explo.screen, caption="Who needs to change spells?" )

        rpm = charsheet.RightMenu( explo.screen, predraw=psr, add_desc=False )
        psr.menu = rpm
        for pc in explo.camp.party:
            rpm.add_item( str( pc ), pc )
        rpm.sort()
        rpm.add_alpha_keys()
        rpm.add_item( "Browse Spells", 1 )
        rpm.add_item( "Exit", None )
        keep_going = True
        self.pc = explo.camp.first_living_pc()

        while keep_going:
            rpm.set_item_by_value( self.pc )
            pc = rpm.query()

            if pc == 1:
                self.browse_spells( explo )
            elif pc:
                self.pc = pc
                self.enter_library( explo )
            else:
                keep_going = False

        del self.charsheets
Beispiel #5
0
    def __call__( self, explo ):
        if explo.camp.day > self.last_updated:
            self.update_wares( explo )
            self.last_updated = explo.camp.day

        self.charsheets = dict()
        for pc in explo.camp.party:
            self.charsheets[ pc ] = charsheet.CharacterSheet( pc , screen=explo.screen, camp=explo.camp )
        psr = charsheet.PartySelectRedrawer( predraw=explo.view, charsheets=self.charsheets, screen=explo.screen, caption="Who needs to buy something?" )

        rpm = charsheet.RightMenu( explo.screen, predraw=psr, add_desc=False )
        psr.menu = rpm
        for pc in explo.camp.party:
            rpm.add_item( str( pc ), pc )
        rpm.sort()
        rpm.add_alpha_keys()
        rpm.add_item( "Exit", None )
        keep_going = True
        self.pc = explo.camp.first_living_pc()

        while keep_going:
            rpm.set_item_by_value( self.pc )
            pc = rpm.query()

            if pc:
                self.pc = pc
                self.enter_shop( explo )
            else:
                keep_going = False

        del self.charsheets
Beispiel #6
0
def browse_pcs(screen):
    ''' Look at the previously created characters.
    Start by loading all characters from disk.
    '''

    file_list = glob.glob(util.user_dir("c_*.sav"))
    pc_list = []
    charsheets = dict()
    for fname in file_list:
        with open(fname, "rb") as f:
            pc = cPickle.load(f)
        if pc:
            pc_list.append(pc)
            charsheets[pc] = charsheet.CharacterSheet(pc, screen=screen)
    if pc_list:
        # adds party members to charsheet
        psr = charsheet.PartySelectRedrawer(charsheets=charsheets,
                                            screen=screen,
                                            caption="Browse Characters")
        rpm = charsheet.RightMenu(screen, predraw=psr, add_desc=False)
        psr.menu = rpm
        for pc in pc_list:
            rpm.add_item(str(pc), pc)
        rpm.sort()
        pc = rpm.query()
Beispiel #7
0
    def resurrection(self, explo):
        charsheets = dict()
        for pc in explo.camp.party:
            charsheets[pc] = charsheet.CharacterSheet(pc,
                                                      screen=explo.screen,
                                                      camp=explo.camp)
        for pc in explo.camp.graveyard:
            charsheets[pc] = charsheet.CharacterSheet(pc,
                                                      screen=explo.screen,
                                                      camp=explo.camp)
        psr = charsheet.PartySelectRedrawer(predraw=explo.view,
                                            charsheets=charsheets,
                                            screen=explo.screen,
                                            caption="Resurrection")

        while True:
            rpm = charsheet.RightMenu(explo.screen,
                                      predraw=psr,
                                      add_desc=False)
            psr.menu = rpm
            for pc in explo.camp.party:
                if not pc.is_alright():
                    rpm.add_item(
                        "{0} - {1}gp".format(str(pc),
                                             self.resurrection_cost(pc)), pc)
            for pc in explo.camp.graveyard:
                rpm.add_item(
                    "{0} - {1}gp".format(str(pc), self.resurrection_cost(pc)),
                    pc)
            rpm.sort()
            rpm.add_alpha_keys()
            rpm.add_item("Exit", None)

            pc = rpm.query()
            if pc:
                if explo.camp.gold >= self.resurrection_cost(pc):
                    pos = self.get_return_pos(explo)
                    explo.camp.gold -= self.resurrection_cost(pc)
                    pc.hp_damage = 0
                    pc.mp_damage = 0
                    del pc.condition[:]
                    pc.holy_signs_used = 0
                    psr.caption = "{0} has returned!".format(str(pc))
                    if len(explo.camp.party
                           ) < 4 and pc in explo.camp.graveyard:
                        explo.camp.graveyard.remove(pc)
                        explo.camp.party.append(pc)
                    if pc in explo.camp.party:
                        pc.place(explo.scene, pos)
                    else:
                        explo.camp.graveyard.remove(pc)
                        pc.save()
                else:
                    psr.caption = "You can't afford it!"
            else:
                break
def load_characters(party,
                    screen,
                    predraw=None,
                    delete_file=True,
                    max_party_size=4):
    file_list = glob.glob(util.user_dir("c_*.sav"))
    pc_list = []
    charsheets = dict()
    for fname in file_list:
        f = open(fname, "rb")
        pc = cPickle.load(f)
        f.close()
        if pc:
            pc_list.append(pc)
            charsheets[pc] = charsheet.CharacterSheet(pc, screen=screen)
    psr = charsheet.PartySelectRedrawer(charsheets=charsheets,
                                        predraw=predraw,
                                        screen=screen,
                                        caption="Select Party Members")
    while len(party) < max_party_size:
        rpm = charsheet.RightMenu(screen, predraw=psr, add_desc=False)
        psr.menu = rpm
        for pc in pc_list:
            rpm.add_item(str(pc), pc)
        rpm.sort()
        rpm.add_alpha_keys()
        pc = rpm.query()

        if pc:
            pc_list.remove(pc)
            party.append(pc)
            if delete_file:
                pc.backup()
                os.remove(util.user_dir("c_{}.sav".format(pc.name)))
        else:
            break
    return party
Beispiel #9
0
    def remove_members( self, camp, screen, predraw ):
        charsheets = dict()
        for pc in camp.party:
            charsheets[ pc ] = charsheet.CharacterSheet( pc , screen=screen )
        psr = charsheet.PartySelectRedrawer( charsheets=charsheets,
         predraw=predraw, screen=screen, caption="Remove Party Members" )
        while camp.party:
            rpm = charsheet.RightMenu( screen, predraw=psr, add_desc=False )
            psr.menu = rpm
            for pc in camp.party:
                rpm.add_item( str( pc ), pc )
            rpm.sort()
            rpm.add_alpha_keys()
            pc = rpm.query()

            if pc:
                camp.party.remove( pc )
                camp.scene.contents.remove( pc )
                if pc.is_alright():
                    pc.save()
                else:
                    camp.graveyard.append( pc )
            else:
                break