can now load a character from a cookie

This commit is contained in:
Zachary Watts
2026-04-29 13:55:07 -04:00
parent e6d19b1f69
commit 15342552f1
7 changed files with 45 additions and 13 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -44,6 +44,12 @@ class Adventurer:
def __str__(self): def __str__(self):
return f"{self.player_class}" return f"{self.player_class}"
def get_subclass_dict():
subclasses = {}
for subclass in Adventurer.__subclasses__():
subclasses[subclass.adv_class] = subclass
return subclasses
def get_json(self): def get_json(self):
char_dict = self.__dict__ char_dict = self.__dict__
char_json = json.dumps(char_dict) char_json = json.dumps(char_dict)
@@ -113,6 +119,7 @@ class Adventurer:
class Fighter(Adventurer): class Fighter(Adventurer):
adv_class = "fighter"
prime_requisite = "strength" prime_requisite = "strength"
requirements = None requirements = None
progression = [ progression = [
@@ -133,12 +140,13 @@ class Fighter(Adventurer):
] ]
def __init__(self, c_id, level, attributes={}) -> None: def __init__(self, c_id, level, attributes={}) -> None:
Adventurer.__init__(self, c_id, level, attributes) Adventurer.__init__(self, c_id, level, attributes)
self.player_class = "fighter" self.player_class = Fighter.adv_class
self.progression = Fighter.progression self.progression = Fighter.progression
self.hp = roll_dice(self.level, 8) self.hp = roll_dice(self.level, 8)
self.ac = armor[self.armor] self.ac = armor[self.armor]
class MagicUser(Adventurer): class MagicUser(Adventurer):
adv_class = "magic user"
prime_requisite = "intelligence" prime_requisite = "intelligence"
requirements = None requirements = None
progression = [ progression = [
@@ -175,7 +183,7 @@ class MagicUser(Adventurer):
} }
def __init__(self,c_id, level, attributes={}) -> None: def __init__(self,c_id, level, attributes={}) -> None:
Adventurer.__init__(self, c_id, level, attributes) Adventurer.__init__(self, c_id, level, attributes)
self.player_class = "magic user" self.player_class = MagicUser.adv_class
self.progression = MagicUser.progression self.progression = MagicUser.progression
self.hp = roll_dice(self.level, 4) self.hp = roll_dice(self.level, 4)
self.armor = "None" self.armor = "None"
@@ -185,6 +193,7 @@ class MagicUser(Adventurer):
self.spell_book = self.select_spells() self.spell_book = self.select_spells()
class Cleric(Adventurer): class Cleric(Adventurer):
adv_class = "cleric"
prime_requisite = "wisdom" prime_requisite = "wisdom"
requirements = None requirements = None
progression = [ progression = [
@@ -221,7 +230,7 @@ class Cleric(Adventurer):
} }
def __init__(self,c_id, level, attributes={}) -> None: def __init__(self,c_id, level, attributes={}) -> None:
Adventurer.__init__(self, c_id, level, attributes) Adventurer.__init__(self, c_id, level, attributes)
self.player_class = "cleric" self.player_class = Cleric.adv_class
self.progression = Cleric.progression self.progression = Cleric.progression
self.hp = roll_dice(self.level, 6) self.hp = roll_dice(self.level, 6)
self.armor = random.choice(list(armor.keys())) self.armor = random.choice(list(armor.keys()))
@@ -234,6 +243,7 @@ class Cleric(Adventurer):
self.spell_book = self.select_spells() self.spell_book = self.select_spells()
class Thief(Adventurer): class Thief(Adventurer):
adv_class = "thief"
prime_requisite = "dexterity" prime_requisite = "dexterity"
requirements = None requirements = None
progression = [ progression = [
@@ -254,13 +264,14 @@ class Thief(Adventurer):
] ]
def __init__(self,c_id, level, attributes={}) -> None: def __init__(self,c_id, level, attributes={}) -> None:
Adventurer.__init__(self, c_id, level, attributes) Adventurer.__init__(self, c_id, level, attributes)
self.player_class = "thief" self.player_class = Thief.adv_class
self.progression = Fighter.progression self.progression = Thief.progression
self.hp = roll_dice(self.level, 4) self.hp = roll_dice(self.level, 4)
self.armor = random.choice(list(armor.keys())) self.armor = random.choice(list(armor.keys()))
self.ac = armor[self.armor] self.ac = armor[self.armor]
class Dwarf(Adventurer): class Dwarf(Adventurer):
adv_class = "dwarf"
prime_requisite = "strength" prime_requisite = "strength"
requirements = {'constitution' : 9 } requirements = {'constitution' : 9 }
progression = [ progression = [
@@ -279,13 +290,14 @@ class Dwarf(Adventurer):
] ]
def __init__(self,c_id, level, attributes={}) -> None: def __init__(self,c_id, level, attributes={}) -> None:
Adventurer.__init__(self, c_id, level, attributes) Adventurer.__init__(self, c_id, level, attributes)
self.player_class = "dwarf" self.player_class = Dwarf.adv_class
self.progression = Dwarf.progression self.progression = Dwarf.progression
self.hp = roll_dice(self.level, 8) self.hp = roll_dice(self.level, 8)
self.armor = random.choice(list(armor.keys())) self.armor = random.choice(list(armor.keys()))
self.ac = armor[self.armor] self.ac = armor[self.armor]
class Elf(Adventurer): class Elf(Adventurer):
adv_class = "elf"
prime_requisite = "intellgence" prime_requisite = "intellgence"
requirements = {'intelligence' : 9 } requirements = {'intelligence' : 9 }
progression = [ progression = [
@@ -314,7 +326,7 @@ class Elf(Adventurer):
} }
def __init__(self,c_id, level, attributes={}) -> None: def __init__(self,c_id, level, attributes={}) -> None:
Adventurer.__init__(self, c_id, level, attributes) Adventurer.__init__(self, c_id, level, attributes)
self.player_class = "elf" self.player_class = Elf.adv_class
self.progression = Elf.progression self.progression = Elf.progression
self.hp = roll_dice(self.level, 6) self.hp = roll_dice(self.level, 6)
self.armor = random.choice(list(armor.keys())) self.armor = random.choice(list(armor.keys()))
@@ -323,6 +335,7 @@ class Elf(Adventurer):
self.spell_book = self.select_spells() self.spell_book = self.select_spells()
class Halfling(Adventurer): class Halfling(Adventurer):
adv_class = "halfling"
prime_requisite = "dexterity" prime_requisite = "dexterity"
requirements = {'constitution' : 9, 'dexterity' : 9 } requirements = {'constitution' : 9, 'dexterity' : 9 }
progression = [ progression = [
@@ -337,7 +350,7 @@ class Halfling(Adventurer):
] ]
def __init__(self,c_id, level, attributes={}) -> None: def __init__(self,c_id, level, attributes={}) -> None:
Adventurer.__init__(self, c_id, level, attributes) Adventurer.__init__(self, c_id, level, attributes)
self.player_class = "halfling" self.player_class = Halfling.adv_class
self.progression = Halfling.progression self.progression = Halfling.progression
self.hp = roll_dice(self.level, 6) self.hp = roll_dice(self.level, 6)
self.armor = random.choice(list(armor.keys())) self.armor = random.choice(list(armor.keys()))

