Combat foundation complete
This commit is contained in:
@@ -36,7 +36,7 @@ def combat_view(session_id: str):
|
||||
# Check if combat is still active
|
||||
if not result.get('in_combat'):
|
||||
# Combat ended - redirect to game play
|
||||
return redirect(url_for('game.play', session_id=session_id))
|
||||
return redirect(url_for('game.play_session', session_id=session_id))
|
||||
|
||||
encounter = result.get('encounter') or {}
|
||||
combat_log = result.get('combat_log', [])
|
||||
@@ -171,9 +171,11 @@ def combat_action(session_id: str):
|
||||
|
||||
# Add any effect entries
|
||||
for effect in result.get('effects_applied', []):
|
||||
# API may use "name" or "effect" key for the effect name
|
||||
effect_name = effect.get('name') or effect.get('effect') or 'Unknown'
|
||||
log_entries.append({
|
||||
'actor': '',
|
||||
'message': effect.get('message', f'Effect applied: {effect.get("name")}'),
|
||||
'message': effect.get('message', f'Effect applied: {effect_name}'),
|
||||
'type': 'system'
|
||||
})
|
||||
|
||||
@@ -417,15 +419,25 @@ def combat_flee(session_id: str):
|
||||
result = response.get('result', {})
|
||||
|
||||
if result.get('success'):
|
||||
# Flee successful - redirect to play page
|
||||
return redirect(url_for('game.play_session', session_id=session_id))
|
||||
# Flee successful - use HX-Redirect for HTMX
|
||||
resp = make_response(f'''
|
||||
<div class="combat-log__entry combat-log__entry--system">
|
||||
<span class="log-message">{result.get('message', 'You fled from combat!')}</span>
|
||||
</div>
|
||||
''')
|
||||
resp.headers['HX-Redirect'] = url_for('game.play_session', session_id=session_id)
|
||||
return resp
|
||||
else:
|
||||
# Flee failed - return log entry
|
||||
return f'''
|
||||
# Flee failed - return log entry, trigger enemy turn
|
||||
resp = make_response(f'''
|
||||
<div class="combat-log__entry combat-log__entry--system">
|
||||
<span class="log-message">{result.get('message', 'Failed to flee!')}</span>
|
||||
</div>
|
||||
'''
|
||||
''')
|
||||
# Failed flee consumes turn, so trigger enemy turn if needed
|
||||
if not result.get('next_is_player', True):
|
||||
resp.headers['HX-Trigger'] = 'enemyTurn'
|
||||
return resp
|
||||
|
||||
except APIError as e:
|
||||
logger.error("flee_failed", session_id=session_id, error=str(e))
|
||||
@@ -468,18 +480,19 @@ def combat_enemy_turn(session_id: str):
|
||||
)
|
||||
|
||||
# Format enemy action for log
|
||||
action_result = result.get('action_result', {})
|
||||
# API returns ActionResult directly in result, not nested under action_result
|
||||
log_entries = [{
|
||||
'actor': action_result.get('actor_name', 'Enemy'),
|
||||
'message': action_result.get('message', 'attacks'),
|
||||
'actor': 'Enemy',
|
||||
'message': result.get('message', 'attacks'),
|
||||
'type': 'enemy',
|
||||
'is_crit': action_result.get('is_critical', False)
|
||||
'is_crit': False
|
||||
}]
|
||||
|
||||
# Add damage info
|
||||
damage_results = action_result.get('damage_results', [])
|
||||
# Add damage info - API returns total_damage, not damage
|
||||
damage_results = result.get('damage_results', [])
|
||||
if damage_results:
|
||||
log_entries[0]['damage'] = damage_results[0].get('damage')
|
||||
log_entries[0]['damage'] = damage_results[0].get('total_damage')
|
||||
log_entries[0]['is_crit'] = damage_results[0].get('is_critical', False)
|
||||
|
||||
# Check if it's still enemy turn (multiple enemies)
|
||||
resp = make_response(render_template(
|
||||
|
||||
Reference in New Issue
Block a user