153 lines
6.4 KiB
Python
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)") |