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
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
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
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
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
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()
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
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