mirror of
https://github.com/evennia/evennia.git
synced 2026-03-27 02:06:32 +01:00
Refactor evadventure test structure
This commit is contained in:
parent
f4c3db1151
commit
6e8e3963dd
6 changed files with 259 additions and 215 deletions
|
|
@ -35,6 +35,7 @@ class CombatFailure(RuntimeError):
|
|||
Some failure during actions.
|
||||
"""
|
||||
|
||||
|
||||
class CombatAction:
|
||||
"""
|
||||
This is the base of a combat-action, like 'attack' or defend.
|
||||
|
|
|
|||
0
evennia/contrib/tutorials/evadventure/tests/__init__.py
Normal file
0
evennia/contrib/tutorials/evadventure/tests/__init__.py
Normal file
38
evennia/contrib/tutorials/evadventure/tests/mixins.py
Normal file
38
evennia/contrib/tutorials/evadventure/tests/mixins.py
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
"""
|
||||
Helpers for testing evadventure modules.
|
||||
|
||||
"""
|
||||
|
||||
from evennia.utils import create
|
||||
from ..characters import EvAdventureCharacter
|
||||
from ..objects import EvAdventureObject
|
||||
from .. import enums
|
||||
|
||||
|
||||
class EvAdventureMixin:
|
||||
"""
|
||||
Provides a set of pre-made characters.
|
||||
|
||||
"""
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.character = create.create_object(EvAdventureCharacter, key="testchar")
|
||||
self.helmet = create.create_object(
|
||||
EvAdventureObject, key="helmet",
|
||||
attributes=[("inventory_use_slot", enums.WieldLocation.HEAD),
|
||||
("armor", 1)])
|
||||
self.shield = create.create_object(
|
||||
EvAdventureObject, key="shield",
|
||||
attributes=[("inventory_use_slot", enums.WieldLocation.SHIELD_HAND),
|
||||
("armor", 1)])
|
||||
self.armor = create.create_object(
|
||||
EvAdventureObject, key="armor",
|
||||
attributes=[("inventory_use_slot", enums.WieldLocation.BODY),
|
||||
("armor", 11)])
|
||||
self.weapon = create.create_object(
|
||||
EvAdventureObject, key="weapon",
|
||||
attributes=[("inventory_use_slot", enums.WieldLocation.WEAPON_HAND)])
|
||||
self.big_weapon = create.create_object(
|
||||
EvAdventureObject, key="big_weapon",
|
||||
attributes=[("inventory_use_slot", enums.WieldLocation.TWO_HANDS)])
|
||||
self.item = create.create_object(EvAdventureObject, key="backpack item")
|
||||
57
evennia/contrib/tutorials/evadventure/tests/test_combat.py
Normal file
57
evennia/contrib/tutorials/evadventure/tests/test_combat.py
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
"""
|
||||
Test EvAdventure combat.
|
||||
|
||||
"""
|
||||
|
||||
from unittest.mock import patch, MagicMock
|
||||
from evennia.utils.test_resources import BaseEvenniaTest
|
||||
from evennia.utils import create
|
||||
from .mixins import EvAdventureMixin
|
||||
from .. import combat_turnbased
|
||||
from .. charactersd import EvAdventureCharacter
|
||||
|
||||
|
||||
class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest):
|
||||
"""
|
||||
Test the turn-based combat-handler implementation.
|
||||
|
||||
"""
|
||||
@patch("evennia.contrib.tutorials.evadventure.combat_turnbased"
|
||||
".EvAdventureCombatHandler.interval", new=-1)
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.combathandler = combat_turnbased.EvAdventureCombatHandler.objects.create()
|
||||
self.combatant = self.character
|
||||
self.target = create.create_object(EvAdventureCharacter, key="testchar2")
|
||||
self.combathandler.add_combatant(self.combatant)
|
||||
self.combathandler.add_combatant(self.target)
|
||||
|
||||
def test_remove_combatant(self):
|
||||
self.combathandler.remove_combatant(self.character)
|
||||
|
||||
def test_start_turn(self):
|
||||
self.combathandler._start_turn()
|
||||
self.assertEqual(self.combathandler.turn, 1)
|
||||
self.combathandler._start_turn()
|
||||
self.assertEqual(self.combathandler.turn, 2)
|
||||
|
||||
def test_end_of_turn__empty(self):
|
||||
self.combathandler._end_turn()
|
||||
|
||||
def test_register_and_run_action(self):
|
||||
action = combat_turnbased.CombatActionAttack
|
||||
action.use = MagicMock()
|
||||
|
||||
self.combathandler.register_action(action, self.combatant)
|
||||
self.combathandler._end_turn()
|
||||
action.use.assert_called_once()
|
||||
|
||||
@patch("evennia.contrib.tutorials.evadventure.combat_turnbased.rules.randint")
|
||||
def test_attack(self, mock_randint):
|
||||
mock_randint = 8
|
||||
self.combathandler.register_action(
|
||||
combat_turnbased.CombatActionAttack,
|
||||
self.combatant, self.target)
|
||||
self.combathandler._end_turn()
|
||||
|
||||
|
||||
|
|
@ -1,223 +1,17 @@
|
|||
"""
|
||||
Tests for EvAdventure.
|
||||
Test the rules and chargen.
|
||||
|
||||
"""
|
||||
|
||||
from parameterized import parameterized
|
||||
from unittest.mock import patch, MagicMock, call
|
||||
from evennia.utils import create
|
||||
from parameterized import parameterized
|
||||
from evennia.utils.test_resources import BaseEvenniaTest
|
||||
from .characters import EvAdventureCharacter, EquipmentHandler, EquipmentError
|
||||
from .objects import EvAdventureObject
|
||||
from . import enums
|
||||
from . import combat_turnbased
|
||||
from . import rules
|
||||
from . import random_tables
|
||||
|
||||
|
||||
class EvAdventureMixin:
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.character = create.create_object(EvAdventureCharacter, key="testchar")
|
||||
self.helmet = create.create_object(
|
||||
EvAdventureObject, key="helmet",
|
||||
attributes=[("inventory_use_slot", enums.WieldLocation.HEAD),
|
||||
("armor", 1)])
|
||||
self.shield = create.create_object(
|
||||
EvAdventureObject, key="shield",
|
||||
attributes=[("inventory_use_slot", enums.WieldLocation.SHIELD_HAND),
|
||||
("armor", 1)])
|
||||
self.armor = create.create_object(
|
||||
EvAdventureObject, key="armor",
|
||||
attributes=[("inventory_use_slot", enums.WieldLocation.BODY),
|
||||
("armor", 11)])
|
||||
self.weapon = create.create_object(
|
||||
EvAdventureObject, key="weapon",
|
||||
attributes=[("inventory_use_slot", enums.WieldLocation.WEAPON_HAND)])
|
||||
self.big_weapon = create.create_object(
|
||||
EvAdventureObject, key="big_weapon",
|
||||
attributes=[("inventory_use_slot", enums.WieldLocation.TWO_HANDS)])
|
||||
self.item = create.create_object(EvAdventureObject, key="backpack item")
|
||||
|
||||
class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest):
|
||||
"""
|
||||
Test the equipment mechanism.
|
||||
|
||||
"""
|
||||
def _get_empty_slots(self):
|
||||
return {
|
||||
enums.WieldLocation.BACKPACK: [],
|
||||
enums.WieldLocation.WEAPON_HAND: None,
|
||||
enums.WieldLocation.SHIELD_HAND: None,
|
||||
enums.WieldLocation.TWO_HANDS: None,
|
||||
enums.WieldLocation.BODY: None,
|
||||
enums.WieldLocation.HEAD: None,
|
||||
}
|
||||
|
||||
def test_equipmenthandler_max_slots(self):
|
||||
self.assertEqual(self.character.equipment.max_slots, 11)
|
||||
|
||||
@parameterized.expand([
|
||||
# size, pass_validation?
|
||||
(1, True),
|
||||
(2, True),
|
||||
(11, True),
|
||||
(12, False),
|
||||
(20, False),
|
||||
(25, False)
|
||||
])
|
||||
def test_validate_slot_usage(self, size, is_ok):
|
||||
obj = MagicMock()
|
||||
obj.size = size
|
||||
|
||||
if is_ok:
|
||||
self.assertTrue(self.character.equipment.validate_slot_usage(obj))
|
||||
else:
|
||||
with self.assertRaises(EquipmentError):
|
||||
self.character.equipment.validate_slot_usage(obj)
|
||||
|
||||
@parameterized.expand([
|
||||
# item, where
|
||||
("helmet", enums.WieldLocation.HEAD),
|
||||
("shield", enums.WieldLocation.SHIELD_HAND),
|
||||
("armor", enums.WieldLocation.BODY),
|
||||
("weapon", enums.WieldLocation.WEAPON_HAND),
|
||||
("big_weapon", enums.WieldLocation.TWO_HANDS),
|
||||
("item", enums.WieldLocation.BACKPACK),
|
||||
])
|
||||
def test_use(self, itemname, where):
|
||||
self.assertEqual(self.character.equipment.slots, self._get_empty_slots())
|
||||
|
||||
obj = getattr(self, itemname)
|
||||
self.character.equipment.use(obj)
|
||||
# check that item ended up in the right place
|
||||
if where is enums.WieldLocation.BACKPACK:
|
||||
self.assertTrue(obj in self.character.equipment.slots[where])
|
||||
else:
|
||||
self.assertEqual(self.character.equipment.slots[where], obj)
|
||||
|
||||
def test_store(self):
|
||||
self.character.equipment.store(self.weapon)
|
||||
self.assertEqual(self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], None)
|
||||
self.assertTrue(
|
||||
self.weapon in self.character.equipment.slots[enums.WieldLocation.BACKPACK])
|
||||
|
||||
def test_two_handed_exclusive(self):
|
||||
"""Two-handed weapons can't be used together with weapon+shield"""
|
||||
self.character.equipment.use(self.big_weapon)
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], self.big_weapon)
|
||||
# equipping sword or shield removes two-hander
|
||||
self.character.equipment.use(self.shield)
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield)
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], None)
|
||||
self.character.equipment.use(self.weapon)
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], self.weapon)
|
||||
|
||||
# the two-hander removes the two weapons
|
||||
self.character.equipment.use(self.big_weapon)
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], self.big_weapon)
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None)
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], None)
|
||||
|
||||
def test_remove__with_obj(self):
|
||||
self.character.equipment.use(self.shield)
|
||||
self.character.equipment.use(self.item)
|
||||
self.character.equipment.store(self.weapon)
|
||||
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield)
|
||||
self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK],
|
||||
[self.item, self.weapon])
|
||||
|
||||
self.assertEqual(self.character.equipment.remove(self.shield), [self.shield])
|
||||
self.assertEqual(self.character.equipment.remove(self.item), [self.item])
|
||||
|
||||
self.assertEqual(self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None)
|
||||
self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK],
|
||||
[self.weapon])
|
||||
|
||||
def test_remove__with_slot(self):
|
||||
self.character.equipment.use(self.shield)
|
||||
self.character.equipment.use(self.item)
|
||||
self.character.equipment.store(self.helmet)
|
||||
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield)
|
||||
self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK],
|
||||
[self.item, self.helmet])
|
||||
|
||||
self.assertEqual(self.character.equipment.remove(enums.WieldLocation.SHIELD_HAND),
|
||||
[self.shield])
|
||||
self.assertEqual(self.character.equipment.remove(enums.WieldLocation.BACKPACK),
|
||||
[self.item, self.helmet])
|
||||
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None)
|
||||
self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], [])
|
||||
|
||||
def test_properties(self):
|
||||
self.character.equipment.use(self.armor)
|
||||
self.assertEqual(self.character.equipment.armor, 11)
|
||||
self.character.equipment.use(self.shield)
|
||||
self.assertEqual(self.character.equipment.armor, 12)
|
||||
self.character.equipment.use(self.helmet)
|
||||
self.assertEqual(self.character.equipment.armor, 13)
|
||||
|
||||
self.character.equipment.use(self.weapon)
|
||||
self.assertEqual(self.character.equipment.weapon, self.weapon)
|
||||
self.character.equipment.use(self.big_weapon)
|
||||
self.assertEqual(self.character.equipment.weapon, self.big_weapon)
|
||||
|
||||
|
||||
class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest):
|
||||
"""
|
||||
Test the turn-based combat-handler implementation.
|
||||
|
||||
"""
|
||||
@patch("evennia.contrib.tutorials.evadventure.combat_turnbased"
|
||||
".EvAdventureCombatHandler.interval", new=-1)
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.combathandler = combat_turnbased.EvAdventureCombatHandler.objects.create()
|
||||
self.combatant = self.character
|
||||
self.target = create.create_object(EvAdventureCharacter, key="testchar2")
|
||||
self.combathandler.add_combatant(self.combatant)
|
||||
self.combathandler.add_combatant(self.target)
|
||||
|
||||
def test_remove_combatant(self):
|
||||
self.combathandler.remove_combatant(self.character)
|
||||
|
||||
def test_start_turn(self):
|
||||
self.combathandler._start_turn()
|
||||
self.assertEqual(self.combathandler.turn, 1)
|
||||
self.combathandler._start_turn()
|
||||
self.assertEqual(self.combathandler.turn, 2)
|
||||
|
||||
def test_end_of_turn__empty(self):
|
||||
self.combathandler._end_turn()
|
||||
|
||||
def test_register_and_run_action(self):
|
||||
action = combat_turnbased.CombatActionAttack
|
||||
action.use = MagicMock()
|
||||
|
||||
self.combathandler.register_action(action, self.combatant)
|
||||
self.combathandler._end_turn()
|
||||
action.use.assert_called_once()
|
||||
|
||||
@patch("evennia.contrib.tutorials.evadventure.combat_turnbased.rules.randint")
|
||||
def test_attack(self, mock_randint):
|
||||
mock_randint = 8
|
||||
self.combathandler.register_action(
|
||||
combat_turnbased.CombatActionAttack,
|
||||
self.combatant, self.target)
|
||||
self.combathandler._end_turn()
|
||||
from .mixins import EvAdventureMixin
|
||||
from .. import rules
|
||||
from .. import enums
|
||||
from .. import random_tables
|
||||
from .. import characters
|
||||
|
||||
|
||||
class EvAdventureRollEngineTest(BaseEvenniaTest):
|
||||
|
|
@ -433,7 +227,7 @@ class EvAdventureRollEngineTest(BaseEvenniaTest):
|
|||
|
||||
class EvAdventureCharacterGenerationTest(BaseEvenniaTest):
|
||||
"""
|
||||
Test the Character generator tracing object in the rule engine.
|
||||
Test the Character generator in the rule engine.
|
||||
|
||||
"""
|
||||
|
||||
|
|
@ -463,7 +257,6 @@ class EvAdventureCharacterGenerationTest(BaseEvenniaTest):
|
|||
"Has been exiled in the past. Favors neutrality."
|
||||
)
|
||||
|
||||
|
||||
@parameterized.expand([
|
||||
# source, target, value, new_source_val, new_target_val
|
||||
(enums.Ability.CON, enums.Ability.STR, 1, 1, 3),
|
||||
|
|
@ -511,3 +304,140 @@ class EvAdventureCharacterGenerationTest(BaseEvenniaTest):
|
|||
self.assertEqual(character.armor, "gambeson")
|
||||
|
||||
character.equipment.store.assert_called()
|
||||
|
||||
|
||||
class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest):
|
||||
"""
|
||||
Test the equipment mechanism.
|
||||
|
||||
"""
|
||||
def _get_empty_slots(self):
|
||||
return {
|
||||
enums.WieldLocation.BACKPACK: [],
|
||||
enums.WieldLocation.WEAPON_HAND: None,
|
||||
enums.WieldLocation.SHIELD_HAND: None,
|
||||
enums.WieldLocation.TWO_HANDS: None,
|
||||
enums.WieldLocation.BODY: None,
|
||||
enums.WieldLocation.HEAD: None,
|
||||
}
|
||||
|
||||
def test_equipmenthandler_max_slots(self):
|
||||
self.assertEqual(self.character.equipment.max_slots, 11)
|
||||
|
||||
@parameterized.expand([
|
||||
# size, pass_validation?
|
||||
(1, True),
|
||||
(2, True),
|
||||
(11, True),
|
||||
(12, False),
|
||||
(20, False),
|
||||
(25, False)
|
||||
])
|
||||
def test_validate_slot_usage(self, size, is_ok):
|
||||
obj = MagicMock()
|
||||
obj.size = size
|
||||
|
||||
if is_ok:
|
||||
self.assertTrue(self.character.equipment.validate_slot_usage(obj))
|
||||
else:
|
||||
with self.assertRaises(characters.EquipmentError):
|
||||
self.character.equipment.validate_slot_usage(obj)
|
||||
|
||||
@parameterized.expand([
|
||||
# item, where
|
||||
("helmet", enums.WieldLocation.HEAD),
|
||||
("shield", enums.WieldLocation.SHIELD_HAND),
|
||||
("armor", enums.WieldLocation.BODY),
|
||||
("weapon", enums.WieldLocation.WEAPON_HAND),
|
||||
("big_weapon", enums.WieldLocation.TWO_HANDS),
|
||||
("item", enums.WieldLocation.BACKPACK),
|
||||
])
|
||||
def test_use(self, itemname, where):
|
||||
self.assertEqual(self.character.equipment.slots, self._get_empty_slots())
|
||||
|
||||
obj = getattr(self, itemname)
|
||||
self.character.equipment.use(obj)
|
||||
# check that item ended up in the right place
|
||||
if where is enums.WieldLocation.BACKPACK:
|
||||
self.assertTrue(obj in self.character.equipment.slots[where])
|
||||
else:
|
||||
self.assertEqual(self.character.equipment.slots[where], obj)
|
||||
|
||||
def test_store(self):
|
||||
self.character.equipment.store(self.weapon)
|
||||
self.assertEqual(self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], None)
|
||||
self.assertTrue(
|
||||
self.weapon in self.character.equipment.slots[enums.WieldLocation.BACKPACK])
|
||||
|
||||
def test_two_handed_exclusive(self):
|
||||
"""Two-handed weapons can't be used together with weapon+shield"""
|
||||
self.character.equipment.use(self.big_weapon)
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], self.big_weapon)
|
||||
# equipping sword or shield removes two-hander
|
||||
self.character.equipment.use(self.shield)
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield)
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], None)
|
||||
self.character.equipment.use(self.weapon)
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], self.weapon)
|
||||
|
||||
# the two-hander removes the two weapons
|
||||
self.character.equipment.use(self.big_weapon)
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], self.big_weapon)
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None)
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], None)
|
||||
|
||||
def test_remove__with_obj(self):
|
||||
self.character.equipment.use(self.shield)
|
||||
self.character.equipment.use(self.item)
|
||||
self.character.equipment.store(self.weapon)
|
||||
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield)
|
||||
self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK],
|
||||
[self.item, self.weapon])
|
||||
|
||||
self.assertEqual(self.character.equipment.remove(self.shield), [self.shield])
|
||||
self.assertEqual(self.character.equipment.remove(self.item), [self.item])
|
||||
|
||||
self.assertEqual(self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None)
|
||||
self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK],
|
||||
[self.weapon])
|
||||
|
||||
def test_remove__with_slot(self):
|
||||
self.character.equipment.use(self.shield)
|
||||
self.character.equipment.use(self.item)
|
||||
self.character.equipment.store(self.helmet)
|
||||
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield)
|
||||
self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK],
|
||||
[self.item, self.helmet])
|
||||
|
||||
self.assertEqual(self.character.equipment.remove(enums.WieldLocation.SHIELD_HAND),
|
||||
[self.shield])
|
||||
self.assertEqual(self.character.equipment.remove(enums.WieldLocation.BACKPACK),
|
||||
[self.item, self.helmet])
|
||||
|
||||
self.assertEqual(
|
||||
self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None)
|
||||
self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], [])
|
||||
|
||||
def test_properties(self):
|
||||
self.character.equipment.use(self.armor)
|
||||
self.assertEqual(self.character.equipment.armor, 11)
|
||||
self.character.equipment.use(self.shield)
|
||||
self.assertEqual(self.character.equipment.armor, 12)
|
||||
self.character.equipment.use(self.helmet)
|
||||
self.assertEqual(self.character.equipment.armor, 13)
|
||||
|
||||
self.character.equipment.use(self.weapon)
|
||||
self.assertEqual(self.character.equipment.weapon, self.weapon)
|
||||
self.character.equipment.use(self.big_weapon)
|
||||
self.assertEqual(self.character.equipment.weapon, self.big_weapon)
|
||||
18
evennia/contrib/tutorials/evadventure/tests/tests.py
Normal file
18
evennia/contrib/tutorials/evadventure/tests/tests.py
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
"""
|
||||
Tests for EvAdventure.
|
||||
|
||||
"""
|
||||
|
||||
from unittest.mock import patch, MagicMock, call
|
||||
from parameterized import parameterized
|
||||
from evennia.utils import create
|
||||
from evennia.utils.test_resources import BaseEvenniaTest
|
||||
from .characters import EvAdventureCharacter, EquipmentHandler, EquipmentError
|
||||
from .objects import EvAdventureObject
|
||||
from . import enums
|
||||
from . import combat_turnbased
|
||||
from . import rules
|
||||
from . import random_tables
|
||||
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue