character sheet more editable

This commit is contained in:
Zachary Watts
2026-04-30 11:49:11 -04:00
parent fbecd90c8d
commit 8bcefa02a6
4 changed files with 71 additions and 10 deletions

Binary file not shown.

35
app.py
View File

@@ -18,8 +18,9 @@ def index():
tab = request.args.get("tab", default="what", type=str) tab = request.args.get("tab", default="what", type=str)
return render_template("index.html", tab=tab) return render_template("index.html", tab=tab)
@app.route('/party', methods = ["GET","POST"]) @app.route('/party', methods = ["GET"])
def party(): def party():
print("generating party")
stored_adv_party = [] stored_adv_party = []
stored_count = None stored_count = None
stored_level = None stored_level = None
@@ -71,16 +72,30 @@ def party():
@app.route('/character', methods = ["GET","POST"]) @app.route('/character', methods = ["GET","POST"])
def character(): def character():
if request.method == "GET": if request.method == "GET":
print('in get') c_id = request.args.get("id", default="adv-1", type=str)
c_id = str(request.args.get("id", default="adv-1", type=str)) level = request.args.get("level", default=1, type=int)
if request.cookies: role = request.args.get("role", default="fighter", type=str)
cache = request.args.get("cache", default='true', type=str)
if request.cookies and cache == "true":
cookie_encoded = request.cookies[c_id] cookie_encoded = request.cookies[c_id]
cookie_compressed = base64.urlsafe_b64decode(cookie_encoded) cookie_compressed = base64.urlsafe_b64decode(cookie_encoded)
character_dict = json.loads(zlib.decompress(cookie_compressed).decode()) character_dict = json.loads(zlib.decompress(cookie_compressed).decode())
new_char = createCharacterWithDict(character_dict) character = createCharacterWithDict(character_dict)
if character.level != level:
character.set_level(level)
# reroll until we get our class
while character.player_class != role.replace("-"," "):
new_char = Adventurer(c_id, 1)
selected_class = ClassSelector(new_char).selection()
character = selected_class(new_char.identifier, new_char.level, new_char.get_attributes())
else: else:
print('in else') new_char = Adventurer(c_id, 1)
new_player = Adventurer(c_id, 1) selected_class = ClassSelector(new_char).selection()
selected_class = ClassSelector(new_player).selection() character = selected_class(new_char.identifier, new_char.level, new_char.get_attributes())
new_char = selected_class(new_player.identifier, new_player.level, new_player.get_attributes()) response = make_response(render_template("character.html", character=character, level=level, cache=cache,role=role))
return render_template("character.html", character=new_char) cookie_string = character.identifier
char_json = json.dumps(character.get_json())
compressed = zlib.compress(char_json.encode())
cookie_data = base64.urlsafe_b64encode(compressed).decode()
response.set_cookie(cookie_string, cookie_data)
return response

View File

@@ -35,6 +35,52 @@
<div class="card-content"> <div class="card-content">
<div class="content"> <div class="content">
<div class="block"> <div class="block">
<div class="block">
<div class="columns">
<div class="column" >
<p>Select a Class</p>
<div class="dropdown is-hoverable">
<div class="dropdown-trigger">
<button class="button" aria-haspopup="true" aria-controls="dropdown-menu">
<span>{{role.title()}}</span>
<span class="icon is-small">
<i class="fas fa-angle-down" aria-hidden="true"></i>
</span>
</button>
</div>
<div class="dropdown-menu" id="dropdown-menu" role="menu">
<div class="dropdown-content">
{%for c in ['fighter','magic-user', 'cleric', 'thief', 'dwarf', 'elf', 'halfling'] %}
{% if role == c %}
<a href="{{ '/character?level={}&role={}&cache=true'.format(level,c) }}" class="dropdown-item is-active">{{c.title()}}</a>
{% else %}
<a href="{{ '/character?level={}&role={}&cache=true'.format(level,c) }}" class="dropdown-item">{{c.title()}}</a>
{% endif %}
{%endfor%}
</div>
</div>
</div>
</div>
<div class="column" >
<p>Character Level</p>
<div class="buttons">
{%for j in range(1,6)%}
{% if level|int() == j|int() %}
<a class="button is-primary" href="{{ '/character?&level={}&role={}&cache=true'.format(j,role) }}">{{j}}</a>
{% else %}
<a class="button" href="{{ '/character?&level={}&role={}&cache=true'.format(j,role) }}">{{j}}</a>
{% endif %}
{%endfor%}
</div>
</div>
<div class="column" >
<p>Generate new character sheet</p>
<div class="buttons">
<a class="button is-danger is-outlined" href="{{ '/character?&level={}&role={}&cache=false'.format(j,role,cache) }}">Re-Roll Character</a>
</div>
</div>
</div>
<h3>{{character.adv_class.title()}} - Level {{character.level}}</h3> <h3>{{character.adv_class.title()}} - Level {{character.level}}</h3>
<div class="columns"> <div class="columns">
<div class="column"> <div class="column">