Lemontropia-Suite/core/healing_tools.py

153 lines
6.4 KiB
Python

"""
Healing Tools Database for Lemontropia Suite
Medical tools, Restoration Chips, and FAPs with decay data.
"""
from decimal import Decimal
from dataclasses import dataclass
from typing import Optional, Dict, List
@dataclass
class HealingTool:
"""Represents a healing tool in Entropia Universe."""
name: str
item_id: str
heal_amount: Decimal # HP healed per use
decay_pec: Decimal # Decay in PEC per heal
professional_level: int = 0 # Required profession level (0 = no requirement)
is_chip: bool = False # True if it's a restoration chip
@property
def economy(self) -> Decimal:
"""Calculate economy in hp/pec (higher is better)."""
if self.decay_pec > 0:
return self.heal_amount / self.decay_pec
return Decimal('0')
@property
def cost_per_heal_ped(self) -> Decimal:
"""Calculate cost per heal in PED."""
return self.decay_pec / Decimal('100')
# Healing Tools Database
# Data from EntropiaWiki and community research
# Format: name, item_id, heal_amount, decay_pec, prof_level, is_chip
HEALING_TOOLS: List[HealingTool] = [
# === VIVO SERIES (Entry Level) ===
HealingTool("Vivo T10", "vivo_t10", Decimal("10"), Decimal("0.815"), 0, False),
HealingTool("Vivo T15", "vivo_t15", Decimal("15"), Decimal("1.19"), 0, False),
HealingTool("Vivo S10", "vivo_s10", Decimal("21"), Decimal("1.705"), 0, False),
HealingTool("Vivo S15", "vivo_s15", Decimal("27"), Decimal("2.155"), 0, False),
# === HE DOC SERIES (Mid Level) ===
HealingTool("Hedoc MM10", "hedoc_mm10", Decimal("44"), Decimal("2.09"), 0, False),
HealingTool("Hedoc MM20", "hedoc_mm20", Decimal("52"), Decimal("2.48"), 0, False),
HealingTool("Hedoc MM30", "hedoc_mm30", Decimal("64"), Decimal("3.04"), 0, False),
HealingTool("Hedoc MK50", "hedoc_mk50", Decimal("75"), Decimal("3.55"), 0, False),
HealingTool("Hedoc SK80", "hedoc_sk80", Decimal("120"), Decimal("5.65"), 0, False),
# === EMT KIT SERIES ===
HealingTool("EMT Kit Ek-2350", "emt_2350", Decimal("35"), Decimal("8.75"), 0, False), # Low eco
HealingTool("EMT Kit Ek-2600", "emt_2600", Decimal("52"), Decimal("2.60"), 0, False), # 20 hp/pec
HealingTool("EMT Kit Ek-2600 Improved", "emt_2600_imp", Decimal("52"), Decimal("2.60"), 0, False),
HealingTool("EMT Kit Ek-2350 Adjusted", "emt_2350_adj", Decimal("52"), Decimal("5.20"), 0, False),
# === RESTORATION CHIPS (Mindforce) ===
# Requires Biotropic profession level
HealingTool("Restoration Chip I", "resto_1", Decimal("15"), Decimal("1.2"), 1, True),
HealingTool("Restoration Chip II", "resto_2", Decimal("25"), Decimal("1.9"), 2, True),
HealingTool("Restoration Chip III", "resto_3", Decimal("35"), Decimal("2.6"), 3, True),
HealingTool("Restoration Chip IV", "resto_4", Decimal("45"), Decimal("3.3"), 4, True),
HealingTool("Restoration Chip V", "resto_5", Decimal("55"), Decimal("4.0"), 5, True),
HealingTool("Restoration Chip VI", "resto_6", Decimal("65"), Decimal("4.7"), 6, True),
HealingTool("Restoration Chip VII", "resto_7", Decimal("75"), Decimal("5.4"), 7, True),
HealingTool("Restoration Chip VIII", "resto_8", Decimal("85"), Decimal("6.1"), 8, True),
HealingTool("Restoration Chip IX", "resto_9", Decimal("95"), Decimal("6.8"), 9, True),
HealingTool("Restoration Chip X", "resto_10", Decimal("110"), Decimal("7.8"), 10, True),
# Adjusted Restoration Chip (Popular mid-level)
HealingTool("Adjusted Restoration Chip", "resto_adj", Decimal("60"), Decimal("2.88"), 5, True), # ~20.8 hp/pec
# === SPECIAL/UNIQUE TOOLS ===
HealingTool("Refurbished H.E.A.R.T. Rank VI", "heart_vi", Decimal("108"), Decimal("6.0"), 0, False), # 18 hp/pec
HealingTool("Herb Box", "herb_box", Decimal("19"), Decimal("1.89"), 0, False), # ~10 hp/pec
HealingTool("Omegaton Fast Aid Pack", "fap_omega", Decimal("24"), Decimal("1.20"), 0, False),
]
def get_healing_tool(name: str) -> Optional[HealingTool]:
"""Get a healing tool by name."""
for tool in HEALING_TOOLS:
if tool.name.lower() == name.lower():
return tool
return None
def get_tools_by_economy(min_economy: Decimal = Decimal("0")) -> List[HealingTool]:
"""Get healing tools sorted by economy (best first)."""
tools = [t for t in HEALING_TOOLS if t.economy >= min_economy]
return sorted(tools, key=lambda x: x.economy, reverse=True)
def get_tools_by_heal_amount(min_heal: Decimal = Decimal("0")) -> List[HealingTool]:
"""Get healing tools sorted by heal amount (highest first)."""
tools = [t for t in HEALING_TOOLS if t.heal_amount >= min_heal]
return sorted(tools, key=lambda x: x.heal_amount, reverse=True)
def compare_healing_tools(tool_names: List[str]) -> List[tuple]:
"""Compare multiple healing tools.
Returns list of tuples: (name, heal_amount, decay_pec, economy, cost_ped)
"""
results = []
for name in tool_names:
tool = get_healing_tool(name)
if tool:
results.append((
tool.name,
tool.heal_amount,
tool.decay_pec,
tool.economy,
tool.cost_per_heal_ped
))
# Sort by economy (best first)
results.sort(key=lambda x: x[3], reverse=True)
return results
# Popular tool recommendations by level
RECOMMENDED_TOOLS: Dict[str, str] = {
"starter": "Vivo S10", # Everyone can use, decent economy
"mid_level": "Adjusted Restoration Chip", # Popular mid-level choice
"high_level": "Hedoc SK80", # High heal amount
"best_economy": "EMT Kit Ek-2600", # 20 hp/pec like armor
}
if __name__ == "__main__":
# Print comparison of popular tools
print("Healing Tools Comparison:")
print("-" * 80)
print(f"{'Tool':<35} {'Heal':<8} {'Decay':<8} {'Eco':<8} {'Cost/PED':<12}")
print("-" * 80)
tools_to_compare = [
"Vivo S10",
"Hedoc MM10",
"Adjusted Restoration Chip",
"EMT Kit Ek-2600",
"Refurbished H.E.A.R.T. Rank VI"
]
for name, heal, decay, eco, cost in compare_healing_tools(tools_to_compare):
print(f"{name:<35} {heal:<8} {decay:<8.2f} {eco:<8.2f} {cost:<12.4f}")
print("\n\nRecommended by Level:")
for level, tool_name in RECOMMENDED_TOOLS.items():
tool = get_healing_tool(tool_name)
if tool:
print(f"{level:<15}{tool_name} ({tool.economy:.2f} hp/pec)")