21
app.py
View File

@@ -1,6 +1,7 @@
#!/usr/bin/python3 #!/usr/bin/python3
import zlib import zlib
from main import * from main import *
from adventurers import *
from flask import Flask, render_template, redirect, request, make_response from flask import Flask, render_template, redirect, request, make_response
from flask_session import Session from flask_session import Session
@@ -37,6 +38,20 @@ def party():
@app.route('/character', methods = ["GET","POST"]) @app.route('/character', methods = ["GET","POST"])
def characters(): def characters():
if request.method == "GET": if request.method == "GET":
c_id = request.args.get("id", default=0, type=int) c_id = str(request.args.get("id", default=0, type=int))
character = returnCharacter(c_id) cookie_encoded = request.cookies[c_id]
return render_template("character.html", character=character) cookie_compressed = base64.urlsafe_b64decode(cookie_encoded)
character_dict = json.loads(zlib.decompress(cookie_compressed).decode())
chosen_class = character_dict['player_class']
c_id = character_dict['id']
level = character_dict['level']
adv_dict = Adventurer.get_subclass_dict()
chosen_class = adv_dict[chosen_class]
# note, i wonder if i can find a way to use the dict in a one liner, like from hw1
# makes a new character of the correct player class
new_char = chosen_class(c_id=c_id, level=level)
# loads in all the values from the dict
for k, v in character_dict.items():
# https://realpython.com/ref/builtin-functions/setattr/
setattr(new_char,k, v)
return render_template("character.html", character=new_char)

View File

@@ -102,7 +102,11 @@ def returnCharacter(c_id):
def main(): def main():
adventurer_party = returnParty(party_size=2, party_level=2) adventurer_party = returnParty(party_size=2, party_level=2)
for adv in adventurer_party.adventurers: for adv in adventurer_party.adventurers:
print(adv.get_json()) print(adv.adv_class)
adv_dict = Adventurer.get_subclass_dict()
test_class = adv_dict['fighter']
new_char = test_class(c_id=1,level=1)
print(new_char.adv_class)
# for line in adv.vertical_sheet: # for line in adv.vertical_sheet:
# print(f"{line}") # print(f"{line}")
# print() # print()

View File

@@ -46,7 +46,7 @@
<div class="block has-text-centered"> <div class="block has-text-centered">
<div class="columns"> <div class="columns">
<div class="column" > <div class="column" >
<pre>{{character.vertical_sheet | join("\n")}}</pre> <pre>{{character.vertical_sheet() | join("\n")}}</pre>
</div> </div>
</div> </div>
</div> </div>