Files
echoes-of-the-ash/api/setup_test_env.py

78 lines
2.7 KiB
Python

import asyncio
import json
import time
import os
from database import Database
async def main():
# 1. Update npcs.json to add a test boss
with open('../gamedata/npcs.json', 'r') as f:
data = json.load(f)
if 'test_boss' not in data['npcs']:
data['npcs']['test_boss'] = {
"name": {"en": "Level 50 Test Boss", "es": "Jefe de Prueba Nivel 50"},
"description": {"en": "A huge terrifying monster.", "es": "Un monstruo enorme y aterrador."},
"emoji": "👹",
"hp_min": 1000,
"hp_max": 1500,
"damage_min": 25,
"damage_max": 45,
"defense": 15,
"xp_reward": 500,
"loot_table": [],
"flee_chance": 0.0,
"status_inflict_chance": 0.5,
"death_message": {"en": "The boss is defeated.", "es": "El jefe ha sido derrotado."}
}
with open('../gamedata/npcs.json', 'w') as f:
json.dump(data, f, indent=2)
print("Added 'test_boss' to npcs.json")
db = Database()
await db.connect()
# 2. Get Jocaru
player = await db.fetch_one("SELECT * FROM characters WHERE name ILIKE 'Jocaru'")
if not player:
print("Player Jocaru not found!")
return
pid = player['id']
ploc = player['location_id']
# 3. Give items
items_to_give = [
('reinforced_pack', 1),
('reinforced_bat', 1),
('knife', 1),
('first_aid_kit', 10),
('mystery_pills', 5),
('energy_bar', 10),
('molotov', 5)
]
for item_id, qty in items_to_give:
await db.add_item_to_inventory(pid, item_id, qty)
print("Granted test items and backpack.")
# 4. Give XP to reach lvl 50 if needed
# Level 50 is base + (50 * multiplier) ... the logic is in check_and_apply_level_up
await db.execute("UPDATE characters SET level = 50, xp = 50000, max_hp = 500, hp = 500, max_stamina = 200, stamina = 200 WHERE id = :pid", {"pid": pid})
print("Buffed Jocaru to lvl 50 manually.")
# 5. Spawn enemies at player's location
now = time.time()
despawn = now + 86400 # 1 day
enemies_to_spawn = ['raider_scout'] * 5 + ['feral_dog'] * 5 + ['mutant_rat'] * 5 + ['test_boss'] * 2
for eid in enemies_to_spawn:
await db.execute(
"INSERT INTO wandering_enemies (npc_id, location_id, spawn_timestamp, despawn_timestamp) VALUES (:nid, :loc, :start, :end)",
{"nid": eid, "loc": ploc, "start": now, "end": despawn}
)
print(f"Spawned {len(enemies_to_spawn)} enemies at {ploc}")
await db.disconnect()
if __name__ == "__main__":
asyncio.run(main())