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 __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 __call__(self, explo): pc = explo.camp.party_spokesperson() myredraw = charsheet.CharacterViewRedrawer( csheet=charsheet.CharacterSheet(pc, screen=explo.screen, camp=explo.camp), screen=explo.screen, predraw=explo.view, caption=self.caption) rpm = charsheet.RightMenu(explo.screen, predraw=myredraw) mydesc = "It will cost {0}gp to stay the night.".format( self.cost_per_night) rpm.add_item("Stay the night.", True, mydesc) rpm.add_item("Not right now.", False, mydesc) rpm.add_alpha_keys() stay = rpm.query() if stay: if explo.camp.gold >= self.cost_per_night: explo.camp.gold -= self.cost_per_night explo.camp.rest() explo.alert( "You rest the night and wake up perfectly refreshed.") else: explo.alert( "You can't afford to stay here! Come back when you've earned some money." )
def equip_or_whatevs( self, it, pc, myredraw ): """Equip, trade, drop, or whatever this item.""" mymenu = charsheet.RightMenu( self.screen, predraw = myredraw ) if it.equipped: mymenu.add_item( "Unequip Item", self.unequip_item ) elif pc.can_equip( it ): mymenu.add_item( "Equip Item", self.equip_item ) if hasattr( it, "use" ): mymenu.add_item( "Use Item", self.use_item ) if hasattr( it, "spell" ) and not self.camp.library_has_spell( it.spell ): mymenu.add_item( "Learn Spell", self.learn_spell_from_item ) mymenu.add_item( "Trade Item", self.trade_item ) mymenu.add_item( "Drop Item", self.drop_item ) mymenu.add_item( "Exit", False ) mymenu.add_alpha_keys() n = mymenu.query() if n: result = n( it, pc, myredraw ) myredraw.csheet.regenerate_avatar() self.view.regenerate_avatars( self.camp.party ) return result else: return True
def learn_spell( self, explo ): ''' Learn spell chosen from menu, adds that spell to your pcs techniques''' keep_going = True myredraw = charsheet.CharacterViewRedrawer( csheet=self.charsheets[ self.pc ], screen=explo.screen, predraw=explo.view, caption="Learn New Spell" ) sl = self.spell_list or explo.camp.known_spells while keep_going: mymenu = charsheet.RightMenu( explo.screen, predraw = myredraw ) for s in sl: if s.can_be_learned( self.pc ) and not any( s.name == t.name for t in self.pc.techniques ): mymenu.add_item( str( s ), s ) mymenu.sort() mymenu.add_alpha_keys() mymenu.add_item( "Exit", False ) myredraw.menu = mymenu mymenu.quick_keys[ pygame.K_LEFT ] = -1 mymenu.quick_keys[ pygame.K_RIGHT ] = 1 it = mymenu.query() if it == -1: n = ( explo.camp.party.index(self.pc) + len( explo.camp.party ) - 1 ) % len( explo.camp.party ) self.pc = explo.camp.party[n] myredraw.csheet = self.charsheets[ self.pc ] elif it == 1: n = ( explo.camp.party.index(self.pc) + 1 ) % len( explo.camp.party ) self.pc = explo.camp.party[n] myredraw.csheet = self.charsheets[ self.pc ] elif it: # A spell was selected. Deal with it. self.pc.techniques.append( it ) else: keep_going = False
def discard_spell( self, explo ): ''' Removes spell/technique from pc from menu choice ''' keep_going = True myredraw = charsheet.CharacterViewRedrawer( csheet=self.charsheets[ self.pc ], screen=explo.screen, predraw=explo.view, caption="Discard Known Spell" ) while keep_going: mymenu = charsheet.RightMenu( explo.screen, predraw = myredraw ) for s in self.pc.techniques: if isinstance( s, spells.Spell ): mymenu.add_item( str( s ), s ) mymenu.sort() mymenu.add_alpha_keys() mymenu.add_item( "Exit", False ) myredraw.menu = mymenu mymenu.quick_keys[ pygame.K_LEFT ] = -1 mymenu.quick_keys[ pygame.K_RIGHT ] = 1 it = mymenu.query() if it == -1: n = ( explo.camp.party.index(self.pc) + len( explo.camp.party ) - 1 ) % len( explo.camp.party ) self.pc = explo.camp.party[n] myredraw.csheet = self.charsheets[ self.pc ] elif it == 1: n = ( explo.camp.party.index(self.pc) + 1 ) % len( explo.camp.party ) self.pc = explo.camp.party[n] myredraw.csheet = self.charsheets[ self.pc ] elif it: # A spell was selected. Deal with it. self.pc.techniques.remove( it ) else: keep_going = False
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_spells( self, explo ): '''Browse shops spells''' keep_going = True myredraw = charsheet.CharacterViewRedrawer( csheet=self.charsheets[ self.pc ], screen=explo.screen, predraw=explo.view, caption="Browse Library" ) while keep_going: mymenu = charsheet.RightMenu( explo.screen, predraw = myredraw ) for s in explo.camp.known_spells: mymenu.add_item( str( s ), s ) mymenu.sort() mymenu.add_alpha_keys() mymenu.add_item( "Exit", False ) myredraw.menu = mymenu mymenu.quick_keys[ pygame.K_LEFT ] = -1 mymenu.quick_keys[ pygame.K_RIGHT ] = 1 it = mymenu.query() if it == -1: n = ( explo.camp.party.index(self.pc) + len( explo.camp.party ) - 1 ) % len( explo.camp.party ) self.pc = explo.camp.party[n] myredraw.csheet = self.charsheets[ self.pc ] elif it == 1: n = ( explo.camp.party.index(self.pc) + 1 ) % len( explo.camp.party ) self.pc = explo.camp.party[n] myredraw.csheet = self.charsheets[ self.pc ] else: keep_going = False
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 do_level_training( self, student ): myredraw = charsheet.CharacterViewRedrawer( csheet=charsheet.CharacterSheet(student, screen=self.screen, camp=self.camp), screen=self.screen, predraw=self.view, caption="Advance Rank" ) mymenu = charsheet.RightMenu( self.screen, predraw = myredraw ) mymenu.add_item( "Advance {0}".format( student.mr_level.name ) , student.mr_level.__class__ ) for j in student.levels: if j is not student.mr_level: mymenu.add_item( "Change to {0}".format( j.name ) , j.__class__ ) jobs = set() for pc in self.camp.party: for j in pc.levels: jobs.add( j.__class__ ) for j in student.levels: jobs.remove( j.__class__ ) for j in jobs: if j.can_take_level( student ): mymenu.add_item( "Learn {0}".format( j.name ) , j ) mymenu.sort() mymenu.add_alpha_keys() mymenu.add_item( "Cancel", False ) myredraw.menu = mymenu it = mymenu.query() if it: improved_stat = student.advance( it ) if improved_stat: self.alert( "{0} gains a rank in {1} \n and +1 {2}.".format( student, it.name, improved_stat ) ) else: self.alert( "{0} gains a rank in {1}.".format( student, it.name ) )
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 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 choose_appearance( screen, redraw, pc ): """Alter the appearance of the character.""" done = False redraw.caption = "Customize your appearance." rpm = charsheet.RightMenu( screen , predraw = redraw ) rpm.add_item( "Change skin color" , 1 ) if pc.species.HAS_HAIR: rpm.add_item( "Change hair" , 2 ) if ( pc.gender != stats.FEMALE ) or isinstance( pc.species, characters.Dwarf ): rpm.add_item( "Change beard" , 3 ) rpm.add_item( "Change hat" , 4 ) rpm.add_item( "Finished" , False ) while not done: l = rpm.query() if l is False: done = True elif l == 1: pc.species.alter_skin_color() redraw.charsheet.regenerate_avatar() elif l == 2: pc.alter_hair() redraw.charsheet.regenerate_avatar() elif l == 3: pc.alter_beard() redraw.charsheet.regenerate_avatar() elif l == 4: alter_hat( pc ) redraw.charsheet.regenerate_avatar()
def choose_level( screen, predraw, pc ): """Roll stats, return the level chosen by the player.""" level = None predraw.caption = "Roll your stats and choose a profession." redraw = ChooseLevelRedrawer( predraw=predraw ) while not level: possible_levels = [] while not possible_levels: pc.roll_stats() possible_levels = get_possible_levels( pc ) rpm = charsheet.RightMenu( screen , predraw = redraw ) redraw.menu = rpm for l in possible_levels: rpm.add_item( l.name, l ) rpm.sort() rpm.add_alpha_keys() rpm.add_item( "Reroll Stats", -1 ) rpm.set_item_by_value( -1 ) l = rpm.query() if l is False: break elif l != -1: level = l return level
def enter_library( self, explo ): '''Find out what the PC wants to do when entering library - shows menu''' keep_going = True myredraw = charsheet.CharacterViewRedrawer( csheet=self.charsheets[ self.pc ], screen=explo.screen, predraw=explo.view, caption=self.caption ) mymenu = charsheet.RightMenu( explo.screen, predraw = myredraw ) mymenu.add_item( "Learn New Spell", self.learn_spell ) mymenu.add_item( "Discard Known Spell", self.discard_spell ) mymenu.add_item( "Exit", False ) mymenu.add_alpha_keys() myredraw.menu = mymenu mymenu.quick_keys[ pygame.K_LEFT ] = -1 mymenu.quick_keys[ pygame.K_RIGHT ] = 1 while keep_going: it = mymenu.query() if it == -1: n = ( explo.camp.party.index(self.pc) + len( explo.camp.party ) - 1 ) % len( explo.camp.party ) self.pc = explo.camp.party[n] myredraw.csheet = self.charsheets[ self.pc ] elif it == 1: n = ( explo.camp.party.index(self.pc) + 1 ) % len( explo.camp.party ) self.pc = explo.camp.party[n] myredraw.csheet = self.charsheets[ self.pc ] elif it: # A method was selected. Deal with it. it( explo ) myredraw.csheet = self.charsheets[ self.pc ] else: keep_going = False
def enter_shop( self, explo ): '''Find out what the PC wants to do.''' keep_going = True myredraw = charsheet.CharacterViewRedrawer( csheet=self.charsheets[self.pc], screen=explo.screen, predraw=explo.view, caption=self.caption ) mymenu = charsheet.RightMenu( explo.screen, predraw = myredraw ) mymenu.add_item( "Buy Items", self.buy_items ) mymenu.add_item( "Sell Items", self.sell_items ) mymenu.add_item( "Identify Items", self.identify_items ) mymenu.add_item( "Exit", False ) mymenu.add_alpha_keys() myredraw.menu = mymenu mymenu.quick_keys[ pygame.K_LEFT ] = -1 mymenu.quick_keys[ pygame.K_RIGHT ] = 1 while keep_going: it = mymenu.query() if it == -1: n = ( explo.camp.party.index(self.pc) + len( explo.camp.party ) - 1 ) % len( explo.camp.party ) self.pc = explo.camp.party[n] myredraw.csheet = self.charsheets[self.pc] elif it == 1: n = ( explo.camp.party.index(self.pc) + 1 ) % len( explo.camp.party ) self.pc = explo.camp.party[n] myredraw.csheet = self.charsheets[self.pc] elif it: # A method was selected. Deal with it. it( explo ) myredraw.csheet = self.charsheets[self.pc] else: keep_going = False
def choose_gender( screen, redraw ): """Return the gender chosen by the player.""" rpm = charsheet.RightMenu( screen , predraw = redraw ) for g in range( 3 ): rpm.add_item( stats.GENDER[g], g, "Gender has no effect on a character's abilities." ) rpm.add_alpha_keys() redraw.caption = "Select this character's gender." return rpm.query()
def sell_items(self, explo): keep_going = True myredraw = charsheet.CharacterViewRedrawer( csheet=self.charsheets[self.pc], screen=explo.screen, predraw=explo.view, caption="Sell Items") last_item = 1 while keep_going: mymenu = charsheet.RightMenu(explo.screen, predraw=myredraw) self.pc.contents.tidy() for s in self.pc.contents: if s.equipped: mymenu.add_item( "*{0} ({1}gp)".format(s, self.sale_price(s)), s) elif s.slot != items.NOSLOT and not self.pc.can_equip(s): mymenu.add_item( "#{0} ({1}gp)".format(s, self.sale_price(s)), s) else: mymenu.add_item( "{0} ({1}gp)".format(s, self.sale_price(s)), s) mymenu.sort() mymenu.add_alpha_keys() mymenu.add_item("Exit", False) mymenu.set_item_by_position(last_item) myredraw.menu = mymenu mymenu.quick_keys[pygame.K_LEFT] = -1 mymenu.quick_keys[pygame.K_RIGHT] = 1 it = mymenu.query() last_item = mymenu.selected_item if it is -1: n = (explo.camp.party.index(self.pc) + len(explo.camp.party) - 1) % len(explo.camp.party) self.pc = explo.camp.party[n] myredraw.csheet = self.charsheets[self.pc] elif it is 1: n = (explo.camp.party.index(self.pc) + 1) % len( explo.camp.party) self.pc = explo.camp.party[n] myredraw.csheet = self.charsheets[self.pc] elif it: # An item was selected. Deal with it. self.pc.contents.remove(it) explo.camp.gold += self.sale_price(it) self.improve_friendliness(explo, it, modifier=-20) if it.enhancement: it.identified = True self.wares.append(it) myredraw.caption = "You have sold {0}.".format(it) if it.equipped: myredraw.csheet.regenerate_avatar() explo.view.regenerate_avatars(explo.camp.party) else: keep_going = False
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 final_looks(screen, redraw, pc): redraw.caption = "Final Looks" rpm = charsheet.RightMenu(screen, predraw=redraw) rpm.add_item("Change Gender", 1) rpm.add_item("Change Race/Class", 2) rpm.add_item("Change Appearance", 4) rpm.add_item("I'm Done", 0) return rpm.query()
def choose_species( screen, predraw ): """Return the species chosen by the player.""" redraw = ChooseSpeciesRedrawer( predraw=predraw ) rpm = charsheet.RightMenu( screen , predraw = redraw ) redraw.menu = rpm for s in characters.PC_SPECIES: rpm.add_item( s.name, s ) rpm.sort() rpm.add_alpha_keys() redraw.caption = "Select this character's species." return rpm.query()
def identify_items(self, explo): keep_going = True myredraw = charsheet.CharacterViewRedrawer( csheet=self.charsheets[self.pc], screen=explo.screen, predraw=explo.view, caption="Identify Items") while keep_going: mymenu = charsheet.RightMenu(explo.screen, predraw=myredraw) for s in self.pc.contents: if not s.identified: if s.equipped: mymenu.add_item( "*{0} ({1}gp)".format(s, self.IDENTIFY_PRICE), s) elif s.slot != items.NOSLOT and not self.pc.can_equip(s): mymenu.add_item( "#{0} ({1}gp)".format(s, self.IDENTIFY_PRICE), s) else: mymenu.add_item( "{0} ({1}gp)".format(s, self.IDENTIFY_PRICE), s) mymenu.sort() mymenu.add_alpha_keys() mymenu.add_item("Exit", False) myredraw.menu = mymenu mymenu.quick_keys[pygame.K_LEFT] = -1 mymenu.quick_keys[pygame.K_RIGHT] = 1 it = mymenu.query() if it is -1: n = (explo.camp.party.index(self.pc) + len(explo.camp.party) - 1) % len(explo.camp.party) self.pc = explo.camp.party[n] myredraw.csheet = self.charsheets[self.pc] elif it is 1: n = (explo.camp.party.index(self.pc) + 1) % len( explo.camp.party) self.pc = explo.camp.party[n] myredraw.csheet = self.charsheets[self.pc] elif it: # An item was selected. Deal with it. if explo.camp.gold >= self.IDENTIFY_PRICE: it.identified = True explo.camp.gold -= self.IDENTIFY_PRICE myredraw.caption = "It's a {0}!".format(it) else: myredraw.caption = "You can't afford it." else: keep_going = False
def choose_species(screen, predraw): """Return the species chosen by the player.""" redraw = ChooseSpeciesRedrawer(predraw=predraw) redraw.caption = "Select Species" rpm = charsheet.RightMenu(screen, predraw=redraw) redraw.menu = rpm for s in characters.PC_SPECIES: rpm.add_item(s.name, s) rpm.sort() rpm.add_alpha_keys() rpm.add_item("Back", 0) rpm.add_item("Cancel Creation", False) query = rpm.query() return query
def choose_job( self, explo ): ''' Choose job. Simple check for your level / job level ''' myredraw = charsheet.CharacterViewRedrawer( csheet=self.charsheets[ self.pc ], screen=explo.screen, predraw=explo.view, caption="What job will {0} learn?".format(self.pc) ) mymenu = charsheet.RightMenu( explo.screen, predraw = myredraw, add_desc=False ) for j in self.jobs: if j.can_take_level( self.pc ): # if you can even take the job because of level mymenu.add_item( j.name, j ) mymenu.sort() mymenu.add_alpha_keys() mymenu.add_item( "Exit", False ) myredraw.menu = mymenu it = mymenu.query() if it: self.pc.advance( it )
def view_party( self, n, can_switch=True ): if n >= len( self.camp.party ): n = 0 pc = self.camp.party[ n ] keep_going = True myredraw = charsheet.CharacterViewRedrawer( csheet=charsheet.CharacterSheet(pc, screen=self.screen, camp=self.camp), screen=self.screen, predraw=self.view, caption="View Party" ) while keep_going: mymenu = charsheet.RightMenu( self.screen, predraw = myredraw ) pc.contents.tidy() for i in pc.contents: if i.equipped: mymenu.add_item( "*" + str( i ) , i ) elif i.slot != items.NOSLOT and not pc.can_equip( i ): mymenu.add_item( "#" + str( i ) , i ) else: mymenu.add_item( str( i ) , i ) if pc.xp > pc.xp_for_next_level(): mymenu.add_item( "!!!Advance Rank!!!", 999 ) mymenu.sort() mymenu.add_alpha_keys() mymenu.add_item( "Exit", False ) myredraw.menu = mymenu if can_switch: mymenu.quick_keys[ pygame.K_LEFT ] = -1 mymenu.quick_keys[ pygame.K_RIGHT ] = 1 it = mymenu.query() if it is -1: n = ( n + len( self.camp.party ) - 1 ) % len( self.camp.party ) pc = self.camp.party[n] myredraw.csheet = charsheet.CharacterSheet(pc, screen=self.screen, camp=self.camp) elif it is 1: n = ( n + 1 ) % len( self.camp.party ) pc = self.camp.party[n] myredraw.csheet = charsheet.CharacterSheet(pc, screen=self.screen, camp=self.camp) elif it is 999: self.do_level_training( pc ) keep_going = False elif it: # An item was selected. Deal with it. if not self.equip_or_whatevs( it, pc, myredraw ): keep_going = False else: keep_going = False
def trade_item( self, it, pc, redraw ): """Trade this item to another character.""" mymenu = charsheet.RightMenu( self.screen, predraw = redraw ) for opc in self.camp.party: if opc != pc and opc.is_alright(): mymenu.add_item( str( opc ) , opc ) mymenu.add_item( "Cancel" , False ) mymenu.add_alpha_keys() opc = mymenu.query() if opc: pc.contents.unequip( it ) if not it.equipped: if opc.can_take_item( it ): pc.contents.remove( it ) opc.contents.append( it ) else: self.alert( "{0} can't carry any more.".format( str( opc ) ) ) return True
def make_wares_menu( self, explo, myredraw ): '''Returns menu for display when making wares''' mymenu = charsheet.RightMenu( explo.screen, predraw = myredraw ) for s in self.wares: sname = str( s ) scost = str( self.calc_purchase_price( explo, s ) ) if hasattr( s, "spell" ) and not any( s.spell.name == t.name for t in explo.camp.known_spells ): sname = "(New) {0}".format( sname ) if s.slot != items.NOSLOT and not self.pc.can_equip(s): mymenu.add_item( "#{} ({}gp)".format( sname, scost ), s ) else: mymenu.add_item( "{} ({}gp)".format( sname, scost ), s ) mymenu.sort() mymenu.add_alpha_keys() mymenu.add_item( "Exit", False ) myredraw.menu = mymenu mymenu.quick_keys[ pygame.K_LEFT ] = -1 mymenu.quick_keys[ pygame.K_RIGHT ] = 1 return mymenu
def __call__(self, explo): pc = explo.camp.party_spokesperson() myredraw = charsheet.CharacterViewRedrawer( csheet=charsheet.CharacterSheet(pc, screen=explo.screen, camp=explo.camp), screen=explo.screen, predraw=explo.view, caption=self.caption) while True: rpm = charsheet.RightMenu(explo.screen, predraw=myredraw) if any(not pc.is_alright() for pc in explo.camp.party) or explo.camp.graveyard: rpm.add_item("Resurrection", self.resurrection, self.desc) if any((pc.is_alright() and pc.stat_damage) for pc in explo.camp.party): rpm.add_item("Restoration", self.restoration, self.desc) if any( (pc.is_alright() and pc.condition.has_enchantment_of_type(enchantments.POISON)) for pc in explo.camp.party): rpm.add_item("Cure Poison", self.cure_poison, self.desc) if any( (pc.is_alright() and pc.condition.has_enchantment_of_type(enchantments.CURSE)) for pc in explo.camp.party): rpm.add_item("Remove Curse", self.remove_curse, self.desc) rpm.add_item("Exit {0}".format(self.caption), False, self.desc) rpm.add_alpha_keys() it = rpm.query() if it: it(explo) else: break
def open_menu( self, camp, screen, predraw=None ): # Save the most recently used adventurer's guild. If all characters die, # this is where the game restarts. camp.mru_advguild = (self.scene,self) mypartysheet = charsheet.PartySheet( camp.party , screen=screen, camp=camp ) myredraw = charsheet.CharacterViewRedrawer( csheet=mypartysheet, screen=screen, predraw=predraw, caption=self.caption ) while True: rpm = charsheet.RightMenu( screen, predraw=myredraw ) rpm.add_item( "Add Members", self.add_members ) rpm.add_item( "Remove Members", self.remove_members ) rpm.add_item( "Exit {0}".format(self.caption), False, self.desc ) rpm.add_alpha_keys() it = rpm.query() if it: it( camp, screen, predraw ) mypartysheet.regenerate_avatars() else: break camp.save( screen )
def reorder_party( self ): new_party_order = list() psheet = charsheet.PartySheet( new_party_order, screen=self.screen, camp=self.camp ) myredraw = charsheet.CharacterViewRedrawer( csheet=psheet, screen=self.screen, predraw=self.view, caption="Reorder Party" ) while self.camp.party: mymenu = charsheet.RightMenu( self.screen, predraw = myredraw ) for pc in self.camp.party: mymenu.add_item( str( pc ), pc ) mymenu.add_alpha_keys() mymenu.add_item( "Exit", False ) myredraw.menu = mymenu it = mymenu.query() if it: self.camp.party.remove( it ) new_party_order.append( it ) psheet.regenerate_avatars() else: break if self.camp.party: new_party_order += self.camp.party self.camp.party = new_party_order