Pre-combat-refactor: current state with PvP sync, boss setup scripts, combat fixes
This commit is contained in:
100
setup_test_env.py
Normal file
100
setup_test_env.py
Normal file
@@ -0,0 +1,100 @@
|
||||
import asyncio
|
||||
import json
|
||||
import time
|
||||
import os
|
||||
import random
|
||||
from api.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!")
|
||||
await db.disconnect()
|
||||
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:
|
||||
for _ in range(qty):
|
||||
from utils.game_helpers import generate_unique_item_stats
|
||||
from api.items import ITEMS_MANAGER
|
||||
item_def = ITEMS_MANAGER.get_item(item_id)
|
||||
if hasattr(item_def, 'durability') and item_def.durability:
|
||||
tier = item_def.tier if hasattr(item_def, 'tier') else 1
|
||||
stats = generate_unique_item_stats(item_id, item_def.durability, tier)
|
||||
uid = await db.create_unique_item(
|
||||
item_id=item_id,
|
||||
tier=tier,
|
||||
durability=stats['durability'],
|
||||
max_durability=stats['durability'],
|
||||
stats=json.dumps(stats.get('stats', {}))
|
||||
)
|
||||
await db.execute(
|
||||
"INSERT INTO inventory (character_id, item_id, quantity, unique_item_id) VALUES (:cid, :iid, 1, :uid)",
|
||||
{"cid": pid, "iid": item_id, "uid": uid}
|
||||
)
|
||||
else:
|
||||
await db.execute(
|
||||
"INSERT INTO inventory (character_id, item_id, quantity) VALUES (:cid, :iid, 1)",
|
||||
{"cid": pid, "iid": item_id}
|
||||
)
|
||||
print("Granted test items and backpack.")
|
||||
|
||||
# 4. Give XP to reach lvl 50 if needed
|
||||
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())
|
||||
Reference in New Issue
Block a user