def test_toofew_points(self): """confirm validation of under-allocated traits""" # fails before any allocations happen is_valid, errmsg = archetypes.validate_primary_traits(self.char1.traits) self.assertFalse(is_valid) self.assertEqual(errmsg, 'Not enough trait points allocated.') # no less than 30 allowed self.char1.traits.INT.base += 6 is_valid, errmsg = archetypes.validate_primary_traits(self.char1.traits) self.assertFalse(is_valid) self.assertEqual(errmsg, 'Not enough trait points allocated.')
def test_toomany_points(self): """confirm validation of over-allocated traits""" # perfect char not allowed for t in archetypes.PRIMARY_TRAITS: self.char1.traits[t].base = 10 is_valid, errmsg = archetypes.validate_primary_traits(self.char1.traits) self.assertFalse(is_valid) self.assertEqual(errmsg, 'Too many trait points allocated.') # no more than 30 allowed archetypes.apply_archetype(self.char1, 'warrior', reset=True) self.char1.traits.INT.base += 9 is_valid, errmsg = archetypes.validate_primary_traits(self.char1.traits) self.assertFalse(is_valid) self.assertEqual(errmsg, 'Too many trait points allocated.')
def test_valid_allocations(self): """confirm valid trait allocations""" # warriors have 8 points to allocate self.char1.traits.STR.base += 2 self.char1.traits.PER.base += 1 self.char1.traits.INT.base += 1 self.char1.traits.DEX.base += 1 self.char1.traits.CHA.base += 1 self.char1.traits.VIT.base += 2 is_valid, errmsg = archetypes.validate_primary_traits(self.char1.traits) self.assertEqual(sum(self.char1.traits[t].actual for t in archetypes.PRIMARY_TRAITS), 30) self.assertTrue(is_valid) # smartest warrior ever archetypes.apply_archetype(self.char1, 'warrior', reset=True) self.char1.traits.INT.base += 8 is_valid, errmsg = archetypes.validate_primary_traits(self.char1.traits) self.assertTrue(is_valid)
def test_valid_allocations(self): archetypes.apply_archetype(self.char1, 'soldier', reset=True) self.assertTrue(archetypes.validate_primary_traits(self.char1.traits))
def func(self): "create the new character" player = self.player session = self.session if not self.args: self.msg("Usage: @charcreate <charname>") return key = self.args.strip() charmax = _MAX_NR_CHARACTERS if _MULTISESSION_MODE > 1 else 1 if not player.is_superuser and \ (player.db._playable_characters and len(player.db._playable_characters) >= charmax): self.msg( "You may only create a maximum of {} characters.".format( charmax)) return # create the character from evennia.objects.models import ObjectDB start_location = ObjectDB.objects.get_id(settings.START_LOCATION) default_home = ObjectDB.objects.get_id(settings.DEFAULT_HOME) typeclass = settings.BASE_CHARACTER_TYPECLASS permissions = settings.PERMISSION_PLAYER_DEFAULT # check whether a character already exists new_character = None candidates = search.objects(key, typeclass='typeclasses.characters.Character') if candidates: for c in candidates: if c.access(player, 'puppet'): new_character = c break startnode = "menunode_welcome_archetypes" if not new_character: new_character = create.create_object(typeclass, key=key, location=None, home=default_home, permissions=permissions) # only allow creator (and immortals) to puppet this char new_character.locks.add( ("puppet:id({}) or pid({}) " "or perm(Immortals) or pperm(Immortals)").format( new_character.id, player.id )) player.db._playable_characters.append(new_character) else: if new_character.db.chargen_complete: self.msg(("{name} has already completed character " "generation. Use @ic {name} to puppet.").format( name=new_character.key if ' ' not in new_character.key else '"{}"'.format(new_character.key))) return if new_character.db.archetype: startnode = "menunode_allocate_traits" if (new_character.db.focus or (not new_character.db.focus and validate_primary_traits(new_character.traits)[0])): startnode = "menunode_races" if new_character.db.race: startnode = "menunode_allocate_mana" if (new_character.traits.BM.base + new_character.traits.WM.base == new_character.traits.MAG.actual and len(new_character.skills.all) > 0): startnode = "menunode_allocate_skills" if ('escape' in new_character.skills.all and not hasattr(new_character.skills.escape, 'minus')): startnode = "menunode_equipment_cats" session.new_char = new_character def finish_char_callback(session, menu): char = session.new_char if char.db.chargen_complete: char.location = start_location player.puppet_object(session, char) EvMenu(session, "world.chargen", startnode=startnode, allow_quit=False, cmd_on_quit=finish_char_callback)
def func(self): "create the new character" player = self.player session = self.session if not self.args: self.msg("Usage: @charcreate <charname>") return key = self.args.strip() charmax = _MAX_NR_CHARACTERS if _MULTISESSION_MODE > 1 else 1 if not player.is_superuser and \ (player.db._playable_characters and len(player.db._playable_characters) >= charmax): self.msg("You may only create a maximum of {} characters.".format( charmax)) return # create the character from evennia.objects.models import ObjectDB start_location = ObjectDB.objects.get_id(settings.START_LOCATION) default_home = ObjectDB.objects.get_id(settings.DEFAULT_HOME) typeclass = settings.BASE_CHARACTER_TYPECLASS permissions = settings.PERMISSION_PLAYER_DEFAULT # check whether a character already exists new_character = None candidates = search.objects( key, typeclass='typeclasses.characters.Character') if candidates: for c in candidates: if c.access(player, 'puppet'): new_character = c break startnode = "menunode_welcome_archetypes" if not new_character: new_character = create.create_object(typeclass, key=key, location=None, home=default_home, permissions=permissions) # only allow creator (and immortals) to puppet this char new_character.locks.add( ("puppet:id({}) or pid({}) " "or perm(Immortals) or pperm(Immortals)").format( new_character.id, player.id)) player.db._playable_characters.append(new_character) else: if new_character.db.chargen_complete: self.msg( ("{name} has already completed character " "generation. Use @ic {name} to puppet.").format( name=new_character.key if ' ' not in new_character. key else '"{}"'.format(new_character.key))) return if new_character.db.archetype: startnode = "menunode_allocate_traits" if (new_character.db.focus or (not new_character.db.focus and validate_primary_traits(new_character.traits)[0])): startnode = "menunode_races" if new_character.db.race: startnode = "menunode_allocate_mana" if (new_character.traits.BM.base + new_character.traits.WM.base == new_character.traits.MAG.actual and len(new_character.skills.all) > 0): startnode = "menunode_allocate_skills" if ('escape' in new_character.skills.all and not hasattr( new_character.skills.escape, 'minus')): startnode = "menunode_equipment_cats" session.new_char = new_character def finish_char_callback(session, menu): char = session.new_char if char.db.chargen_complete: char.location = start_location player.puppet_object(session, char) EvMenu(session, "world.chargen", startnode=startnode, cmd_on_exit=finish_char_callback)