about summary refs log tree commit diff
path: root/dropcalc/mxl_types/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'dropcalc/mxl_types/base.py')
-rw-r--r--dropcalc/mxl_types/base.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/dropcalc/mxl_types/base.py b/dropcalc/mxl_types/base.py
new file mode 100644
index 0000000..cd7e8be
--- /dev/null
+++ b/dropcalc/mxl_types/base.py
@@ -0,0 +1,34 @@
+from sqlalchemy import ForeignKey, String
+from sqlalchemy.orm import Mapped, mapped_column
+
+from .dao import BaseDAO
+
+
+class BaseItem(BaseDAO):
+	__tablename__ = "base"
+
+	code: Mapped[str] = mapped_column(String(4), primary_key=True)
+	name: Mapped[str]                                    # internal name only, game actually looks up `code` in strings
+	type = mapped_column(ForeignKey("item_type.Code"))   # can have two item_type... and all their parents
+	type2 = mapped_column(ForeignKey("item_type.Code"))  # should really figure out a better way to store them
+	rarity: Mapped[int]
+	level: Mapped[int]                                   # variously referred to as ilvl or qlvl
+	spawnable: Mapped[int]                               # items with spawnable=0 *can* be dropped directly from TCs, but shouldn't randomly drop
+	category: Mapped[str]
+
+	__mapper_args__ = {'polymorphic_on': 'category'}
+
+
+class Weapon(BaseItem):
+	filename = "Weapons.txt"
+	__mapper_args__ = {'polymorphic_identity': 'weap'}
+
+
+class Armor(BaseItem):
+	filename = "Armor.txt"
+	__mapper_args__ = {'polymorphic_identity': 'armo'}
+
+
+class Misc(BaseItem):
+	filename = "Misc.txt"
+	__mapper_args__ = {'polymorphic_identity': 'misc'}