From a8dc8211d5c2360cf3cd3115420748763e1d778a Mon Sep 17 00:00:00 2001 From: Joan Date: Wed, 11 Mar 2026 12:43:23 +0100 Subject: [PATCH] Pre-menu-integration snapshot: combat, crafting, status effects, gamedata updates --- api/game_logic.py | 465 +++++++++--------- api/give_gear.py | 53 ++ api/give_gear_final.sql | 17 + api/main.py | 4 +- api/routers/combat.py | 209 +++++++- api/routers/crafting.py | 30 +- api/routers/equipment.py | 20 +- api/routers/game_routes.py | 36 +- api/routers/loot.py | 6 +- api/services/combat_engine.py | 131 ++++- api/services/helpers.py | 58 ++- api/services/skills.py | 4 + api/services/stats.py | 73 ++- api/services/status_effects.py | 101 ++++ gamedata/items.json | 16 +- gamedata/npcs.json | 25 + gamedata/perks.json | 4 +- gamedata/skills.json | 79 ++- gamedata/status_effects.json | 76 +++ images-source/npcs/test_boss.jpeg | Bin 0 -> 230567 bytes images/npcs/test_boss.webp | Bin 0 -> 70054 bytes pwa/src/components/Game.tsx | 5 + pwa/src/components/common/ItemStatBadges.tsx | 8 +- pwa/src/components/game/CharacterSheet.tsx | 30 +- pwa/src/components/game/Combat.tsx | 94 +++- pwa/src/components/game/CombatEffects.css | 34 +- pwa/src/components/game/CombatTypes.ts | 12 + pwa/src/components/game/CombatView.tsx | 246 ++++++++- pwa/src/components/game/EffectBadge.tsx | 2 +- pwa/src/components/game/LocationView.tsx | 6 + pwa/src/components/game/PlayerSidebar.tsx | 21 +- pwa/src/components/game/Workbench.tsx | 105 +++- .../components/game/hooks/useGameEngine.ts | 35 +- pwa/src/i18n/locales/en.json | 43 +- pwa/src/i18n/locales/es.json | 40 +- pwa/src/utils/i18nUtils.ts | 40 +- 36 files changed, 1724 insertions(+), 404 deletions(-) create mode 100644 api/give_gear.py create mode 100644 api/give_gear_final.sql create mode 100644 api/services/status_effects.py create mode 100644 gamedata/status_effects.json create mode 100644 images-source/npcs/test_boss.jpeg create mode 100644 images/npcs/test_boss.webp diff --git a/api/game_logic.py b/api/game_logic.py index 869e9f8..ee46238 100644 --- a/api/game_logic.py +++ b/api/game_logic.py @@ -599,29 +599,85 @@ def generate_npc_intent(npc_def, combat_state: dict) -> dict: Generate the NEXT intent for an NPC. Returns a dict with intent type and details. """ - # Default intent is attack - intent = {"type": "attack", "value": 0} + import random + from api.services.skills import skills_manager - # Logic could be more complex based on NPC type, HP, etc. - roll = random.random() + npc_hp_pct = combat_state['npc_hp'] / combat_state['npc_max_hp'] if combat_state['npc_max_hp'] > 0 else 0 + skills = getattr(npc_def, 'skills', []) - # 20% chance to defend if HP < 50% - if (combat_state['npc_hp'] / combat_state['npc_max_hp'] < 0.5) and roll < 0.2: - intent = {"type": "defend", "value": 0} - # 15% chance for special attack (if defined, otherwise strong attack) - elif roll < 0.35: - intent = {"type": "special", "value": 0} - else: - intent = {"type": "attack", "value": 0} + active_effects = combat_state.get('npc_status_effects', '') + + cooldowns = {} + if active_effects: + for eff in active_effects.split('|'): + if eff.startswith('cd_'): + parts = eff.split(':') + if len(parts) >= 2: + cooldowns[parts[0][3:]] = int(parts[1]) + + available_skills = [] + has_heal = None + has_buff = None + damage_skills = [] + + for skill_id in skills: + if cooldowns.get(skill_id, 0) > 0: + continue + skill = skills_manager.get_skill(skill_id) + if not skill: continue + available_skills.append(skill) - return intent + if 'heal_percent' in skill.effects: + has_heal = skill + elif 'buff' in skill.effects: + has_buff = skill + else: + damage_skills.append(skill) + + # 1. Survival First + if has_heal and npc_hp_pct < 0.3: + if random.random() < 0.8: + return {"type": "skill", "value": has_heal.id} + + # 2. Buffs + if has_buff: + buff_name = has_buff.effects['buff'] + is_buff_active = False + if active_effects: + for eff in active_effects.split('|'): + if eff.startswith(buff_name + ':'): + is_buff_active = True + break + if not is_buff_active and random.random() < 0.6: + return {"type": "skill", "value": has_buff.id} + + # 3. Telegraphed Attack Check (15% chance if health > 30%) + if npc_hp_pct > 0.3 and random.random() < 0.15: + return {"type": "charge", "value": "charging_attack"} + + # 4. Damage Skills + if damage_skills and random.random() < 0.4: + chosen = random.choice(damage_skills) + return {"type": "skill", "value": chosen.id} + + # Default to attack or defend (legacy logic) + roll = random.random() + if npc_hp_pct < 0.5 and roll < 0.1: + return {"type": "defend", "value": 0} + + return {"type": "attack", "value": 0} -async def npc_attack(player_id: int, combat: dict, npc_def, reduce_armor_func, player_stats: dict = None) -> Tuple[List[dict], bool]: +async def npc_attack(player_id: int, combat: dict, npc_def, reduce_armor_func, player_stats: dict = None, locale: str = 'en') -> Tuple[List[dict], bool]: """ Execute NPC turn based on PREVIOUS intent, then generate NEXT intent. Returns: (messages_list, player_defeated) """ + import random + import time + from api import database as db + from api.services.helpers import create_combat_message, get_game_message, get_locale_string + from api.services.skills import skills_manager player = await db.get_player_by_id(player_id) if not player: return [], True @@ -635,13 +691,10 @@ async def npc_attack(player_id: int, combat: dict, npc_def, reduce_armor_func, p is_stunned = False if npc_status_str: - # Parse status: "bleeding:5:3" (name:dmg:ticks) or "stun:1" - # Handling multiple effects separated by | effects_list = npc_status_str.split('|') active_effects = [] npc_damage_taken = 0 npc_healing_received = 0 - is_stunned = False for effect_str in effects_list: if not effect_str: continue @@ -656,18 +709,24 @@ async def npc_attack(player_id: int, combat: dict, npc_def, reduce_armor_func, p messages.append(create_combat_message( "skill_effect", origin="enemy", - message=f"💫 {npc_def.name} is stunned and cannot act!" + message=get_game_message('npc_stunned_cannot_act', locale, npc_name=get_locale_string(npc_def.name, locale)) )) ticks -= 1 if ticks > 0: active_effects.append(f"stun:{ticks}") continue + if name.startswith('cd_') and len(parts) >= 3: + ticks = int(parts[2]) + ticks -= 1 + if ticks > 0: + active_effects.append(f"{name}:{parts[1]}:{ticks}") + continue + if len(parts) >= 3: dmg = int(parts[1]) ticks = int(parts[2]) - # Apply effect if ticks > 0: if dmg > 0: npc_damage_taken += dmg @@ -682,272 +741,210 @@ async def npc_attack(player_id: int, combat: dict, npc_def, reduce_armor_func, p heal = abs(dmg) npc_healing_received += heal messages.append(create_combat_message( - "effect_heal", # Check if this message type exists or fallback + "effect_heal", origin="enemy", heal=heal, effect_name=name, npc_name=npc_def.name )) + elif name in ["berserker_rage", "fortify", "analyzed"]: + pass - # Decrement tick ticks -= 1 if ticks > 0: active_effects.append(f"{name}:{dmg}:{ticks}") except Exception as e: print(f"Error parsing NPC status: {e}") - # Update NPC active effects new_status_str = "|".join(active_effects) if new_status_str != npc_status_str: await db.update_combat(player_id, {'npc_status_effects': new_status_str}) - # Apply Total Damage/Healing if npc_damage_taken > 0: npc_hp = max(0, npc_hp - npc_damage_taken) if npc_healing_received > 0: npc_hp = min(npc_max_hp, npc_hp + npc_healing_received) - # Update NPC HP in DB await db.update_combat(player_id, {'npc_hp': npc_hp}) - # Check if NPC died from effects if npc_hp <= 0: - messages.append(create_combat_message( - "victory", - origin="neutral", - npc_name=npc_def.name - )) - # Award XP/Loot logic handled in combat route mostly, but we need to signal it. - # Returning true for player_defeated is definitely WRONG here if NPC died. - # The router usually handles "victory" check after action. - # But here this is triggered during NPC turn (which happens after Player turn). - # If NPC dies on its OWN turn, we need to handle it. - # However, typically NPC dies on Player turn. - # If NPC dies from bleeding on its turn, the player wins. - # We need to signal this back to router. - # But the current return signature is (messages, player_defeated). - # We might need to handle the win logic here or update signature. - # For now, let's update HP and let the flow continue. - # Wait, if NPC is dead, it shouldn't attack! - # returning here prevents NPC from attacking if it died from status effects + messages.append(create_combat_message("victory", origin="neutral", npc_name=npc_def.name)) return messages, False - # Parse current intent (stored in DB as string or JSON, assuming simple string for now or we parse it) current_intent_str = combat.get('npc_intent', 'attack') - # Handle legacy/null if not current_intent_str: current_intent_str = 'attack' - intent_type = current_intent_str + intent_parts = current_intent_str.split(':') + intent_type = intent_parts[0] + intent_value = intent_parts[1] if len(intent_parts) > 1 else None actual_damage = 0 - - # EXECUTE INTENT - if npc_hp > 0 and not is_stunned: # Only attack if alive and not stunned + new_player_hp = player['hp'] + + if npc_hp > 0 and not is_stunned: if intent_type == 'defend': - # NPC defends - heals 5% HP heal_amount = int(combat['npc_max_hp'] * 0.05) new_npc_hp = min(combat['npc_max_hp'], combat['npc_hp'] + heal_amount) await db.update_combat(player_id, {'npc_hp': new_npc_hp}) + messages.append(create_combat_message("enemy_defend", origin="enemy", npc_name=npc_def.name, heal=heal_amount)) + elif intent_type == 'charge': messages.append(create_combat_message( - "enemy_defend", - origin="enemy", - npc_name=npc_def.name, - heal=heal_amount + "skill_effect", origin="enemy", message=get_game_message('enemy_charging', locale, enemy=get_locale_string(npc_def.name, locale)) )) - elif intent_type == 'special': - # Strong attack (1.5x damage) - npc_damage = int(random.randint(npc_def.damage_min, npc_def.damage_max) * 1.5) - armor_absorbed, broken_armor = await reduce_armor_func(player_id, npc_damage) - actual_damage = max(1, npc_damage - armor_absorbed) - new_player_hp = max(0, player['hp'] - actual_damage) - - messages.append(create_combat_message( - "enemy_special", - origin="enemy", - npc_name=npc_def.name, - damage=npc_damage, - armor_absorbed=armor_absorbed - )) - - if broken_armor: - for armor in broken_armor: - messages.append(create_combat_message( - "item_broken", - origin="player", - item_name=armor['name'], - emoji=armor['emoji'] - )) - - await db.update_player(player_id, hp=new_player_hp) - - else: # Default 'attack' + elif intent_type in ('charging_attack', 'special', 'attack', 'skill'): npc_damage = random.randint(npc_def.damage_min, npc_def.damage_max) + skill = None + is_charging = intent_type == 'charging_attack' - # Enrage bonus if NPC is below 30% HP - is_enraged = combat['npc_hp'] / combat['npc_max_hp'] < 0.3 - if is_enraged: + if intent_type == 'charging_attack': + npc_damage = int(npc_damage * 2.5) + elif intent_type == 'special': npc_damage = int(npc_damage * 1.5) - messages.append(create_combat_message( - "enemy_enraged", - origin="enemy", - npc_name=npc_def.name - )) - - # Check if player is defending (reduces damage by value%) - player_effects = await db.get_player_effects(player_id) - defending_effect = next((e for e in player_effects if e['effect_name'] == 'defending'), None) - if defending_effect: - reduction = defending_effect.get('value', 50) / 100 # Default 50% reduction - npc_damage = int(npc_damage * (1 - reduction)) - messages.append(create_combat_message( - "damage_reduced", - origin="player", - reduction=int(reduction * 100) - )) - # Remove defending effect after use - await db.remove_effect(player_id, 'defending') - - # ── Check buff-based damage reduction (fortify) ── - buff_dmg_reduction = 0.0 - if player_stats: - buff_dmg_reduction = player_stats.get('buff_damage_reduction', 0.0) - if buff_dmg_reduction > 0: - npc_damage = max(1, int(npc_damage * (1 - buff_dmg_reduction))) - messages.append(create_combat_message( - "damage_reduced", - origin="player", - reduction=int(buff_dmg_reduction * 100) - )) - - # ── Check berserker rage increased damage taken ── - buff_dmg_taken_increase = 0.0 - if player_stats: - buff_dmg_taken_increase = player_stats.get('buff_damage_taken_increase', 0.0) - if buff_dmg_taken_increase > 0: - npc_damage = int(npc_damage * (1 + buff_dmg_taken_increase)) - - # ── Check guaranteed dodge from Evade buff ── - dodged = False - if player_stats and player_stats.get('buff_guaranteed_dodge', False): - dodged = True - messages.append(create_combat_message( - "combat_dodge", - origin="player" - )) - actual_damage = 0 - new_player_hp = player['hp'] - # Consume the evade buff - await db.remove_effect(player_id, 'evade') - - # ── Check Foresight buff (enemy misses) ── - if not dodged and player_stats and player_stats.get('buff_enemy_miss', False): - dodged = True - messages.append(create_combat_message( - "combat_dodge", - origin="player" - )) - actual_damage = 0 - new_player_hp = player['hp'] - # Foresight ticks down naturally via db.tick_player_effects + elif intent_type == 'skill' and intent_value: + skill = skills_manager.get_skill(intent_value) + if skill: + if skill.cooldown > 0: + cd_str = f"cd_{skill.id}:0:{skill.cooldown}" + curr_combat = await db.get_active_combat(player_id) + curr_status = curr_combat.get('npc_status_effects', '') if curr_combat else '' + new_status = curr_status + f"|{cd_str}" if curr_status else cd_str + await db.update_combat(player_id, {'npc_status_effects': new_status}) + + effects = skill.effects + if 'heal_percent' in effects: + heal_amount = int(combat['npc_max_hp'] * effects['heal_percent']) + new_npc_hp = min(combat['npc_max_hp'], npc_hp + heal_amount) + await db.update_combat(player_id, {'npc_hp': new_npc_hp}) + messages.append(create_combat_message("skill_heal", origin="enemy", heal=heal_amount, skill_icon=skill.icon, skill_name=get_locale_string(skill.name, locale), npc_name=npc_def.name)) + npc_damage = 0 + + if 'buff' in effects: + buff_str = f"{effects['buff']}:0:{effects['buff_duration']}" + curr_combat = await db.get_active_combat(player_id) + curr_status = curr_combat.get('npc_status_effects', '') if curr_combat else '' + new_status = curr_status + f"|{buff_str}" if curr_status else buff_str + await db.update_combat(player_id, {'npc_status_effects': new_status}) + messages.append(create_combat_message("skill_buff", origin="enemy", skill_name=get_locale_string(skill.name, locale), skill_icon=skill.icon, duration=effects['buff_duration'], npc_name=npc_def.name)) + if 'damage_multiplier' not in effects and 'poison_damage' not in effects: + npc_damage = 0 + + if 'damage_multiplier' in effects: + npc_damage = max(1, int(npc_damage * effects['damage_multiplier'])) + + from api.services.helpers import calculate_dynamic_status_damage + poison_dmg = calculate_dynamic_status_damage(effects, 'poison', player) + if poison_dmg is not None: + await db.add_effect(player_id=player_id, effect_name="Poison", effect_icon="🧪", effect_type="damage", damage_per_tick=poison_dmg, ticks_remaining=effects.get('poison_duration', 3), persist_after_combat=True, source=f"enemy_skill:{skill.id}") - # Check for regular dodge (stat-based) - if not dodged and player_stats and 'dodge_chance' in player_stats: - if random.random() < player_stats['dodge_chance']: + burn_dmg = calculate_dynamic_status_damage(effects, 'burn', player) + if burn_dmg is not None: + await db.add_effect(player_id=player_id, effect_name="Burning", effect_icon="🔥", effect_type="damage", damage_per_tick=burn_dmg, ticks_remaining=effects.get('burn_duration', 3), persist_after_combat=True, source=f"enemy_skill:{skill.id}") + + is_enraged = combat['npc_hp'] / combat['npc_max_hp'] < 0.3 + if is_enraged and npc_damage > 0: + npc_damage = int(npc_damage * 1.5) + messages.append(create_combat_message("enemy_enraged", origin="enemy", npc_name=npc_def.name)) + + curr_combat = await db.get_active_combat(player_id) + curr_status = curr_combat.get('npc_status_effects', '') if curr_combat else '' + if 'berserker_rage' in curr_status and npc_damage > 0: + npc_damage = int(npc_damage * 1.5) + + if npc_damage > 0: + dodged = False + + is_defending = False + player_effects = await db.get_player_effects(player_id) + defending_effect = next((e for e in player_effects if e['effect_name'] == 'defending'), None) + if defending_effect: + is_defending = True + reduction = defending_effect.get('value', 50) / 100 + npc_damage = max(1, int(npc_damage * (1 - reduction))) + messages.append(create_combat_message("damage_reduced", origin="player", reduction=int(reduction * 100))) + await db.remove_effect(player_id, 'defending') + + buff_dmg_reduction = player_stats.get('buff_damage_reduction', 0.0) if player_stats else 0.0 + if buff_dmg_reduction > 0: + npc_damage = max(1, int(npc_damage * (1 - buff_dmg_reduction))) + messages.append(create_combat_message("damage_reduced", origin="player", reduction=int(buff_dmg_reduction * 100))) + + buff_dmg_taken_increase = player_stats.get('buff_damage_taken_increase', 0.0) if player_stats else 0.0 + if buff_dmg_taken_increase > 0: + npc_damage = int(npc_damage * (1 + buff_dmg_taken_increase)) + + if player_stats and player_stats.get('buff_guaranteed_dodge', False): dodged = True - messages.append(create_combat_message( - "combat_dodge", - origin="player" - )) - actual_damage = 0 - new_player_hp = player['hp'] - - # Check for block (if shield is equipped) - blocked = False - if not dodged and player_stats and player_stats.get('has_shield', False): - if random.random() < player_stats.get('block_chance', 0): - blocked = True - messages.append(create_combat_message( - "combat_block", - origin="player" - )) - npc_damage = max(1, int(npc_damage * 0.2)) # Block mitigates 80% damage + messages.append(create_combat_message("combat_dodge", origin="player")) + await db.remove_effect(player_id, 'evade') + elif player_stats and player_stats.get('buff_enemy_miss', False): + dodged = True + messages.append(create_combat_message("combat_dodge", origin="player")) + elif player_stats and 'dodge_chance' in player_stats and random.random() < player_stats['dodge_chance']: + dodged = True + messages.append(create_combat_message("combat_dodge", origin="player")) + + if not dodged and player_stats and player_stats.get('has_shield', False) and random.random() < player_stats.get('block_chance', 0): + messages.append(create_combat_message("combat_block", origin="player")) + npc_damage = max(1, int(npc_damage * 0.2)) + + if not dodged: + armor_absorbed, broken_armor = await reduce_armor_func(player_id, npc_damage, is_defending) + if player_stats and player_stats.get('armor_reduction', 0) > 0: + pct_reduction = player_stats['armor_reduction'] + actual_damage = max(1, int(npc_damage * (1 - pct_reduction))) + armor_absorbed_visual = npc_damage - actual_damage + else: + actual_damage = max(1, npc_damage - armor_absorbed) + armor_absorbed_visual = armor_absorbed - if not dodged: - # Calculate armor durability loss based on PRE-reduction damage - armor_absorbed, broken_armor = await reduce_armor_func(player_id, npc_damage) - - # If player_stats provides a percentage reduction, apply it instead of raw absorption - if player_stats and player_stats.get('armor_reduction', 0) > 0: - pct_reduction = player_stats['armor_reduction'] - actual_damage = max(1, int(npc_damage * (1 - pct_reduction))) - armor_absorbed_visual = npc_damage - actual_damage - else: - actual_damage = max(1, npc_damage - armor_absorbed) - armor_absorbed_visual = armor_absorbed - - new_player_hp = max(0, player['hp'] - actual_damage) - - messages.append(create_combat_message( - "enemy_attack", - origin="enemy", - npc_name=npc_def.name, - damage=actual_damage, - armor_absorbed=armor_absorbed_visual - )) - - if broken_armor and not dodged: - for armor in broken_armor: - messages.append(create_combat_message( - "item_broken", - origin="player", - item_name=armor['name'], - emoji=armor['emoji'] - )) + new_player_hp = max(0, player['hp'] - actual_damage) - await db.update_player(player_id, hp=new_player_hp) + if skill and 'damage_multiplier' in skill.effects: + messages.append(create_combat_message("skill_attack", origin="enemy", damage=actual_damage, skill_name=get_locale_string(skill.name, locale), skill_icon=skill.icon, hits=1)) + elif is_charging: + messages.append(create_combat_message("enemy_special", origin="enemy", npc_name=npc_def.name, damage=actual_damage, armor_absorbed=armor_absorbed_visual)) + else: + messages.append(create_combat_message("enemy_attack", origin="enemy", npc_name=npc_def.name, damage=actual_damage, armor_absorbed=armor_absorbed_visual)) + + if broken_armor: + for armor in broken_armor: + messages.append(create_combat_message("item_broken", origin="player", item_name=armor['name'], emoji=armor['emoji'])) + + await db.update_player(player_id, hp=new_player_hp) - # GENERATE NEXT INTENT - - # Check if player defeated player_defeated = False - if player['hp'] - actual_damage <= 0 and intent_type != 'defend': # Check HP after damage - # Re-fetch to be sure or just trust calculation - if new_player_hp <= 0: - messages.append(create_combat_message( - "player_defeated", - origin="neutral", - npc_name=npc_def.name - )) - player_defeated = True - await db.update_player(player_id, hp=0, is_dead=True) - await db.update_player_statistics(player_id, deaths=1, damage_taken=actual_damage, increment=True) - await db.end_combat(player_id) - return messages, player_defeated + if new_player_hp <= 0 and intent_type != 'defend' and intent_type != 'charge': + messages.append(create_combat_message("player_defeated", origin="neutral", npc_name=npc_def.name)) + player_defeated = True + await db.update_player(player_id, hp=0, is_dead=True) + await db.update_player_statistics(player_id, deaths=1, damage_taken=actual_damage, increment=True) + await db.end_combat(player_id) + return messages, player_defeated - if not player_defeated: - if actual_damage > 0: - await db.update_player_statistics(player_id, damage_taken=actual_damage, increment=True) - - # Generate NEXT intent - # We need the updated NPC HP for the logic - current_npc_hp = combat['npc_hp'] - if intent_type == 'defend': - current_npc_hp = min(combat['npc_max_hp'], combat['npc_hp'] + int(combat['npc_max_hp'] * 0.05)) - - temp_combat_state = combat.copy() - temp_combat_state['npc_hp'] = current_npc_hp - + if actual_damage > 0: + await db.update_player_statistics(player_id, damage_taken=actual_damage, increment=True) + + current_npc_hp = combat['npc_hp'] + if intent_type == 'defend': + current_npc_hp = min(combat['npc_max_hp'], combat['npc_hp'] + int(combat['npc_max_hp'] * 0.05)) + + temp_combat_state = combat.copy() + temp_combat_state['npc_hp'] = current_npc_hp + + if intent_type == 'charge': + next_intent_str = 'charging_attack' + else: next_intent = generate_npc_intent(npc_def, temp_combat_state) - - # Update combat with new intent and turn - await db.update_combat(player_id, { - 'turn': 'player', - 'turn_started_at': time.time(), - 'npc_intent': next_intent['type'] - }) + next_intent_str = f"{next_intent['type']}:{next_intent['value']}" if next_intent['type'] == 'skill' else next_intent['type'] + + await db.update_combat(player_id, { + 'turn': 'player', + 'turn_started_at': time.time(), + 'npc_intent': next_intent_str + }) return messages, player_defeated diff --git a/api/give_gear.py b/api/give_gear.py new file mode 100644 index 0000000..f125353 --- /dev/null +++ b/api/give_gear.py @@ -0,0 +1,53 @@ +import asyncio +import uuid +import asyncpg +import sys +import os + +sys.path.append(os.path.dirname(os.path.abspath(__file__))) + +from core.config import settings + +async def main(): + conn = await asyncpg.connect(settings.DATABASE_URL) + + # Get user + user = await conn.fetchrow("SELECT id FROM characters ORDER BY created_at DESC LIMIT 1 OFFSET 0") + if not user: + print("No user found") + return + c_id = user['id'] + print(f"Adding items to character {c_id}") + + # Items: Greatsword, Full Plate, Kite Shield + items = [ + {"item_id": "iron_greatsword", "base_durability": 100}, + {"item_id": "steel_plate", "base_durability": 200}, + {"item_id": "iron_kite_shield", "base_durability": 120} + ] + + for item in items: + # Create unique item + unique_id = str(uuid.uuid4()) + await conn.execute( + """ + INSERT INTO unique_items (id, item_id, durability, max_durability) + VALUES ($1, $2, $3, $3) + """, + unique_id, item['item_id'], item['base_durability'] + ) + + # Add to inventory + await conn.execute( + """ + INSERT INTO inventory_items (character_id, item_id, quantity, is_equipped, unique_item_id) + VALUES ($1, $2, 1, false, $3) + """, + c_id, item['item_id'], unique_id + ) + print(f"Added {item['item_id']} ({unique_id}) to inventory.") + + await conn.close() + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/api/give_gear_final.sql b/api/give_gear_final.sql new file mode 100644 index 0000000..6786f6a --- /dev/null +++ b/api/give_gear_final.sql @@ -0,0 +1,17 @@ +DO $$ +DECLARE + char_id INTEGER; + uid INTEGER; +BEGIN + SELECT id INTO char_id FROM characters ORDER BY created_at DESC LIMIT 1; + IF char_id IS NOT NULL THEN + INSERT INTO unique_items (item_id, durability, max_durability) VALUES ('iron_greatsword', 100, 100) RETURNING id INTO uid; + INSERT INTO inventory (character_id, item_id, quantity, is_equipped, unique_item_id) VALUES (char_id, 'iron_greatsword', 1, false, uid); + + INSERT INTO unique_items (item_id, durability, max_durability) VALUES ('steel_plate', 200, 200) RETURNING id INTO uid; + INSERT INTO inventory (character_id, item_id, quantity, is_equipped, unique_item_id) VALUES (char_id, 'steel_plate', 1, false, uid); + + INSERT INTO unique_items (item_id, durability, max_durability) VALUES ('iron_kite_shield', 120, 120) RETURNING id INTO uid; + INSERT INTO inventory (character_id, item_id, quantity, is_equipped, unique_item_id) VALUES (char_id, 'iron_kite_shield', 1, false, uid); + END IF; +END $$; diff --git a/api/main.py b/api/main.py index e8bc24d..d27d40d 100644 --- a/api/main.py +++ b/api/main.py @@ -187,8 +187,8 @@ except Exception as e: game_routes.init_router_dependencies(LOCATIONS, ITEMS_MANAGER, WORLD, redis_manager) combat.init_router_dependencies(LOCATIONS, ITEMS_MANAGER, WORLD, redis_manager, QUESTS_DATA) equipment.init_router_dependencies(LOCATIONS, ITEMS_MANAGER, WORLD, redis_manager) -crafting.init_router_dependencies(LOCATIONS, ITEMS_MANAGER, WORLD) -loot.init_router_dependencies(LOCATIONS, ITEMS_MANAGER, WORLD) +crafting.init_router_dependencies(LOCATIONS, ITEMS_MANAGER, WORLD, redis_manager) +loot.init_router_dependencies(LOCATIONS, ITEMS_MANAGER, WORLD, redis_manager) statistics.init_router_dependencies(LOCATIONS, ITEMS_MANAGER, WORLD) admin.init_router_dependencies(LOCATIONS, ITEMS_MANAGER, WORLD, IMAGES_DIR) quests.init_router_dependencies(ITEMS_MANAGER, QUESTS_DATA, NPCS_DATA, LOCATIONS) diff --git a/api/routers/combat.py b/api/routers/combat.py index 0f70d2f..428015a 100644 --- a/api/routers/combat.py +++ b/api/routers/combat.py @@ -17,13 +17,14 @@ from ..services.constants import PVP_TURN_TIMEOUT from ..core.security import get_current_user, security, verify_internal_key from ..services.models import * -from ..services.helpers import calculate_distance, calculate_stamina_cost, calculate_player_capacity, get_locale_string, create_combat_message, get_game_message +from ..services.helpers import calculate_distance, calculate_stamina_cost, calculate_player_capacity, get_locale_string, create_combat_message, get_game_message, get_resolved_player_effects from .. import database as db from ..items import ItemsManager from .. import game_logic from ..core.websockets import manager from .equipment import reduce_armor_durability from ..services import combat_engine +from ..services.status_effects import status_effects_manager logger = logging.getLogger(__name__) @@ -70,6 +71,27 @@ async def get_combat_status(current_user: dict = Depends(get_current_user)): time_elapsed = time.time() - turn_started_at turn_time_remaining = max(0, 300 - time_elapsed) + # Parse NPC status effects + npc_effects_list = [] + npc_status_str = combat.get('npc_status_effects', '') or '' + if npc_status_str: + for part in npc_status_str.split('|'): + tokens = part.split(':') + effect_name = tokens[0] if len(tokens) > 0 else '' + if not effect_name: + continue + ticks = int(tokens[2]) if len(tokens) > 2 else (int(tokens[1]) if len(tokens) > 1 else 0) + info = status_effects_manager.get_effect_info(effect_name) + npc_effects_list.append({ + 'name': info['name'], + 'icon': info['icon'], + 'ticks_remaining': ticks, + 'description': info['description'], + }) + + # Get player active buffs/debuffs (exclude cooldowns) + player_effects = await get_resolved_player_effects(current_user['id'], in_combat=True) + return { "in_combat": True, "combat": { @@ -80,8 +102,11 @@ async def get_combat_status(current_user: dict = Depends(get_current_user)): "npc_image": f"{npc_def.image_path}" if npc_def else None, "turn": combat['turn'], "round": combat.get('round', 1), - "turn_time_remaining": turn_time_remaining - } + "turn_time_remaining": turn_time_remaining, + "npc_effects": npc_effects_list, + "npc_intent": combat.get('npc_intent', 'attack') + }, + "player_effects": player_effects } @@ -154,8 +179,10 @@ async def initiate_combat( "npc_max_hp": npc_hp, "npc_image": f"{npc_def.image_path}", "turn": "player", - "round": 1 - } + "round": 1, + "npc_intent": "attack" + }, + "player_effects": await get_resolved_player_effects(current_user['id'], in_combat=True) }, "timestamp": datetime.utcnow().isoformat() }) @@ -185,8 +212,10 @@ async def initiate_combat( "npc_max_hp": npc_hp, "npc_image": f"{npc_def.image_path}", "turn": "player", - "round": 1 - } + "round": 1, + "npc_intent": "attack" + }, + "player_effects": await get_resolved_player_effects(current_user['id'], in_combat=True) } @@ -303,15 +332,20 @@ async def combat_action( exclude_player_id=player['id'] ) else: + # Fetch fresh combat state to capture any player buffs applied + fresh_combat = await db.get_active_combat(player['id']) + st_effects = fresh_combat.get('npc_status_effects', '') if fresh_combat else combat.get('npc_status_effects', '') + # NPC turn npc_msgs, player_defeated = await combat_engine.execute_npc_turn( player['id'], {'npc_hp': new_npc_hp, 'npc_max_hp': combat['npc_max_hp'], 'npc_intent': combat.get('npc_intent', 'attack'), - 'npc_status_effects': combat.get('npc_status_effects', '')}, + 'npc_status_effects': st_effects}, npc_def, reduce_armor_durability, - redis_manager + redis_manager, + locale=locale ) messages.extend(npc_msgs) @@ -336,6 +370,7 @@ async def combat_action( items_manager=ITEMS_MANAGER, reduce_armor_func=reduce_armor_durability, redis_manager=redis_manager, + locale=locale ) if result.get('error'): @@ -372,21 +407,28 @@ async def combat_action( exclude_player_id=player['id'] ) else: + # Fetch fresh combat state to capture effects applied by the skill + fresh_combat = await db.get_active_combat(player['id']) + st_effects = fresh_combat.get('npc_status_effects', '') if fresh_combat else combat.get('npc_status_effects', '') + # NPC turn after skill npc_msgs, player_defeated = await combat_engine.execute_npc_turn( player['id'], {'npc_hp': new_npc_hp, 'npc_max_hp': combat['npc_max_hp'], 'npc_intent': combat.get('npc_intent', 'attack'), - 'npc_status_effects': combat.get('npc_status_effects', '')}, + 'npc_status_effects': st_effects}, npc_def, reduce_armor_durability, - redis_manager + redis_manager, + locale=locale ) messages.extend(npc_msgs) if player_defeated: await db.remove_non_persistent_effects(player['id']) combat_over = True + else: + await db.update_combat(player['id'], {'npc_hp': new_npc_hp}) # ── USE ITEM ── elif req.action == 'use_item': @@ -421,15 +463,20 @@ async def combat_action( messages.extend(victory['messages']) quest_updates = victory.get('quest_updates', []) elif not combat_over: + # Fetch fresh combat state to capture effects applied by the item + fresh_combat = await db.get_active_combat(player['id']) + st_effects = fresh_combat.get('npc_status_effects', '') if fresh_combat else combat.get('npc_status_effects', '') + # NPC turn after item use npc_msgs, player_defeated = await combat_engine.execute_npc_turn( player['id'], {'npc_hp': result.get('target_hp', combat['npc_hp']), 'npc_max_hp': combat['npc_max_hp'], 'npc_intent': combat.get('npc_intent', 'attack'), - 'npc_status_effects': combat.get('npc_status_effects', '')}, + 'npc_status_effects': st_effects}, npc_def, reduce_armor_durability, - redis_manager + redis_manager, + locale=locale ) messages.extend(npc_msgs) @@ -440,6 +487,38 @@ async def combat_action( # Update NPC HP from throwable damage if result.get('target_hp') is not None and result['target_hp'] != combat['npc_hp']: await db.update_combat(player['id'], {'npc_hp': result['target_hp']}) + + # ── DEFEND ── + elif req.action == 'defend': + result = await combat_engine.execute_defend( + player_id=player['id'], + player=player, + player_stats=stats, + is_pvp=False, + locale=locale, + ) + messages.extend(result['messages']) + + # Fetch fresh combat state since defend could've updated stats (stamina) + fresh_combat = await db.get_active_combat(player['id']) + st_effects = fresh_combat.get('npc_status_effects', '') if fresh_combat else combat.get('npc_status_effects', '') + + # NPC turn after defend + npc_msgs, player_defeated = await combat_engine.execute_npc_turn( + player['id'], + {'npc_hp': combat['npc_hp'], 'npc_max_hp': combat['npc_max_hp'], + 'npc_intent': combat.get('npc_intent', 'attack'), + 'npc_status_effects': st_effects}, + npc_def, + reduce_armor_durability, + redis_manager, + locale=locale + ) + messages.extend(npc_msgs) + + if player_defeated: + await db.remove_non_persistent_effects(player['id']) + combat_over = True # ── FLEE ── elif req.action == 'flee': @@ -491,6 +570,7 @@ async def combat_action( # ── Build response ── updated_combat = None + npc_effects_list = [] if not combat_over: raw_combat = await db.get_active_combat(current_user['id']) if raw_combat: @@ -499,6 +579,23 @@ async def combat_action( turn_started_at = raw_combat.get('turn_started_at', 0) turn_time_remaining = max(0, 300 - (time.time() - turn_started_at)) + # Parse NPC status effects string into a list + npc_status_str = raw_combat.get('npc_status_effects', '') or '' + if npc_status_str: + for part in npc_status_str.split('|'): + tokens = part.split(':') + effect_name = tokens[0] if len(tokens) > 0 else '' + if not effect_name: + continue + ticks = int(tokens[2]) if len(tokens) > 2 else (int(tokens[1]) if len(tokens) > 1 else 0) + info = status_effects_manager.get_effect_info(effect_name) + npc_effects_list.append({ + 'name': info['name'], + 'icon': info['icon'], + 'ticks_remaining': ticks, + 'description': info['description'], + }) + updated_combat = { "npc_id": raw_combat['npc_id'], "npc_name": npc_def.name, @@ -507,13 +604,75 @@ async def combat_action( "npc_image": f"{npc_def.image_path}", "turn": raw_combat['turn'], "round": raw_combat.get('round', 1), - "turn_time_remaining": turn_time_remaining + "turn_time_remaining": turn_time_remaining, + "npc_effects": npc_effects_list, + "npc_intent": raw_combat.get('npc_intent', 'attack') } + # Get player active buffs/debuffs (exclude cooldowns) + player_effects = [] + if not combat_over: + from ..services.skills import skills_manager + all_effects = await db.get_player_effects(current_user['id']) + for eff in all_effects: + if eff.get('effect_type') == 'cooldown': + continue + resolved = status_effects_manager.resolve_player_effect( + eff.get('effect_name', ''), + eff.get('effect_icon', '⚡'), + eff.get('source', ''), + skills_manager + ) + player_effects.append({ + 'name': resolved['name'], + 'icon': resolved['icon'], + 'ticks_remaining': eff.get('ticks_remaining', 0), + 'type': eff.get('effect_type', 'buff'), + 'description': resolved['description'], + }) + updated_player = await db.get_player_by_id(current_user['id']) if not updated_player: updated_player = current_user + equipment_slots = await db.get_all_equipment(current_user['id']) + equipment = {} + for slot, item_data in equipment_slots.items(): + if item_data and item_data['item_id']: + inv_item = await db.get_inventory_item_by_id(item_data['item_id']) + if inv_item: + item_def = ITEMS_MANAGER.get_item(inv_item['item_id']) + if item_def: + # Get unique item data if this is a unique item + durability = None + max_durability = None + tier = None + unique_stats = None + if inv_item.get('unique_item_id'): + unique_item = await db.get_unique_item(inv_item['unique_item_id']) + if unique_item: + durability = unique_item.get('durability') + max_durability = unique_item.get('max_durability') + tier = unique_item.get('tier') + unique_stats = unique_item.get('unique_stats') + + equipment[slot] = { + "inventory_id": item_data['item_id'], + "item_id": item_def.id, + "name": item_def.name, + "description": item_def.description, + "emoji": item_def.emoji, + "image_path": item_def.image_path, + "durability": durability if durability is not None else None, + "max_durability": max_durability if max_durability is not None else None, + "tier": tier if tier is not None else None, + "unique_stats": unique_stats, + "stats": item_def.stats, + "encumbrance": item_def.encumbrance, + "weapon_effects": item_def.weapon_effects if hasattr(item_def, 'weapon_effects') else {} + } + if slot not in equipment: + equipment[slot] = None return { "success": True, "messages": messages, @@ -526,6 +685,8 @@ async def combat_action( "xp": updated_player['xp'], "level": updated_player['level'] }, + "player_effects": player_effects, + "equipment": equipment, "quest_updates": quest_updates } @@ -887,6 +1048,7 @@ async def pvp_combat_action( items_manager=ITEMS_MANAGER, reduce_armor_func=reduce_armor_durability, redis_manager=redis_manager, + locale=locale ) if result.get('error'): @@ -978,6 +1140,25 @@ async def pvp_combat_action( 'last_action': f"{last_action_text}|{time.time()}" }) + # ── DEFEND ── + elif req.action == 'defend': + result = await combat_engine.execute_defend( + player_id=current_player['id'], + player=current_player, + player_stats=current_player_stats, + is_pvp=True, + locale=locale, + ) + messages.extend(result['messages']) + last_action_text = f"{current_player['name']} took a defensive stance!" + + # Switch turns + await db.update_pvp_combat(pvp_combat['id'], { + 'turn': 'defender' if is_attacker else 'attacker', + 'turn_started_at': time.time(), + 'last_action': f"{last_action_text}|{time.time()}" + }) + # ── FLEE ── elif req.action == 'flee': result = await combat_engine.execute_flee_pvp( diff --git a/api/routers/crafting.py b/api/routers/crafting.py index b6afbd5..fdaf352 100644 --- a/api/routers/crafting.py +++ b/api/routers/crafting.py @@ -25,13 +25,15 @@ logger = logging.getLogger(__name__) LOCATIONS = None ITEMS_MANAGER = None WORLD = None +redis_manager = None -def init_router_dependencies(locations, items_manager, world): +def init_router_dependencies(locations, items_manager, world, redis_mgr=None): """Initialize router with game data dependencies""" - global LOCATIONS, ITEMS_MANAGER, WORLD + global LOCATIONS, ITEMS_MANAGER, WORLD, redis_manager LOCATIONS = locations ITEMS_MANAGER = items_manager WORLD = world + redis_manager = redis_mgr router = APIRouter(tags=["crafting"]) @@ -509,9 +511,8 @@ async def uncraft_item(request: UncraftItemRequest, current_user: dict = Depends adjusted_quantity = int(round(base_quantity * durability_ratio)) mat_def = ITEMS_MANAGER.items.get(material['item_id']) - mat_name = mat_def.name if mat_def else material['item_id'] - loss_key = (material['item_id'], mat_name) + loss_key = material['item_id'] # If durability is too low (< 10%), yield nothing for this material if durability_ratio < 0.1 or adjusted_quantity <= 0: @@ -535,7 +536,7 @@ async def uncraft_item(request: UncraftItemRequest, current_user: dict = Depends # But we need to check capacity. # Let's accumulate pending yield. - yield_key = (material['item_id'], mat_name, mat_def.emoji if mat_def else '📦', mat_def) + yield_key = material['item_id'] if yield_key not in materials_yielded_dict: materials_yielded_dict[yield_key] = 0 materials_yielded_dict[yield_key] += adjusted_quantity @@ -546,18 +547,23 @@ async def uncraft_item(request: UncraftItemRequest, current_user: dict = Depends materials_dropped = [] # Convert lost dict to list - for (item_id, name), qty in materials_lost_dict.items(): + for item_id, qty in materials_lost_dict.items(): + mat_def = ITEMS_MANAGER.items.get(item_id) materials_lost.append({ 'item_id': item_id, - 'name': name, - 'quantity': qty, - 'reason': 'lost_or_low_durability' + 'name': mat_def.name if mat_def else item_id, + 'emoji': mat_def.emoji if mat_def else '📦', + 'quantity': qty }) # Process yield - for (item_id, name, emoji, mat_def), qty in materials_yielded_dict.items(): - mat_weight = getattr(mat_def, 'weight', 0) * qty - mat_volume = getattr(mat_def, 'volume', 0) * qty + for item_id, qty in materials_yielded_dict.items(): + mat_def = ITEMS_MANAGER.items.get(item_id) + mat_name = mat_def.name if mat_def else item_id + emoji = mat_def.emoji if mat_def else '📦' + + mat_weight = getattr(mat_def, 'weight', 0) * qty if mat_def else 0 + mat_volume = getattr(mat_def, 'volume', 0) * qty if mat_def else 0 # Simple check against capacity (assuming current_weight was just updated from DB) # Note: we might fill up mid-loop. ideally we add one by one or check total. diff --git a/api/routers/equipment.py b/api/routers/equipment.py index 6843fd4..d3ee33e 100644 --- a/api/routers/equipment.py +++ b/api/routers/equipment.py @@ -50,6 +50,14 @@ async def equip_item( player_id = current_user['id'] locale = request.headers.get('Accept-Language', 'en') + # Check if in combat + in_combat = await db.get_active_combat(player_id) + if in_combat: + raise HTTPException( + status_code=400, + detail=get_game_message('cannot_equip_combat', locale) + ) + # Get the inventory item inv_item = await db.get_inventory_item_by_id(equip_req.inventory_id) if not inv_item or inv_item['character_id'] != player_id: @@ -156,6 +164,14 @@ async def unequip_item( player_id = current_user['id'] locale = request.headers.get('Accept-Language', 'en') + # Check if in combat + in_combat = await db.get_active_combat(player_id) + if in_combat: + raise HTTPException( + status_code=400, + detail=get_game_message('cannot_equip_combat', locale) + ) + # Check if slot is valid valid_slots = ['head', 'torso', 'legs', 'feet', 'weapon', 'offhand', 'backpack'] if unequip_req.slot not in valid_slots: @@ -412,7 +428,7 @@ async def repair_item( -async def reduce_armor_durability(player_id: int, damage_taken: int) -> tuple: +async def reduce_armor_durability(player_id: int, damage_taken: int, is_defending: bool = False) -> tuple: """ Reduce durability of equipped armor pieces when taking damage. Formula: durability_loss = max(1, (damage_taken / armor_value) * base_reduction_rate) @@ -452,7 +468,7 @@ async def reduce_armor_durability(player_id: int, damage_taken: int) -> tuple: # Calculate durability loss for each armor piece # Balanced formula: armor should last many combats (10-20+ hits for low tier) - base_reduction_rate = 0.1 # Reduced from 0.5 to make armor more durable + base_reduction_rate = 0.2 if is_defending else 0.1 # Reduced from 0.5 to make armor more durable broken_armor = [] for armor in equipped_armor: diff --git a/api/routers/game_routes.py b/api/routers/game_routes.py index 1b2d803..dbfd965 100644 --- a/api/routers/game_routes.py +++ b/api/routers/game_routes.py @@ -228,7 +228,8 @@ async def get_game_state(current_user: dict = Depends(get_current_user)): raise HTTPException(status_code=404, detail="Player not found") # Get player status effects - status_effects = await db.get_player_effects(player_id) + from ..services.helpers import get_resolved_player_effects + status_effects = await get_resolved_player_effects(player_id) player['status_effects'] = status_effects # Get location @@ -375,13 +376,21 @@ async def get_game_state(current_user: dict = Depends(get_current_user)): "tags": getattr(location, 'tags', []) } + from ..services.stats import calculate_derived_stats + derived_stats = await calculate_derived_stats(player_id, redis_manager) + # Add weight/volume to player data player_with_capacity = dict(player) player_with_capacity['current_weight'] = round(total_weight, 2) - player_with_capacity['max_weight'] = round(max_weight, 2) player_with_capacity['current_volume'] = round(total_volume, 2) + + player_with_capacity['max_weight'] = round(derived_stats.get('carry_weight', max_weight), 2) player_with_capacity['max_volume'] = round(max_volume, 2) + player_with_capacity['max_hp'] = derived_stats.get('max_hp', player['max_hp']) + player_with_capacity['max_stamina'] = derived_stats.get('max_stamina', player['max_stamina']) + player_with_capacity['derived_stats'] = derived_stats + # Calculate movement cooldown import time current_time = time.time() @@ -412,20 +421,29 @@ async def get_player_profile(current_user: dict = Depends(get_current_user)): raise HTTPException(status_code=404, detail="Player not found") # Get player status effects - status_effects = await db.get_player_effects(player_id) + from ..services.helpers import get_resolved_player_effects + status_effects = await get_resolved_player_effects(player_id) player['status_effects'] = status_effects # Get capacity metrics (weight/volume) using the helper function # We don't need the inventory array itself, just the capacity calculations _, total_weight, total_volume, max_weight, max_volume = await _get_enriched_inventory(player_id) + from ..services.stats import calculate_derived_stats + derived_stats = await calculate_derived_stats(player_id, redis_manager) + # Add weight/volume to player data player_with_capacity = dict(player) player_with_capacity['current_weight'] = round(total_weight, 2) - player_with_capacity['max_weight'] = round(max_weight, 2) player_with_capacity['current_volume'] = round(total_volume, 2) + + player_with_capacity['max_weight'] = round(derived_stats.get('carry_weight', max_weight), 2) player_with_capacity['max_volume'] = round(max_volume, 2) + player_with_capacity['max_hp'] = derived_stats.get('max_hp', player['max_hp']) + player_with_capacity['max_stamina'] = derived_stats.get('max_stamina', player['max_stamina']) + player_with_capacity['derived_stats'] = derived_stats + # Calculate movement cooldown import time current_time = time.time() @@ -962,6 +980,7 @@ async def move( await db.update_player_statistics(current_user['id'], combats_initiated=1, increment=True) encounter_triggered = True + from ..services.helpers import get_resolved_player_effects combat_data = { "npc_id": enemy_id, "npc_name": npc_def.name, @@ -972,6 +991,7 @@ async def move( "round": 1, "npc_intent": initial_intent['type'] } + player_effects = await get_resolved_player_effects(current_user['id'], in_combat=True) response = { "success": True, @@ -986,7 +1006,8 @@ async def move( "triggered": True, "enemy_id": enemy_id, "message": get_game_message('enemy_ambush', locale), - "combat": combat_data + "combat": combat_data, + "player_effects": player_effects } # Broadcast movement to WebSocket clients @@ -1585,6 +1606,10 @@ async def get_character_sheet(current_user: dict = Depends(get_current_user)): # Get all perks with availability all_perks = perks_manager.get_available_perks(player, owned_perk_ids) + # Get active status effects + from ..services.helpers import get_resolved_player_effects + status_effects = await get_resolved_player_effects(character_id) + # Calculate perk points total_perk_points = get_total_perk_points(player['level']) used_perk_points = len(owned_perk_ids) @@ -1607,6 +1632,7 @@ async def get_character_sheet(current_user: dict = Depends(get_current_user)): "used_points": used_perk_points, "all_perks": all_perks, }, + "status_effects": status_effects, "character": { "name": player['name'], "level": player['level'], diff --git a/api/routers/loot.py b/api/routers/loot.py index 86caf36..7ba073c 100644 --- a/api/routers/loot.py +++ b/api/routers/loot.py @@ -25,13 +25,15 @@ logger = logging.getLogger(__name__) LOCATIONS = None ITEMS_MANAGER = None WORLD = None +redis_manager = None -def init_router_dependencies(locations, items_manager, world): +def init_router_dependencies(locations, items_manager, world, redis_mgr=None): """Initialize router with game data dependencies""" - global LOCATIONS, ITEMS_MANAGER, WORLD + global LOCATIONS, ITEMS_MANAGER, WORLD, redis_manager LOCATIONS = locations ITEMS_MANAGER = items_manager WORLD = world + redis_manager = redis_mgr router = APIRouter(tags=["loot"]) diff --git a/api/services/combat_engine.py b/api/services/combat_engine.py index 42b29bb..7242bb4 100644 --- a/api/services/combat_engine.py +++ b/api/services/combat_engine.py @@ -208,8 +208,18 @@ async def execute_attack( broken_armor = [] if is_pvp: + is_defending = False + target_effects = await db.get_player_effects(target['id']) + defending_effect = next((e for e in target_effects if e['effect_name'] == 'defending'), None) + if defending_effect: + is_defending = True + reduction = defending_effect.get('value', 50) / 100 + damage = max(1, int(damage * (1 - reduction))) + messages.append(create_combat_message("damage_reduced", origin="enemy", reduction=int(reduction * 100))) + await db.remove_effect(target['id'], 'defending') + # PvP: use equipment-based armor reduction + durability - armor_absorbed, broken_armor = await reduce_armor_func(target['id'], damage) + armor_absorbed, broken_armor = await reduce_armor_func(target['id'], damage, is_defending) actual_damage = max(1, damage - armor_absorbed) else: # PvE: use NPC's flat defense value @@ -279,6 +289,54 @@ async def execute_attack( } +async def execute_defend( + player_id: int, + player: dict, + player_stats: dict, + is_pvp: bool, + locale: str = 'en' +) -> Dict[str, Any]: + """ + Execute a defend action. + Reduces incoming damage by 50% for the next turn, but increases durability loss. + + Returns: { + messages: list + } + """ + from .. import database as db + from .helpers import create_combat_message, get_game_message + + messages = [] + + # 5% Stamina restore + stamina_restore = max(5, int(player_stats.get('max_stamina', 100) * 0.05)) + new_stamina = min(player_stats.get('max_stamina', 100), player.get('stamina', 100) + stamina_restore) + await db.update_player(player_id, stamina=new_stamina) + + # Add defending effect + await db.add_effect( + player_id=player_id, + effect_name="defending", + effect_icon="🛡️", + effect_type="buff", + ticks_remaining=1, + persist_after_combat=False, + source="combat_defend", + value=50 # 50% reduction + ) + + messages.append(create_combat_message( + "player_defend", + origin="player" + )) + + return { + 'messages': messages, + 'stamina_restored': stamina_restore, + } + + # ============================================================================ # SKILL ACTION # ============================================================================ @@ -294,6 +352,7 @@ async def execute_skill( items_manager: ItemsManager, reduce_armor_func, redis_manager=None, + locale: str = 'en' ) -> Dict[str, Any]: """ Execute a skill action. Validates requirements, deducts stamina, applies effects. @@ -402,6 +461,17 @@ async def execute_skill( if effects.get('guaranteed_crit'): damage = int(damage * player_stats.get('crit_damage', 1.5)) + is_defending = False + if is_pvp: + target_effects = await db.get_player_effects(target['id']) + defending_effect = next((e for e in target_effects if e['effect_name'] == 'defending'), None) + if defending_effect: + is_defending = True + reduction = defending_effect.get('value', 50) / 100 + damage = max(1, int(damage * (1 - reduction))) + messages.append(create_combat_message("damage_reduced", origin="enemy", reduction=int(reduction * 100))) + await db.remove_effect(target['id'], 'defending') + # Multi-hit num_hits = effects.get('hits', 1) total_damage = 0 @@ -412,7 +482,7 @@ async def execute_skill( if is_pvp: # PvP: armor from equipment - absorbed, broken_armor = await reduce_armor_func(target['id'], hit_dmg) + absorbed, broken_armor = await reduce_armor_func(target['id'], hit_dmg, is_defending) total_armor_absorbed += absorbed for broken in broken_armor: messages.append(create_combat_message( @@ -450,8 +520,11 @@ async def execute_skill( "skill_heal", origin="player", heal=heal_amount, skill_icon="🩸" )) + from .helpers import calculate_dynamic_status_damage # Poison DoT - if 'poison_damage' in effects: + poison_dmg = calculate_dynamic_status_damage(effects, 'poison', target) + if poison_dmg is not None: + poison_dur = effects.get('poison_duration', 3) if is_pvp: # PvP: add as player effect await db.add_effect( @@ -459,14 +532,14 @@ async def execute_skill( effect_name="Poison", effect_icon="🧪", effect_type="damage", - damage_per_tick=effects['poison_damage'], - ticks_remaining=effects['poison_duration'], + damage_per_tick=poison_dmg, + ticks_remaining=poison_dur, persist_after_combat=True, source=f"skill_poison:{skill.id}" ) else: # PvE: add to npc_status_effects string - poison_str = f"poison:{effects['poison_damage']}:{effects['poison_duration']}" + poison_str = f"poison:{poison_dmg}:{poison_dur}" existing = combat_state.get('npc_status_effects', '') or '' if existing: existing += '|' + poison_str @@ -476,7 +549,38 @@ async def execute_skill( messages.append(create_combat_message( "skill_effect", origin="player", - message=f"🧪 Poisoned! ({effects['poison_damage']} dmg/turn)" + message=f"🧪 Poisoned! ({poison_dmg} dmg/turn)" + )) + + # Burn DoT + burn_dmg = calculate_dynamic_status_damage(effects, 'burn', target) + if burn_dmg is not None: + burn_dur = effects.get('burn_duration', 3) + if is_pvp: + # PvP: add as player effect + await db.add_effect( + player_id=target['id'], + effect_name="Burning", + effect_icon="🔥", + effect_type="damage", + damage_per_tick=burn_dmg, + ticks_remaining=burn_dur, + persist_after_combat=True, + source=f"skill_burn:{skill.id}" + ) + else: + # PvE: add to npc_status_effects string + burn_str = f"burning:{burn_dmg}:{burn_dur}" + existing = combat_state.get('npc_status_effects', '') or '' + if existing: + existing += '|' + burn_str + else: + existing = burn_str + await db.update_combat(player_id, {'npc_status_effects': existing}) + + messages.append(create_combat_message( + "skill_effect", origin="player", + message=f"🔥 Burning! ({burn_dmg} dmg/turn)" )) # Stun chance @@ -506,7 +610,7 @@ async def execute_skill( await db.update_combat(player_id, {'npc_status_effects': existing}) messages.append(create_combat_message( - "skill_effect", origin="player", message="💫 Stunned!" + "skill_effect", origin="player", message=get_game_message('stunned_status', locale) )) # Weapon durability @@ -721,7 +825,13 @@ async def execute_use_item( # 6. Status effect on target (burn from molotov etc.) — PvE only status_effect = combat_effects.get('status') if not is_pvp else None if status_effect and not target_defeated: - npc_status = f"{status_effect['name']}:{status_effect.get('damage_per_tick', 0)}:{status_effect.get('ticks', 1)}" + dmg = status_effect.get('damage_per_tick', 0) + if 'damage_percent' in status_effect: + max_hp = target.get('npc_max_hp', target.get('max_hp', 100)) + base_dmg = max_hp * status_effect['damage_percent'] + dmg = random.randint(max(1, int(base_dmg * 0.8)), max(1, int(base_dmg * 1.2))) + + npc_status = f"{status_effect['name']}:{dmg}:{status_effect.get('ticks', 1)}" await db.update_combat(player_id, {'npc_status_effects': npc_status}) messages.append(create_combat_message( "effect_applied", origin="player", @@ -1123,6 +1233,7 @@ async def execute_npc_turn( npc_def, reduce_armor_func, redis_manager=None, + locale: str = 'en' ) -> Tuple[List[dict], bool]: """ Execute the NPC's turn with buff-aware damage reduction. @@ -1145,7 +1256,7 @@ async def execute_npc_turn( from ..game_logic import npc_attack messages, player_defeated = await npc_attack( - player_id, combat, npc_def, reduce_armor_func, player_stats=stats + player_id, combat, npc_def, reduce_armor_func, player_stats=stats, locale=locale ) return messages, player_defeated diff --git a/api/services/helpers.py b/api/services/helpers.py index efc9ec3..48a2f91 100644 --- a/api/services/helpers.py +++ b/api/services/helpers.py @@ -3,11 +3,27 @@ Helper utilities for game calculations and common operations. Contains distance calculations, stamina costs, capacity calculations, etc. """ import math -from typing import Tuple, List, Dict, Any, Union +import random +from typing import Tuple, List, Dict, Any, Union, Optional from .. import database as db from ..items import ItemsManager +def calculate_dynamic_status_damage(effects: dict, prefix: str, target: dict) -> Optional[int]: + """Helper to calculate status damage based on percentage over max HP.""" + if f'{prefix}_percent' in effects: + target_max_hp = target.get('max_hp') or target.get('npc_max_hp', 100) + pct = effects[f'{prefix}_percent'] + base_dmg = target_max_hp * pct + # +/- 20% deviation + min_dmg = max(1, int(base_dmg * 0.8)) + max_dmg = max(1, int(base_dmg * 1.2)) + return random.randint(min_dmg, max_dmg) + elif f'{prefix}_damage' in effects: + return effects[f'{prefix}_damage'] + return None + + def get_locale_string(value: Union[str, Dict[str, str]], lang: str = 'en') -> str: """Helper to safely get string from i18n object or string.""" if isinstance(value, dict): @@ -54,6 +70,8 @@ GAME_MESSAGES = { 'pvp_combat_started_broadcast': {'en': "⚔️ PvP combat started between {attacker} and {defender}!", 'es': "⚔️ ¡Combate PvP iniciado entre {attacker} y {defender}!"}, 'flee_success_text': {'en': "{name} fled from combat!", 'es': "¡{name} huyó del combate!"}, 'flee_fail_text': {'en': "{name} tried to flee but failed!", 'es': "¡{name} intentó huir pero falló!"}, + 'stunned_status': {'en': "💫 Stunned!", 'es': "💫 ¡Aturdido!"}, + 'npc_stunned_cannot_act': {'en': "💫 {npc_name} is stunned and cannot act!", 'es': "💫 ¡{npc_name} está aturdido y no puede actuar!"}, # Loot 'corpse_name_npc': {'en': "{name} Corpse", 'es': "Cadáver de {name}"}, @@ -101,12 +119,16 @@ GAME_MESSAGES = { 'item_used': {'en': "Used {name}", 'es': "Usado {name}"}, 'no_item': {'en': "You don't have this item", 'es': "No tienes este objeto"}, 'cannot_use': {'en': "This item cannot be used", 'es': "Este objeto no se puede usar"}, + 'cannot_equip_combat': {'en': "Cannot change equipment during combat", 'es': "No puedes cambiar de equipamiento durante el combate"}, 'cured': {'en': "Cured", 'es': "Curado"}, # Status Effects 'statusDamage': {'en': "You took {damage} damage from status effects", 'es': "Has recibido {damage} de daño por efectos de estado"}, 'statusHeal': {'en': "You recovered {heal} HP from status effects", 'es': "Has recuperado {heal} vida por efectos de estado"}, 'diedFromStatus': {'en': "You died from status effects", 'es': "Has muerto por efectos de estado"}, + + # Combat Warnings + 'enemy_charging': {'en': "⚠️ {enemy} is gathering strength for a massive attack!", 'es': "⚠️ ¡{enemy} está reuniendo fuerzas para un ataque masivo!"}, } def get_game_message(key: str, lang: str = 'en', **kwargs) -> str: @@ -140,6 +162,36 @@ def translate_travel_message(direction: str, location_name: str, lang: str = 'en import json +from typing import List, Dict, Any, Tuple +from .. import database as db + +async def get_resolved_player_effects(player_id: int, in_combat: bool = False) -> List[Dict]: + """Helper to fetch and format active player effects for combat payloads.""" + from ..services.skills import skills_manager + from ..services.status_effects import status_effects_manager + + player_effects = [] + all_effects = await db.get_player_effects(player_id) + for eff in all_effects: + if eff.get('effect_type') == 'cooldown': + continue + resolved = status_effects_manager.resolve_player_effect( + eff.get('effect_name', ''), + eff.get('effect_icon', '⚡'), + eff.get('source', ''), + skills_manager, + in_combat=in_combat + ) + player_effects.append({ + 'name': resolved['name'], + 'effect_name': eff.get('effect_name', ''), # Needed for frontend state tracking + 'icon': resolved['icon'], + 'ticks_remaining': eff.get('ticks_remaining', 0), + 'damage_per_tick': eff.get('damage_per_tick', 0), # Needed for logic + 'type': eff.get('effect_type', 'buff'), + 'description': resolved['description'], + }) + return player_effects def create_combat_message(message_type: str, origin: str = "neutral", **data) -> dict: """Create a structured combat message object. @@ -274,7 +326,7 @@ async def calculate_player_capacity(inventory: List[Dict[str, Any]], items_manag return current_weight, max_weight, current_volume, max_volume -async def reduce_armor_durability(player_id: int, damage_taken: int, items_manager: ItemsManager) -> Tuple[int, List[Dict[str, Any]]]: +async def reduce_armor_durability(player_id: int, damage_taken: int, items_manager: ItemsManager, is_defending: bool = False) -> Tuple[int, List[Dict[str, Any]]]: """ Reduce durability of equipped armor pieces when taking damage. Returns: (armor_damage_absorbed, broken_armor_pieces) @@ -311,7 +363,7 @@ async def reduce_armor_durability(player_id: int, damage_taken: int, items_manag armor_absorbed = min(damage_taken // 2, total_armor) # Calculate durability loss for each armor piece - base_reduction_rate = 0.1 + base_reduction_rate = 0.2 if is_defending else 0.1 broken_armor = [] for armor in equipped_armor: diff --git a/api/services/skills.py b/api/services/skills.py index a48210b..c822182 100644 --- a/api/services/skills.py +++ b/api/services/skills.py @@ -60,6 +60,10 @@ class SkillsManager: """ available = [] for skill_id, skill in self.skills.items(): + # Skip NPC-only skills (assumed to be those with 0 stat threshold and level 1 requirement) + if (skill.stat_threshold <= 0 and skill.level_requirement <= 1) or getattr(skill, 'npc_only', False): + continue + stat_value = character.get(skill.stat_requirement, 0) level = character.get('level', 1) diff --git a/api/services/stats.py b/api/services/stats.py index d4fd6c8..c860d1a 100644 --- a/api/services/stats.py +++ b/api/services/stats.py @@ -36,7 +36,30 @@ async def calculate_derived_stats(character_id: int, redis_mgr=None) -> Dict[str if not char: return _empty_stats() - equipment = await db.get_all_equipment(character_id) + raw_equipment = await db.get_all_equipment(character_id) + enriched_equipment = {} + + for slot, item_data in raw_equipment.items(): + if not item_data or not item_data.get('item_id'): + continue + + inv_item = await db.get_inventory_item_by_id(item_data['item_id']) + if not inv_item: + continue + + enriched_item = { + 'item_id': inv_item['item_id'], # String ID + 'inventory_id': item_data['item_id'] + } + + unique_item_id = inv_item.get('unique_item_id') + if unique_item_id: + unique_item = await db.get_unique_item(unique_item_id) + if unique_item and unique_item.get('unique_stats'): + enriched_item['unique_stats'] = unique_item['unique_stats'] + + enriched_equipment[slot] = enriched_item + effects = await db.get_player_effects(character_id) # 3. Fetch owned perks @@ -44,7 +67,7 @@ async def calculate_derived_stats(character_id: int, redis_mgr=None) -> Dict[str owned_perk_ids = [row['perk_id'] for row in owned_perks] # 4. Compute derived stats - stats = _compute_stats(char, equipment, effects, owned_perk_ids) + stats = _compute_stats(char, enriched_equipment, effects, owned_perk_ids) # 5. Cache in Redis (5 min TTL) if redis_mgr and redis_mgr.redis_client: @@ -95,21 +118,29 @@ def _compute_stats(char: Dict[str, Any], equipment: Dict[str, Any], effects: Lis if not item_data or not item_data.get('item_id'): continue - # Get inventory item to find the item definition - inv_item_sync = item_data # equipment dict already has item_id reference - item_def = ITEMS_MANAGER.get_item(inv_item_sync.get('item_id', '')) + item_id_str = item_data.get('item_id', '') + item_def = ITEMS_MANAGER.get_item(item_id_str) - # Try to get item_id from the inventory item if the direct lookup failed if not item_def: continue + # Merge base stats and unique stats + merged_stats = {} if item_def.stats: - total_armor += item_def.stats.get('armor', 0) - weapon_crit += item_def.stats.get('crit_chance', 0) + merged_stats.update(item_def.stats) + if item_data.get('unique_stats'): + merged_stats.update(item_data['unique_stats']) + + if merged_stats: + total_armor += merged_stats.get('armor', 0) + weapon_crit += merged_stats.get('crit_chance', 0) + max_hp += merged_stats.get('max_hp', 0) + max_stamina += merged_stats.get('max_stamina', 0) + carry_weight += merged_stats.get('weight_capacity', 0) if slot == 'weapon': - weapon_damage_min = item_def.stats.get('damage_min', 0) - weapon_damage_max = item_def.stats.get('damage_max', 0) + weapon_damage_min = merged_stats.get('damage_min', 0) + weapon_damage_max = merged_stats.get('damage_max', 0) if slot == 'offhand': has_shield = True @@ -218,6 +249,28 @@ async def invalidate_stats_cache(character_id: int, redis_mgr=None): await redis_mgr.redis_client.delete(f"stats:{character_id}") except Exception: pass + + # Sync derived max_hp and max_stamina to the database characters table + try: + derived = await calculate_derived_stats(character_id, redis_mgr) + char = await db.get_player_by_id(character_id) + if char: + new_max_hp = derived.get('max_hp', char['max_hp']) + new_max_stamina = derived.get('max_stamina', char['max_stamina']) + + if new_max_hp != char['max_hp'] or new_max_stamina != char['max_stamina']: + new_hp = min(char['hp'], new_max_hp) + new_stamina = min(char['stamina'], new_max_stamina) + await db.update_player( + character_id, + max_hp=new_max_hp, + max_stamina=new_max_stamina, + hp=new_hp, + stamina=new_stamina + ) + except Exception as e: + import logging + logging.getLogger(__name__).warning(f"Failed to sync derived stats to DB for {character_id}: {e}") def get_flee_chance(flee_chance_base: float, enemy_level: int) -> float: diff --git a/api/services/status_effects.py b/api/services/status_effects.py new file mode 100644 index 0000000..4b6279e --- /dev/null +++ b/api/services/status_effects.py @@ -0,0 +1,101 @@ +""" +Status Effects Manager. +Loads status effect definitions from gamedata/status_effects.json. +""" +import json +import os +from typing import Dict, Any, Optional + + +class StatusEffect: + """Represents a status effect definition.""" + def __init__(self, effect_id: str, data: Dict[str, Any]): + self.id = effect_id + self.icon = data.get('icon', '⚡') + self.name = data.get('name', effect_id.capitalize()) + self.description = data.get('description', effect_id.capitalize()) + self.type = data.get('type', 'debuff') + + +class StatusEffectsManager: + """Manages status effect definitions loaded from JSON.""" + + def __init__(self, gamedata_path: str = "./gamedata"): + self.effects: Dict[str, StatusEffect] = {} + filepath = os.path.join(gamedata_path, 'status_effects.json') + self._load(filepath) + + def _load(self, filepath: str): + """Load status effects from a JSON file.""" + try: + with open(filepath, 'r', encoding='utf-8') as f: + data = json.load(f) + for effect_id, effect_data in data.get('effects', {}).items(): + self.effects[effect_id] = StatusEffect(effect_id, effect_data) + print(f"✨ Loaded {len(self.effects)} status effects") + except FileNotFoundError: + print("⚠️ status_effects.json not found") + except Exception as e: + print(f"⚠️ Error loading status_effects.json: {e}") + + def get_effect(self, effect_id: str) -> Optional[StatusEffect]: + """Get a status effect by its ID.""" + return self.effects.get(effect_id) + + def get_effect_info(self, effect_id: str) -> Dict[str, Any]: + """Get effect info dict for API responses. Returns a fallback if not found.""" + effect = self.effects.get(effect_id) + if effect: + return { + 'name': effect.name, + 'icon': effect.icon, + 'description': effect.description, + 'type': effect.type, + } + # Fallback for unknown effects + return { + 'name': {'en': effect_id.capitalize(), 'es': effect_id.capitalize()}, + 'icon': '⚡', + 'description': {'en': effect_id.capitalize(), 'es': effect_id.capitalize()}, + 'type': 'debuff', + } + + def resolve_player_effect(self, effect_name: str, effect_icon: str, source: str, skills_manager=None, in_combat: bool = True) -> Dict[str, Any]: + """ + Resolve translated name and description for a player effect. + Tries skill source first, then status_effects.json, then fallback. + """ + translated_name = effect_name + translated_desc = '' + + # 1. Try to get from skill source (e.g., "skill:fortify") + if source.startswith('skill:') and skills_manager: + skill_id = source.split(':', 1)[1] + skill_def = skills_manager.get_skill(skill_id) + if skill_def: + translated_name = skill_def.name + translated_desc = skill_def.description + + # 2. Try to get from status_effects.json by lowercased effect name + if not translated_desc: + effect_key = effect_name.lower() + effect = self.effects.get(effect_key) + if effect: + translated_name = effect.name + translated_desc = effect.description + + # 3. Fallback: wrap the raw name as a translatable dict + if not translated_desc: + translated_desc = {'en': effect_name, 'es': effect_name} + if isinstance(translated_name, str): + translated_name = {'en': translated_name, 'es': translated_name} + + return { + 'name': translated_name, + 'icon': effect_icon or '⚡', + 'description': translated_desc, + } + + +# Module-level singleton +status_effects_manager = StatusEffectsManager() diff --git a/gamedata/items.json b/gamedata/items.json index 4dd62de..44273d3 100644 --- a/gamedata/items.json +++ b/gamedata/items.json @@ -897,7 +897,7 @@ "repair_percentage": 25, "stats": { "armor": 3, - "hp_bonus": 10 + "max_hp": 10 }, "emoji": "🦺", "image_path": "images/items/leather_vest.webp", @@ -988,7 +988,7 @@ "repair_percentage": 25, "stats": { "armor": 2, - "stamina_bonus": 5 + "max_stamina": 5 }, "emoji": "🥾", "image_path": "images/items/sturdy_boots.webp", @@ -1036,7 +1036,7 @@ "repair_percentage": 25, "stats": { "armor": 2, - "hp_bonus": 5 + "max_hp": 5 }, "emoji": "👖", "image_path": "images/items/padded_pants.webp", @@ -1261,7 +1261,7 @@ "status": { "name": "burning", "icon": "🔥", - "damage_per_tick": 3, + "damage_percent": 0.08, "ticks": 3, "persist_after_combat": true } @@ -1279,8 +1279,8 @@ "emoji": "💨", "image_path": "images/items/smoke_bomb.webp", "description": { - "en": "Creates a smoke screen. Greatly increases flee chance for 1 turn.", - "es": "Crea una cortina de humo. Aumenta la probabilidad de huir por 1 turno." + "en": "Creates a smoke screen. Greatly increases flee chance for 1 {{interval}}.", + "es": "Crea una cortina de humo. Aumenta la probabilidad de huir por 1 {{interval}}." }, "stackable": true, "combat_usable": true, @@ -1328,8 +1328,8 @@ "emoji": "⚡", "image_path": "images/items/adrenaline.webp", "description": { - "en": "Increases damage output for 2 turns. Only usable in combat.", - "es": "Aumenta el daño durante 2 turnos. Solo usable en combate." + "en": "Increases damage output for 2 {{intervals_plural}}. Only usable in combat.", + "es": "Aumenta el daño durante 2 {{intervals_plural}}. Solo usable en combate." }, "stackable": true, "consumable": true, diff --git a/gamedata/npcs.json b/gamedata/npcs.json index 706b3e3..302f5b5 100644 --- a/gamedata/npcs.json +++ b/gamedata/npcs.json @@ -47,6 +47,10 @@ ], "flee_chance": 0.3, "status_inflict_chance": 0.15, + "skills": [ + "rabid_bite", + "howl" + ], "image_path": "images/npcs/feral_dog.webp", "death_message": { "en": "The feral dog whimpers and collapses. Perhaps it was just hungry...", @@ -112,6 +116,10 @@ ], "flee_chance": 0.2, "status_inflict_chance": 0.1, + "skills": [ + "bandage_self", + "quick_slash" + ], "image_path": "images/npcs/raider_scout.webp", "death_message": { "en": "The raider scout falls with a final gasp. Their supplies are yours.", @@ -159,6 +167,9 @@ ], "flee_chance": 0.5, "status_inflict_chance": 0.25, + "skills": [ + "rabid_bite" + ], "image_path": "images/npcs/mutant_rat.webp", "death_message": { "en": "The mutant rat squeals its last and goes still.", @@ -212,6 +223,10 @@ ], "flee_chance": 0.1, "status_inflict_chance": 0.3, + "skills": [ + "rabid_bite", + "power_strike" + ], "image_path": "images/npcs/infected_human.webp", "death_message": { "en": "The infected human finally finds peace in death.", @@ -289,6 +304,10 @@ ], "flee_chance": 0.25, "status_inflict_chance": 0.05, + "skills": [ + "bandage_self", + "power_strike" + ], "image_path": "images/npcs/scavenger.webp", "death_message": { "en": "The scavenger's struggle ends. Survival has no mercy.", @@ -305,6 +324,7 @@ "en": "A huge terrifying monster.", "es": "Un monstruo enorme y aterrador." }, + "image_path": "images/npcs/test_boss.webp", "emoji": "👹", "hp_min": 1000, "hp_max": 2000, @@ -315,6 +335,11 @@ "loot_table": [], "flee_chance": 0.0, "status_inflict_chance": 0.5, + "skills": [ + "howl", + "power_strike", + "crushing_blow" + ], "death_message": { "en": "The boss is defeated.", "es": "El jefe ha sido derrotado." diff --git a/gamedata/perks.json b/gamedata/perks.json index ee091a0..aeb1f91 100644 --- a/gamedata/perks.json +++ b/gamedata/perks.json @@ -91,8 +91,8 @@ "es": "Resistente" }, "description": { - "en": "Status effects last 1 fewer turn (min 1)", - "es": "Los efectos de estado duran 1 turno menos (mín 1)" + "en": "Status effects last 1 fewer {{interval}} (min 1)", + "es": "Los efectos de estado duran 1 {{interval}} menos (mín 1)" }, "icon": "💪", "requirements": { diff --git a/gamedata/skills.json b/gamedata/skills.json index 88292ab..3e094ff 100644 --- a/gamedata/skills.json +++ b/gamedata/skills.json @@ -47,8 +47,8 @@ "es": "Furia Berserker" }, "description": { - "en": "+50% damage for 3 turns, but +25% damage taken", - "es": "+50% de daño durante 3 turnos, pero +25% de daño recibido" + "en": "+50% damage for 3 {{intervals_plural}}, but +25% damage taken", + "es": "+50% de daño durante 3 {{intervals_plural}}, pero +25% de daño recibido" }, "icon": "🔥", "stat_requirement": "strength", @@ -131,8 +131,8 @@ "es": "Hoja Envenenada" }, "description": { - "en": "80% damage + poison (3 dmg/turn for 4 turns)", - "es": "80% de daño + veneno (3 de daño/turno durante 4 turnos)" + "en": "80% damage + poison (5% max HP/{{interval}} for 4 {{intervals_plural}})", + "es": "80% de daño + veneno (5% vida máx/{{interval}} durante 4 {{intervals_plural}})" }, "icon": "🧪", "stat_requirement": "agility", @@ -142,7 +142,7 @@ "stamina_cost": 6, "effects": { "damage_multiplier": 0.8, - "poison_damage": 3, + "poison_percent": 0.05, "poison_duration": 4 } }, @@ -172,8 +172,8 @@ "es": "Fortificar" }, "description": { - "en": "Reduce incoming damage by 60% for 2 turns", - "es": "Reduce el daño recibido en un 60% durante 2 turnos" + "en": "Reduce incoming damage by 60% for 2 {{intervals_plural}}", + "es": "Reduce el daño recibido en un 60% durante 2 {{intervals_plural}}" }, "icon": "🛡️", "stat_requirement": "endurance", @@ -212,8 +212,8 @@ "es": "Piel de Hierro" }, "description": { - "en": "Immune to status effects for 3 turns", - "es": "Inmune a efectos de estado durante 3 turnos" + "en": "Immune to status effects for 3 {{intervals_plural}}", + "es": "Inmune a efectos de estado durante 3 {{intervals_plural}}" }, "icon": "🪨", "stat_requirement": "endurance", @@ -327,6 +327,67 @@ "buff_duration": 2, "enemy_miss": true } + }, + "rabid_bite": { + "name": { + "en": "Rabid Bite", + "es": "Mordedura Rabiosa" + }, + "description": { + "en": "A vicious bite that can infect the target with poison", + "es": "Una mordedura feroz que puede infectar al objetivo con veneno" + }, + "icon": "🦷", + "stat_requirement": "agility", + "stat_threshold": 0, + "level_requirement": 1, + "cooldown": 4, + "stamina_cost": 0, + "effects": { + "damage_multiplier": 1.2, + "poison_percent": 0.04, + "poison_duration": 3 + } + }, + "howl": { + "name": { + "en": "Howl", + "es": "Aullido" + }, + "description": { + "en": "Increases damage by 50% for 3 {{intervals_plural}}", + "es": "Aumenta el daño en un 50% durante 3 {{intervals_plural}}" + }, + "icon": "🐺", + "stat_requirement": "strength", + "stat_threshold": 0, + "level_requirement": 1, + "cooldown": 8, + "stamina_cost": 0, + "effects": { + "buff": "berserker_rage", + "buff_duration": 3, + "damage_bonus": 0.5 + } + }, + "bandage_self": { + "name": { + "en": "Bandage Self", + "es": "Vendarse" + }, + "description": { + "en": "Restores 25% of maximum HP", + "es": "Restaura el 25% de la vida máxima" + }, + "icon": "🩹", + "stat_requirement": "intellect", + "stat_threshold": 0, + "level_requirement": 1, + "cooldown": 6, + "stamina_cost": 0, + "effects": { + "heal_percent": 0.25 + } } } } \ No newline at end of file diff --git a/gamedata/status_effects.json b/gamedata/status_effects.json new file mode 100644 index 0000000..4fa856e --- /dev/null +++ b/gamedata/status_effects.json @@ -0,0 +1,76 @@ +{ + "effects": { + "poison": { + "icon": "🧪", + "name": { + "en": "Poison", + "es": "Veneno" + }, + "description": { + "en": "Deals damage each {{interval}}", + "es": "Inflige daño cada {{interval}}" + }, + "type": "damage" + }, + "stun": { + "icon": "💫", + "name": { + "en": "Stunned", + "es": "Aturdido" + }, + "description": { + "en": "Cannot act this {{interval}}", + "es": "No puede actuar este {{interval}}" + }, + "type": "debuff" + }, + "analyzed": { + "icon": "🔍", + "name": { + "en": "Analyzed", + "es": "Analizado" + }, + "description": { + "en": "Weakness exposed, vulnerable to Exploit Weakness", + "es": "Debilidad expuesta, vulnerable a Explotar Debilidad" + }, + "type": "debuff" + }, + "bleeding": { + "icon": "🩸", + "name": { + "en": "Bleeding", + "es": "Sangrado" + }, + "description": { + "en": "Losing blood each {{interval}}", + "es": "Pierde sangre cada {{interval}}" + }, + "type": "damage" + }, + "burning": { + "icon": "🔥", + "name": { + "en": "Burning", + "es": "Ardiendo" + }, + "description": { + "en": "Takes fire damage each {{interval}}", + "es": "Recibe daño de fuego cada {{interval}}" + }, + "type": "damage" + }, + "regeneration": { + "icon": "💚", + "name": { + "en": "Regeneration", + "es": "Regeneración" + }, + "description": { + "en": "Recovers HP every {{interval}}", + "es": "Recupera PS cada {{interval}}" + }, + "type": "buff" + } + } +} \ No newline at end of file diff --git a/images-source/npcs/test_boss.jpeg b/images-source/npcs/test_boss.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c5ee7195f351e4d20120a0a5be1e5a7337d4da18 GIT binary patch literal 230567 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 zms𝔥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 v5$9R8p}ZgoNMoYpY4+!Bl9H3 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 MUnW2R0000004}%Pt^fc4 literal 0 HcmV?d00001 diff --git a/pwa/src/components/Game.tsx b/pwa/src/components/Game.tsx index a714b5c..28d2d82 100644 --- a/pwa/src/components/Game.tsx +++ b/pwa/src/components/Game.tsx @@ -424,6 +424,9 @@ function Game() { try { const response = await api.post('/api/game/pvp/action', { action }) actions.setMessage(response.data.message || 'Action performed!') + if (response.data.equipment) { + actions.updateEquipment(response.data.equipment) + } // We don't need to fetchGameData here because the websocket update will handle it? // The user said: "The timer is also not updating correctly, it should grab the latest data from the websocket update or from the action call." // So we should probably update state from response if possible, OR fetch. @@ -504,6 +507,8 @@ function Game() { onUncraft={(uniqueItemId: string, inventoryId: number, quantity?: number) => actions.handleUncraft(Number(uniqueItemId), inventoryId, quantity)} failedActionItemId={state.failedActionItemId} quests={state.quests} + craftedItemResult={state.craftedItemResult} + onCloseCraftedItemResult={() => actions.setCraftedItemResult(null)} /> )} diff --git a/pwa/src/components/common/ItemStatBadges.tsx b/pwa/src/components/common/ItemStatBadges.tsx index d257f50..ade08a5 100644 --- a/pwa/src/components/common/ItemStatBadges.tsx +++ b/pwa/src/components/common/ItemStatBadges.tsx @@ -82,14 +82,14 @@ export const ItemStatBadges = ({ item }: ItemStatBadgesProps) => { 🏋️ +{stats.endurance_bonus} {t('stats.end')} )} - {(stats.hp_bonus) && ( + {(stats.max_hp) && ( - ❤️ +{stats.hp_bonus} {t('stats.hpMax')} + ❤️ +{stats.max_hp} {t('stats.hpMax')} )} - {(stats.stamina_bonus) && ( + {(stats.max_stamina) && ( - ⚡ +{stats.stamina_bonus} {t('stats.stmMax')} + ⚡ +{stats.max_stamina} {t('stats.stmMax')} )} diff --git a/pwa/src/components/game/CharacterSheet.tsx b/pwa/src/components/game/CharacterSheet.tsx index b78b727..baf65ab 100644 --- a/pwa/src/components/game/CharacterSheet.tsx +++ b/pwa/src/components/game/CharacterSheet.tsx @@ -5,6 +5,8 @@ import api from '../../services/api'; import { GameModal } from './GameModal'; import { GameProgressBar } from '../common/GameProgressBar'; import { GameButton } from '../common/GameButton'; +import { GameTooltip } from '../common/GameTooltip'; +import { EffectBadge } from './EffectBadge'; import './CharacterSheet.css'; interface CharacterSheetProps { @@ -75,6 +77,7 @@ interface CharacterSheetData { used_points: number; all_perks: PerkData[]; }; + status_effects: any[]; character: { name: string; level: number; @@ -149,7 +152,7 @@ export function CharacterSheet({ onClose, onSpendPoint }: CharacterSheetProps) { ); } - const { base_stats, derived_stats, skills, perks, character } = data; + const { base_stats, derived_stats, skills, perks, character, status_effects } = data; const renderStatsTab = () => (
@@ -186,6 +189,27 @@ export function CharacterSheet({ onClose, onSpendPoint }: CharacterSheetProps) { />
+ {status_effects && status_effects.length > 0 && ( +
+
{t('characterSheet.activeEffects', 'Active Effects')}
+
+ {status_effects.map((e: any) => ( + +
+ 0 ? 'damage' : 'buff'), + damage_per_tick: e.damage_per_tick, + ticks: e.ticks_remaining + }} /> +
+
+ ))} +
+
+ )} + {base_stats.unspent_points > 0 && (
{base_stats.unspent_points} {t('characterSheet.pointsAvailable', 'points available')} @@ -273,7 +297,7 @@ export function CharacterSheet({ onClose, onSpendPoint }: CharacterSheetProps) { 🔒 )}
-

{getTranslatedText(skill.description)}

+

{getTranslatedText(skill.description, { interval: t('stats.interval_turn'), intervals_plural: t('stats.intervals_turn') })}

{skill.stamina_cost} 🔄 {skill.cooldown}t @@ -313,7 +337,7 @@ export function CharacterSheet({ onClose, onSpendPoint }: CharacterSheetProps) { {perk.icon}
{getTranslatedText(perk.name)} -

{getTranslatedText(perk.description)}

+

{getTranslatedText(perk.description, { interval: t('stats.interval_turn'), intervals_plural: t('stats.intervals_turn') })}

{perk.owned ? ( {t('characterSheet.owned', 'Owned')} diff --git a/pwa/src/components/game/Combat.tsx b/pwa/src/components/game/Combat.tsx index 237b8dd..ed1494f 100644 --- a/pwa/src/components/game/Combat.tsx +++ b/pwa/src/components/game/Combat.tsx @@ -132,7 +132,10 @@ export const Combat: React.FC = ({ opponentName: isPvP ? (initialCombatData?.pvp_combat?.is_attacker ? initialCombatData?.pvp_combat?.defender?.username : initialCombatData?.pvp_combat?.attacker?.username) : undefined, - turnTimeRemaining: initialCombatData?.pvp_combat?.time_remaining ?? initialCombatData?.turn_time_remaining + turnTimeRemaining: initialCombatData?.pvp_combat?.time_remaining ?? initialCombatData?.turn_time_remaining, + npcEffects: initialCombatData?.combat?.npc_effects || [], + playerEffects: initialCombatData?.player_effects || [], + npcIntent: initialCombatData?.combat?.npc_intent }); const [animState, setAnimState] = useState({ @@ -158,6 +161,8 @@ export const Combat: React.FC = ({ const pendingPlayerHpRef = useRef<{ hp: number; max_hp: number } | null>(null); // Store server player XP to apply when XP floating text appears const pendingPlayerXpRef = useRef<{ xp: number; level: number } | null>(null); + // Store server equipment to apply when attack/hit animations occur + const pendingEquipmentRef = useRef(null); // Update queueRef useEffect(() => { @@ -284,6 +289,7 @@ export const Combat: React.FC = ({ yourTurn: newYourTurn !== undefined ? newYourTurn : prev.yourTurn, round: initialCombatData?.combat?.round ?? prev.round, turnTimeRemaining: newTimeRemaining !== undefined ? newTimeRemaining : prev.turnTimeRemaining, + npcIntent: initialCombatData?.combat?.npc_intent ?? prev.npcIntent, // Sync HP for PVP from WebSocket updates ...(isPvP && newPlayerHp !== undefined ? { playerHp: newPlayerHp } : {}), ...(isPvP && newNpcHp !== undefined ? { npcHp: newNpcHp } : {}) @@ -411,14 +417,17 @@ export const Combat: React.FC = ({ // Apply server player HP when floating text appears if (pendingPlayerHpRef.current) { const { hp, max_hp } = pendingPlayerHpRef.current; - setLocalCombatState(prev => ({ - ...prev, - playerHp: hp, - playerMaxHp: max_hp - })); + setLocalCombatState(prev => ({ ...prev, playerHp: hp, playerMaxHp: max_hp })); updatePlayerState({ hp, max_hp }); pendingPlayerHpRef.current = null; } + + // Apply pending equipment update (durability loss from being hit) + if (pendingEquipmentRef.current) { + updatePlayerState({ equipment: pendingEquipmentRef.current }); + pendingEquipmentRef.current = null; + } + } break; @@ -436,6 +445,18 @@ export const Combat: React.FC = ({ triggerAnim('shaking', 500); if (data.damage) { addFloatingText(`-${data.damage}!`, 'crit', 'player'); + + if (pendingPlayerHpRef.current) { + const { hp, max_hp } = pendingPlayerHpRef.current; + setLocalCombatState(prev => ({ ...prev, playerHp: hp, playerMaxHp: max_hp })); + updatePlayerState({ hp, max_hp }); + pendingPlayerHpRef.current = null; + } + + if (pendingEquipmentRef.current) { + updatePlayerState({ equipment: pendingEquipmentRef.current }); + pendingEquipmentRef.current = null; + } } break; @@ -502,13 +523,28 @@ export const Combat: React.FC = ({ // ── Skill messages ── case 'skill_attack': - triggerAnim('playerAttacking'); - triggerAnim('npcHit', 300); + const target_origin = origin === 'enemy' ? 'player' : 'enemy'; + triggerAnim(origin === 'enemy' ? 'enemyAttacking' : 'playerAttacking'); + triggerAnim(origin === 'enemy' ? 'playerHit' : 'npcHit', 300); + if (data.damage) { const label = data.hits > 1 ? `${data.skill_icon || '⚔️'} -${data.damage} (x${data.hits})` : `${data.skill_icon || '⚔️'} -${data.damage}`; - addFloatingText(label, 'damage', 'enemy'); + addFloatingText(label, 'damage', target_origin); + + if (target_origin === 'player') { + if (pendingPlayerHpRef.current) { + const { hp, max_hp } = pendingPlayerHpRef.current; + setLocalCombatState(prev => ({ ...prev, playerHp: hp, playerMaxHp: max_hp })); + updatePlayerState({ hp, max_hp }); + pendingPlayerHpRef.current = null; + } + if (pendingEquipmentRef.current) { + updatePlayerState({ equipment: pendingEquipmentRef.current }); + pendingEquipmentRef.current = null; + } + } } break; @@ -572,6 +608,12 @@ export const Combat: React.FC = ({ } else if (messageQueue.length === 0 && isProcessingQueue) { // Queue just finished processing setIsProcessingQueue(false); + + // Apply pending equipment updates (durability loss etc.) after ALL animations finish + if (pendingEquipmentRef.current) { + updatePlayerState({ equipment: pendingEquipmentRef.current }); + pendingEquipmentRef.current = null; + } } }, [messageQueue, processQueue, isProcessingQueue]); @@ -596,13 +638,23 @@ export const Combat: React.FC = ({ npcMaxHp: data.combat.npc_max_hp, turn: data.combat.turn, round: data.combat.round, - npcName: resolveName(data.combat.npc_name) || prev.npcName + npcName: resolveName(data.combat.npc_name) || prev.npcName, + npcEffects: data.combat.npc_effects || [], + playerEffects: (data as any).player_effects || [], + npcIntent: data.combat.npc_intent })); - } else if (data.combat_over && data.player_won) { + } else if (data.combat_over && data.player_won === true && action !== 'flee') { + // Apply any remaining pending data on victory + if (pendingEquipmentRef.current) { + updatePlayerState({ equipment: pendingEquipmentRef.current }); + pendingEquipmentRef.current = null; + } // Combat ended with victory but data.combat is null - set enemy HP to 0 setLocalCombatState(prev => ({ ...prev, - npcHp: 0 + npcHp: 0, + npcEffects: [], + playerEffects: [] })); } @@ -611,8 +663,13 @@ export const Combat: React.FC = ({ pendingPlayerHpRef.current = { hp: data.player.hp, max_hp: data.player.max_hp }; // Store player XP to apply when xp_gain message is processed pendingPlayerXpRef.current = { xp: data.player.xp, level: data.player.level }; - refreshCharacters(); } + + if (data.equipment) { + pendingEquipmentRef.current = data.equipment; + } + + refreshCharacters(); } } catch (err) { console.error(err); @@ -753,12 +810,17 @@ export const Combat: React.FC = ({ npcMaxHp: data.combat.npc_max_hp, turn: data.combat.turn, round: data.combat.round, - npcName: resolveName(data.combat.npc_name) || prev.npcName + npcName: resolveName(data.combat.npc_name) || prev.npcName, + npcEffects: data.combat.npc_effects || [], + playerEffects: (data as any).player_effects || [], + npcIntent: data.combat.npc_intent })); - } else if (data.combat_over && data.player_won) { + } else if (data.combat_over && data.player_won === true) { setLocalCombatState(prev => ({ ...prev, - npcHp: 0 + npcHp: 0, + npcEffects: [], + playerEffects: [] })); } diff --git a/pwa/src/components/game/CombatEffects.css b/pwa/src/components/game/CombatEffects.css index 0aab3f7..443a111 100644 --- a/pwa/src/components/game/CombatEffects.css +++ b/pwa/src/components/game/CombatEffects.css @@ -33,7 +33,7 @@ clip-path: var(--game-clip-path); border: 1px solid rgba(255, 107, 107, 0.3); flex-shrink: 0; -} +} .combat-location-bg { width: 100%; @@ -557,4 +557,36 @@ .progress-fill { height: 100%; transition: width 0.3s ease-out; +} + +/* Combat Status Effect Badges */ +.combat-effects-row { + display: flex; + flex-wrap: wrap; + gap: 4px; + margin-top: 4px; +} + +.combat-effect-badge { + display: inline-flex; + align-items: center; + gap: 2px; + padding: 1px 6px; + font-size: 0.7rem; + font-weight: 600; + line-height: 1.3; + white-space: nowrap; + clip-path: var(--game-clip-path-sm); +} + +.combat-effect-badge.effect-buff { + background: rgba(76, 175, 80, 0.3); + border: 1px solid rgba(76, 175, 80, 0.5); + color: #81c784; +} + +.combat-effect-badge.effect-debuff { + background: rgba(220, 53, 69, 0.3); + border: 1px solid rgba(220, 53, 69, 0.5); + color: #ef9a9a; } \ No newline at end of file diff --git a/pwa/src/components/game/CombatTypes.ts b/pwa/src/components/game/CombatTypes.ts index 8822901..f3d6cc2 100644 --- a/pwa/src/components/game/CombatTypes.ts +++ b/pwa/src/components/game/CombatTypes.ts @@ -15,6 +15,14 @@ export interface FloatingText { timestamp: number; } +export interface CombatEffect { + name: string | Record; + icon: string; + ticks_remaining: number; + type?: string; // 'buff', 'debuff', 'damage' + description?: string | Record; +} + export interface CombatState { inCombat: boolean; turn: 'player' | 'enemy' | 'attacker' | 'defender'; @@ -31,6 +39,9 @@ export interface CombatState { round: number; isPvP?: boolean; opponentName?: string; + npcEffects?: CombatEffect[]; + playerEffects?: CombatEffect[]; + npcIntent?: string; } export interface CombatActionResponse { @@ -47,6 +58,7 @@ export interface CombatActionResponse { level: number; }; winner_id?: string; + equipment?: any; } export interface AnimationState { diff --git a/pwa/src/components/game/CombatView.tsx b/pwa/src/components/game/CombatView.tsx index 75977e1..025cbdb 100644 --- a/pwa/src/components/game/CombatView.tsx +++ b/pwa/src/components/game/CombatView.tsx @@ -8,6 +8,7 @@ import './CombatEffects.css'; import { GameProgressBar } from '../common/GameProgressBar'; import { GameButton } from '../common/GameButton'; import { GameDropdown } from '../common/GameDropdown'; +import { GameTooltip } from '../common/GameTooltip'; import api from '../../services/api'; interface CombatViewProps { @@ -122,6 +123,20 @@ export const CombatView: React.FC = ({ } }, [state.messages]); + const getIntentDisplay = (intent: string) => { + switch (intent) { + case 'defend': return { icon: '🛡️', text: t('combat.intents.defend', 'Defending') }; + case 'flee': return { icon: '🏃', text: t('combat.intents.flee', 'Fleeing') }; + case 'buff': return { icon: '✨', text: t('combat.intents.buff', 'Buffing') }; + case 'attack': return { icon: '⚔️', text: t('combat.intents.attack', 'Attacking') }; + case 'charging_attack': return { icon: '⚠️', text: t('combat.intents.charging', 'Charging Attack!') }; + default: + // For skills like bandage_self etc. + const skillName = intent.replace(/_/g, ' ').replace(/\b\w/g, c => c.toUpperCase()); + return { icon: '🌀', text: t(`combat.intents.${intent}`, skillName) }; + } + }; + return (
@@ -231,6 +246,31 @@ export const CombatView: React.FC = ({ height="10px" labelAlignment="right" /> + {/* Enemy Intent */} + {!state.isPvP && state.npcIntent && !combatResult && ( +
+ {getIntentDisplay(state.npcIntent).icon} + {t('combat.intents.label', 'Next move:')} {getIntentDisplay(state.npcIntent).text} +
+ )} + {/* Enemy Status Effects */} + {state.npcEffects && state.npcEffects.length > 0 && ( +
+ {state.npcEffects.map((eff, i) => ( + +
{eff.icon} {getTranslatedText(eff.name)}
+
{getTranslatedText(eff.description, { interval: t('stats.interval_turn'), intervals_plural: t('stats.intervals_turn') })}
+
{t('combat.log.turns_remaining', { turns: eff.ticks_remaining })}
+
+ }> + + {eff.icon} {eff.ticks_remaining} + + + ))} +
+ )}
{/* Player HP (Right) */} @@ -245,6 +285,24 @@ export const CombatView: React.FC = ({ align="right" labelAlignment="left" /> + {/* Player Active Buffs/Effects */} + {state.playerEffects && state.playerEffects.length > 0 && ( +
+ {state.playerEffects.map((eff, i) => ( + +
{eff.icon} {getTranslatedText(eff.name)}
+
{getTranslatedText(eff.description, { interval: t('stats.interval_turn'), intervals_plural: t('stats.intervals_turn') })}
+
{t('combat.log.turns_remaining', { turns: eff.ticks_remaining })}
+
+ }> + + {eff.icon} {eff.ticks_remaining} + + + ))} + + )} @@ -261,17 +319,27 @@ export const CombatView: React.FC = ({ )} {!combatResult && ( -
+
onAction('attack')} disabled={isProcessing || !state.yourTurn} > 👊 {t('combat.actions.attack')} + onAction('defend')} + disabled={isProcessing || !state.yourTurn} + > + 🛡️ {t('combat.actions.defend')} + + @@ -325,10 +393,13 @@ export const CombatView: React.FC = ({ case 'enemy_miss': text = t('combat.log.enemy_miss'); break; case 'victory': text = t('combat.victory'); className += " text-success bold"; break; case 'player_defeated': text = t('combat.defeat'); className += " text-danger bold"; break; - case 'flee_success': text = t('combat.flee.success'); break; - case 'flee_fail': text = t('combat.flee.fail'); break; - case 'item_broken': text = t('combat.item_broken', { item: getTranslatedText(msg.data?.item_name) }); break; - case 'xp_gain': text = t('combat.log.xp_gain', { xp: msg.data?.xp }); className += " text-warning"; break; + case 'flee_success': text = t('combat.log.flee_success'); break; + case 'flee_fail': + text = t('combat.log.flee_fail'); + className += " text-danger"; + break; + case 'item_broken': text = t('combat.log.item_broken', { item: getTranslatedText(msg.data?.item_name), emoji: msg.data?.emoji || '' }); break; + case 'xp_gain': text = t('combat.log.xp_gain', { amount: msg.data?.amount }); className += " text-warning"; break; case 'damage': if (msg.origin === 'enemy') { text = t('combat.log.enemy_attack', { damage: msg.data?.damage || 0 }); @@ -340,7 +411,7 @@ export const CombatView: React.FC = ({ case 'text': text = getTranslatedText(msg.data?.text) || ""; break; case 'item_used': text = t('combat.log.item_used', { item: getTranslatedText(msg.data?.item_name) || '' }); - if (msg.data?.effects) text += getTranslatedText(msg.data.effects); // Append effects string if backend still sends it + if (msg.data?.effects) text += getTranslatedText(msg.data.effects); className += " text-info"; break; case 'effect_applied': @@ -350,7 +421,121 @@ export const CombatView: React.FC = ({ }); className += " text-warning"; break; - default: text = msg.type; + // ── Skill messages ── + case 'skill_attack': { + const hitsText = msg.data?.hits > 1 ? ` (x${msg.data.hits})` : ''; + text = t('combat.log.skill_attack', { + skill_icon: msg.data?.skill_icon || '⚔️', + skill_name: getTranslatedText(msg.data?.skill_name) || '', + damage: msg.data?.damage || 0, + hits_text: hitsText + }); + break; + } + case 'skill_heal': + text = t('combat.log.skill_heal', { + skill_icon: msg.data?.skill_icon || '💚', + skill_name: getTranslatedText(msg.data?.skill_name) || '', + heal: msg.data?.heal || 0 + }); + className += " text-success"; + break; + case 'skill_buff': + text = t('combat.log.skill_buff', { + skill_icon: msg.data?.skill_icon || '🛡️', + skill_name: getTranslatedText(msg.data?.skill_name) || '' + }); + className += " text-info"; + break; + case 'skill_effect': + text = msg.data?.message || ''; + className += " text-info"; + break; + case 'skill_analyze': + text = t('combat.log.skill_analyze', { skill_icon: msg.data?.skill_icon || '🔍' }); + className += " text-info"; + break; + // ── Combat reactions ── + case 'combat_crit': + text = t('combat.log.combat_crit'); + className += " text-warning bold"; + break; + case 'combat_dodge': + text = t('combat.log.combat_dodge'); + className += " text-success"; + break; + case 'combat_block': + text = t('combat.log.combat_block'); + className += " text-success"; + break; + case 'damage_reduced': + text = t('combat.log.damage_reduced', { reduction: msg.data?.reduction || 0 }); + className += " text-info"; + break; + case 'player_defend': + text = t('combat.log.defend'); + className += " text-info bold"; + break; + // ── Enemy actions ── + case 'enemy_enraged': + text = t('combat.log.enemy_enraged', { npc_name: getTranslatedText(msg.data?.npc_name) || t('common.enemy') }); + className += " text-danger bold"; + break; + case 'enemy_defend': + text = t('combat.log.enemy_defend', { heal: msg.data?.heal || 0 }); + className += " text-danger"; + break; + case 'enemy_special': + text = t('combat.log.enemy_special', { damage: msg.data?.damage || 0 }); + className += " text-danger bold"; + break; + // ── Status effects ── + case 'effect_damage': + if (msg.origin === 'enemy') { + text = t('combat.log.effect_damage_npc', { damage: msg.data?.damage || 0 }); + } else { + text = t('combat.log.effect_damage', { damage: msg.data?.damage || 0 }); + } + className += " text-danger"; + break; + case 'effect_bleeding': + text = t('combat.log.effect_bleeding', { damage: msg.data?.damage || 0 }); + className += " text-danger"; + break; + case 'effect_heal': + text = t('combat.log.effect_heal', { heal: msg.data?.heal || 0 }); + className += " text-success"; + break; + // ── Items ── + case 'weapon_broke': + text = t('combat.log.weapon_broke', { item_name: getTranslatedText(msg.data?.item_name) || '' }); + className += " text-danger"; + break; + case 'item_heal': + text = t('combat.log.item_heal', { heal: msg.data?.heal || 0 }); + className += " text-success"; + break; + case 'item_restore': + text = t('combat.log.item_restore', { amount: msg.data?.amount || 0, stat: msg.data?.stat || '' }); + className += " text-info"; + break; + case 'item_damage': + text = t('combat.log.item_damage', { item: getTranslatedText(msg.data?.item_name) || '', damage: msg.data?.damage || 0 }); + break; + // ── Outcomes ── + case 'level_up': + text = t('combat.log.level_up', { new_level: msg.data?.new_level || 0 }); + className += " text-warning bold"; + break; + case 'died': + text = t('combat.log.died'); + className += " text-danger bold"; + break; + case 'quest_update': + text = msg.data?.message || ''; + className += " text-info"; + break; + default: text = msg.data?.message || msg.type; } } const time = msg.timestamp || new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' }); @@ -385,6 +570,7 @@ export const CombatView: React.FC = ({ interface SkillInfo { id: string; name: any; + description: any; icon: string; stamina_cost: number; cooldown: number; @@ -429,7 +615,7 @@ const AbilitiesDropdown: React.FC<{ disabled={disabled} style={{ width: '100%' }} > - ⚔️ {t('combat.actions.abilities', 'Abilities')} + ⚔️ {t('combat.actions.abilities')} {open && skills.length > 0 && ( handleUse(s.id)} - disabled={isSkillDisabled} - style={{ width: '100%', justifyContent: 'flex-start', marginBottom: '4px' }} - > -
- {s.icon} - {getTranslatedText(s.name)} - {onCooldown ? ( - ⏳ {s.current_cooldown}T - ) : ( - ⚡{s.stamina_cost} - )} + +
{s.icon} {getTranslatedText(s.name)}
+
{getTranslatedText(s.description, { interval: t('stats.interval_turn'), intervals_plural: t('stats.intervals_turn') })}
+
+ ⚡ {s.stamina_cost} {t('combat.stamina', 'Stamina')} + ⏳ {t('combat.cooldown_turns', { turns: s.cooldown })} +
- + }> + handleUse(s.id)} + disabled={isSkillDisabled} + style={{ width: '100%', justifyContent: 'flex-start', marginBottom: '4px' }} + > +
+ {s.icon} + {getTranslatedText(s.name)} + {onCooldown ? ( + ⏳ {s.current_cooldown} + ) : ( + ⚡{s.stamina_cost} + )} +
+
+ ); })}
diff --git a/pwa/src/components/game/EffectBadge.tsx b/pwa/src/components/game/EffectBadge.tsx index b341bf6..d7d64cf 100644 --- a/pwa/src/components/game/EffectBadge.tsx +++ b/pwa/src/components/game/EffectBadge.tsx @@ -24,7 +24,7 @@ export const EffectBadge: React.FC = ({ effect }) => { : getTranslatedText(effect.name); return ( - + {effect.icon} {effect.damage_per_tick ? ( <> diff --git a/pwa/src/components/game/LocationView.tsx b/pwa/src/components/game/LocationView.tsx index f10e347..c232a0d 100644 --- a/pwa/src/components/game/LocationView.tsx +++ b/pwa/src/components/game/LocationView.tsx @@ -68,6 +68,8 @@ interface LocationViewProps { onUncraft: (uniqueItemId: string, inventoryId: number, quantity?: number) => void failedActionItemId: string | number | null quests: { active: any[], available: any[] } + craftedItemResult: any | null + onCloseCraftedItemResult: () => void } function LocationView({ @@ -90,6 +92,8 @@ function LocationView({ craftCategoryFilter, profile, quests, + craftedItemResult, + onCloseCraftedItemResult, onInitiateCombat, onInitiatePvP, @@ -810,6 +814,8 @@ function LocationView({ onCraft={onCraft} onRepair={onRepair} onUncraft={onUncraft} + craftedItemResult={craftedItemResult} + onCloseCraftedItemResult={onCloseCraftedItemResult} /> ) } diff --git a/pwa/src/components/game/PlayerSidebar.tsx b/pwa/src/components/game/PlayerSidebar.tsx index 318a053..cefc02a 100644 --- a/pwa/src/components/game/PlayerSidebar.tsx +++ b/pwa/src/components/game/PlayerSidebar.tsx @@ -11,6 +11,7 @@ import { GameButton } from '../common/GameButton' import { GameItemCard } from '../common/GameItemCard' import { GameDropdown } from '../common/GameDropdown' import { useAudio } from '../../contexts/AudioContext' +import { EffectBadge } from './EffectBadge' interface PlayerSidebarProps { playerState: PlayerState @@ -140,14 +141,18 @@ function PlayerSidebar({
{t('stats.hp')}
- {playerState.status_effects?.filter((e: any) => e.damage_per_tick !== 0).map((e: any) => ( - 0 ? 'negative' : 'positive'}`} style={{ - color: e.damage_per_tick > 0 ? '#ff6b6b' : '#4caf50', - fontSize: '0.85rem', - fontWeight: 'bold' - }}> - {e.damage_per_tick > 0 ? `-${e.damage_per_tick}` : `+${Math.abs(e.damage_per_tick)}`}/t ({e.ticks_remaining}) - + {playerState.status_effects?.map((e: any) => ( + +
+ 0 ? 'damage' : 'buff'), + damage_per_tick: e.damage_per_tick, + ticks: e.ticks_remaining + }} /> +
+
))}
diff --git a/pwa/src/components/game/Workbench.tsx b/pwa/src/components/game/Workbench.tsx index c613571..1f10e82 100644 --- a/pwa/src/components/game/Workbench.tsx +++ b/pwa/src/components/game/Workbench.tsx @@ -28,6 +28,8 @@ interface WorkbenchProps { onCraft: (itemId: number) => void onRepair: (uniqueItemId: string, inventoryId: number) => void onUncraft: (uniqueItemId: string, inventoryId: number, quantity?: number) => void + craftedItemResult: any | null + onCloseCraftedItemResult: () => void } function Workbench({ @@ -50,12 +52,15 @@ function Workbench({ onSetCraftCategoryFilter, onCraft, onRepair, - onUncraft + onUncraft, + craftedItemResult, + onCloseCraftedItemResult }: WorkbenchProps) { const { t } = useTranslation() const [selectedItem, setSelectedItem] = useState(null) const [salvageQuantity, setSalvageQuantity] = useState(1) + const [showSalvageModal, setShowSalvageModal] = useState(false) // Reset selection when tab changes useEffect(() => { @@ -448,10 +453,7 @@ function Workbench({ variant="danger" disabled={(profile?.stamina || 0) < ((item.stamina_cost || 1) * salvageQuantity)} onClick={() => { - const confirmMsg = t('crafting.confirmSalvage', { name: getTranslatedText(item.name) }) - if (window.confirm(`${confirmMsg} (x${salvageQuantity})`)) { - onUncraft(item.unique_item_id, item.inventory_id, salvageQuantity) - } + setShowSalvageModal(true) }} style={{ width: '100%' }} > @@ -677,6 +679,99 @@ function Workbench({
+ + {showSalvageModal && selectedItem && ( + setShowSalvageModal(false)} + className="salvage-confirm-modal" + > +
+

{t('crafting.confirmSalvage', { name: getTranslatedText(selectedItem.name) })} (x{salvageQuantity})

+
+ setShowSalvageModal(false)}> + {t('common.cancel', 'Cancel')} + + { + onUncraft(selectedItem.unique_item_id, selectedItem.inventory_id, salvageQuantity) + setShowSalvageModal(false) + }}> + {t('common.confirm', 'Confirm')} + +
+
+
+ )} + + {/* Crafted Item Feedback Modal */} + {craftedItemResult && ( + +
+
+ {craftedItemResult.image_path ? ( + {getTranslatedText(craftedItemResult.name)} { + (e.target as HTMLImageElement).style.display = 'none'; + const icon = (e.target as HTMLImageElement).nextElementSibling; + if (icon) icon.classList.remove('hidden'); + }} + /> + ) : null} +
+ {craftedItemResult.emoji || '📦'} +
+
+ +

+ {getTranslatedText(craftedItemResult.name)} +

+ + {craftedItemResult.tier && ( + + Tier {craftedItemResult.tier} + + )} + +
+ {Object.entries(craftedItemResult.unique_item_data?.unique_stats ?? craftedItemResult.unique_item_data ?? craftedItemResult.base_stats ?? craftedItemResult.stats ?? {}) + .filter(([k]) => !['id', 'item_id', 'durability', 'max_durability', 'created_at', 'tier'].includes(k)) + .map(([key, value]) => { + const icons: Record = { + weight_capacity: `⚖️ ${t('game.weight')}`, + volume_capacity: `📦 ${t('game.volume')}`, + armor: `🛡️ ${t('stats.armor')}`, + hp_max: `❤️ ${t('stats.maxHp')}`, + stamina_max: `⚡ ${t('stats.maxStamina')}`, + damage_min: `⚔️ ${t('stats.damage')} Min`, + damage_max: `⚔️ ${t('stats.damage')} Max` + } + const label = icons[key] || key.replace('_', ' ') + const unit = key.includes('weight') ? 'kg' : key.includes('volume') ? 'L' : '' + return ( +
+ {label}: +{Math.round(Number(value))}{unit} +
+ ) + })} +
+ +
+ + {t('common.continue', 'Continue')} + +
+
+
+ )} + ) } diff --git a/pwa/src/components/game/hooks/useGameEngine.ts b/pwa/src/components/game/hooks/useGameEngine.ts index 3be23df..e85031e 100644 --- a/pwa/src/components/game/hooks/useGameEngine.ts +++ b/pwa/src/components/game/hooks/useGameEngine.ts @@ -54,6 +54,7 @@ export interface GameEngineState { uncraftFilter: string inventoryFilter: string inventoryCategoryFilter: string + craftedItemResult: any | null // PvP state lastSeenPvPAction: string | null @@ -130,6 +131,7 @@ export interface GameEngineActions { setInventoryFilter: (filter: string) => void setInventoryCategoryFilter: (filter: string) => void toggleCategoryCollapse: (category: string) => void + setCraftedItemResult: (result: any) => void // WebSocket helpers refreshLocation: () => Promise @@ -142,6 +144,7 @@ export interface GameEngineActions { addNPCToLocation: (npc: any) => void removeNPCFromLocation: (enemyId: string) => void updateStatusEffect: (effectName: string | any, remainingTicks: number) => void + updateEquipment: (equipmentData: any) => void // Quests updateQuests: (active: any[], available: any[]) => void @@ -186,6 +189,7 @@ export function useGameEngine( const [uncraftableItems, setUncraftableItems] = useState([]) const [inventoryFilter, setInventoryFilter] = useState('') const [inventoryCategoryFilter, setInventoryCategoryFilter] = useState('all') + const [craftedItemResult, setCraftedItemResult] = useState(null) const [lastSeenPvPAction, setLastSeenPvPAction] = useState(null) const [_pvpTimeRemaining, _setPvpTimeRemaining] = useState(null) const [mobileMenuOpen, setMobileMenuOpen] = useState('none') @@ -483,7 +487,8 @@ export function useGameEngine( in_combat: true, combat_over: false, player_won: false, - combat: encounter.combat + combat: encounter.combat, + player_effects: encounter.player_effects || [] }) setCombatLog([]) @@ -663,7 +668,8 @@ export function useGameEngine( mobileHeaderOpen, locationMessages, interactableCooldowns, - forceUpdate: _forceUpdate + forceUpdate: _forceUpdate, + craftedItemResult } const handleUseItem = async (itemId: string) => { @@ -779,6 +785,9 @@ export function useGameEngine( // setMessage('Crafting...') // Loading state ok to keep specific or remove? Let's remove to avoid spam const response = await api.post('/api/game/craft_item', { item_id: itemId }) addLocationMessage(response.data.message || 'Item crafted!') + if (response.data.item) { + setCraftedItemResult(response.data.item) + } await refreshWorkbenchData() } catch (error: any) { addLocationMessage(error.response?.data?.detail || 'Failed to craft item') @@ -870,7 +879,8 @@ export function useGameEngine( in_combat: true, combat_over: false, player_won: false, - combat: response.data.combat + combat: response.data.combat, + player_effects: response.data.player_effects || [] }) setEnemyName(response.data.combat.npc_name) @@ -908,6 +918,10 @@ export function useGameEngine( response.data.quest_updates.forEach((q: any) => handleQuestUpdate(q)) } + // if (response.data.equipment) { + // setEquipment(response.data.equipment) + // } + return response.data } catch (error: any) { setMessage(error.response?.data?.detail || 'Combat action failed') @@ -941,7 +955,9 @@ export function useGameEngine( const handlePvPAction = async (action: string, _targetId: number) => { try { let payload: any = { action } - if (action.includes(':')) { + if (action.startsWith('skill:')) { + payload = { action: 'skill', skill_id: action.substring(6) } + } else if (action.includes(':')) { const [act, itemId] = action.split(':') payload = { action: act, item_id: itemId } } @@ -1081,7 +1097,8 @@ export function useGameEngine( setCombatState({ in_combat: true, combat_over: false, - combat: combatRes.data.combat + combat: combatRes.data.combat, + player_effects: combatRes.data.player_effects || [] }) // Update enemy name/image state @@ -1118,6 +1135,12 @@ export function useGameEngine( if (playerData.max_stamina !== undefined) { mappedData.max_stamina = playerData.max_stamina } + if (playerData.status_effects !== undefined) { + mappedData.status_effects = playerData.status_effects + } + if (playerData.equipment !== undefined) { + setEquipment(playerData.equipment) + } // Update playerState with mapped fields if (Object.keys(mappedData).length > 0) { @@ -1259,6 +1282,8 @@ export function useGameEngine( setUncraftFilter, setInventoryFilter, setInventoryCategoryFilter, + setCraftedItemResult, + updateEquipment: (data: any) => setEquipment(data), // WebSocket helper functions refreshLocation, refreshCombat, diff --git a/pwa/src/i18n/locales/en.json b/pwa/src/i18n/locales/en.json index abca36f..bd4e17d 100644 --- a/pwa/src/i18n/locales/en.json +++ b/pwa/src/i18n/locales/en.json @@ -257,7 +257,11 @@ "agi": "AGI", "end": "END", "hpMax": "HP max", - "stmMax": "Stm max" + "stmMax": "Stm max", + "interval_turn": "turn", + "intervals_turn": "turns", + "interval_minute": "minute", + "intervals_minute": "minutes" }, "combat": { "title": "Combat", @@ -285,6 +289,14 @@ "yourTurnTimer": "Your Turn ({{time}})", "enemyTurnTimer": "Enemy Turn", "waiting": "Waiting for opponent...", + "intents": { + "label": "Next move:", + "defend": "Defending", + "flee": "Fleeing", + "buff": "Buffing", + "attack": "Attacking", + "charging": "Charging Attack!" + }, "messages": { "combat_start": "Combat started with {{enemy}}!", "player_attack": "You attack for {{damage}} damage!", @@ -298,8 +310,11 @@ "defend": "Defend", "flee": "Flee", "supplies": "Supplies", - "useItem": "Use Item" + "useItem": "Use Item", + "abilities": "Abilities" }, + "stamina": "Stamina", + "cooldown_turns": "{{turns}} turn cooldown", "status": { "attacking": "Attacking...", "defending": "Bracing for impact...", @@ -332,15 +347,33 @@ "weapon_broke": "Your {{item_name}} broke!", "item_broken": "Your {{emoji}} {{item_name}} broke!", "combat_crit": "CRITICAL HIT!", - "combat_dodge": "You Dodged the attack!", - "combat_block": "You Blocked the attack!", + "combat_dodge": "You dodged the attack!", + "combat_block": "You blocked the attack!", "xp_gain": "Gained {{amount}} XP", "flee_success": "You managed to escape!", + "flee_fail": "Failed to escape!", "defend": "You brace for impact!", "item_used": "Used {{item}}", "effect_applied": "Applied {{effect}} to {{target}}", "item_damage": "{{item}} deals {{damage}} damage!", - "damage_reduced": "Damage reduced by {{reduction}}%" + "damage_reduced": "Damage reduced by {{reduction}}%", + "skill_attack": "{{skill_icon}} {{skill_name}} hits for {{damage}} damage{{hits_text}}", + "skill_heal": "{{skill_icon}} {{skill_name}} heals for {{heal}} HP", + "skill_buff": "{{skill_icon}} {{skill_name}} activated", + "skill_effect": "{{message}}", + "skill_analyze": "{{skill_icon}} Target analyzed!", + "enemy_enraged": "{{npc_name}} is enraged!", + "enemy_defend": "Enemy recovers {{heal}} HP", + "enemy_special": "Enemy uses a special attack for {{damage}} damage!", + "effect_bleeding": "Bleeding for {{damage}} damage", + "effect_heal": "Recovered {{heal}} HP", + "effect_damage": "Took {{damage}} damage from status effects", + "effect_damage_npc": "The enemy took {{damage}} damage from status effects", + "level_up": "Level up! You are now level {{new_level}}!", + "item_heal": "Healed for {{heal}} HP", + "item_restore": "Restored {{amount}} {{stat}}", + "died": "You have been defeated!", + "turns_remaining": "{{turns}} turns remaining" }, "modal": { "supplies_title": "Combat Supplies", diff --git a/pwa/src/i18n/locales/es.json b/pwa/src/i18n/locales/es.json index 39a1735..8468355 100644 --- a/pwa/src/i18n/locales/es.json +++ b/pwa/src/i18n/locales/es.json @@ -254,8 +254,12 @@ "str": "FUE", "agi": "AGI", "end": "RES", - "hpMax": "Vida máx", - "stmMax": "Agua. máx" + "hpMax": "PS máx", + "stmMax": "Ag máx", + "interval_turn": "turno", + "intervals_turn": "turnos", + "interval_minute": "minuto", + "intervals_minute": "minutos" }, "combat": { "title": "Combate", @@ -284,6 +288,14 @@ "yourTurnTimer": "Tu Turno ({{time}})", "enemyTurnTimer": "Turno del Enemigo", "waiting": "Esperando al oponente...", + "intents": { + "label": "Próximo movimiento:", + "defend": "Defendiendo", + "flee": "Huyendo", + "buff": "Potenciándose", + "attack": "Atacando", + "charging": "¡Ataque Cargado!" + }, "messages": { "combat_start": "¡Combate iniciado con {{enemy}}!", "player_attack": "¡Atacas por {{damage}} de daño!", @@ -296,8 +308,11 @@ "defend": "Defender", "flee": "Huir", "supplies": "Suministros", - "useItem": "Usar Objeto" + "useItem": "Usar Objeto", + "abilities": "Habilidades" }, + "stamina": "Aguante", + "cooldown_turns": "{{turns}} turnos de espera", "status": { "attacking": "Atacando...", "defending": "Preparándose...", @@ -339,7 +354,24 @@ "item_used": "Usaste {{item}}", "effect_applied": "Aplicado {{effect}} a {{target}}", "item_damage": "{{item}} inflige {{damage}} de daño!", - "damage_reduced": "Daño reducido en {{reduction}}%" + "damage_reduced": "Daño reducido en {{reduction}}%", + "skill_attack": "{{skill_icon}} {{skill_name}} golpea por {{damage}} de daño{{hits_text}}", + "skill_heal": "{{skill_icon}} {{skill_name}} cura {{heal}} PS", + "skill_buff": "{{skill_icon}} {{skill_name}} activado", + "skill_effect": "{{message}}", + "skill_analyze": "{{skill_icon}} ¡Objetivo analizado!", + "enemy_enraged": "¡{{npc_name}} está enfurecido!", + "enemy_defend": "El enemigo recupera {{heal}} PS", + "enemy_special": "¡El enemigo usa un ataque especial por {{damage}} de daño!", + "effect_bleeding": "Sangrado por {{damage}} de daño", + "effect_heal": "Recuperaste {{heal}} PS", + "effect_damage": "Recibiste {{damage}} de daño por efectos de estado", + "effect_damage_npc": "El enemigo recibió {{damage}} de daño por efectos de estado", + "level_up": "¡Subiste de nivel! ¡Ahora eres nivel {{new_level}}!", + "item_heal": "Curaste {{heal}} PS", + "item_restore": "Restauraste {{amount}} de {{stat}}", + "died": "¡Has sido derrotado!", + "turns_remaining": "{{turns}} turnos restantes" }, "modal": { "supplies_title": "Suministros de Combate", diff --git a/pwa/src/utils/i18nUtils.ts b/pwa/src/utils/i18nUtils.ts index 5c1f631..cc35f96 100644 --- a/pwa/src/utils/i18nUtils.ts +++ b/pwa/src/utils/i18nUtils.ts @@ -7,25 +7,37 @@ export type I18nString = string | { [key: string]: string } * @param value The value to translate (string or object with language keys) * @returns The translated string for the current language, or fallback to English/first available */ -export const getTranslatedText = (value: I18nString | undefined | null): string => { +export const getTranslatedText = (value: I18nString | undefined | null, vars?: Record): string => { if (!value) return '' - // If it's already a string, return it - if (typeof value === 'string') return value + let text = typeof value === 'string' ? value : ''; - // If it's an object, try to get the current language - const currentLang = i18n.language || 'en' + if (!text && typeof value === 'object') { + const objValue = value as Record; + const currentLang = i18n.language || 'en'; - // 1. Try current language - if (value[currentLang]) return value[currentLang] + // 1. Try current language + if (objValue[currentLang]) { + text = objValue[currentLang]; + } + // 2. Try English fallback + else if (objValue['en']) { + text = objValue['en']; + } + // 3. Return the first available key + else { + const firstKey = Object.keys(objValue)[0]; + if (firstKey) text = objValue[firstKey]; + } + } - // 2. Try English fallback - if (value['en']) return value['en'] + if (!text) return ''; - // 3. Return the first available key - const firstKey = Object.keys(value)[0] - if (firstKey) return value[firstKey] + if (vars) { + Object.entries(vars).forEach(([k, v]) => { + text = text.replace(new RegExp(`{{${k}}}`, 'g'), String(v)); + }); + } - // 4. Fallback empty - return '' + return text; }