| from config import lore_data |
| from memory import create_npc_table, store_message, get_recent_history, get_message_count, clear_table |
|
|
| class NPCNode: |
| def __init__(self, clue, char_data, prerequisites=None): |
| self.name = char_data['name'] |
| self.faction = char_data.get('faction') |
| self.personality = char_data.get('personality') |
| self.speaking_style = char_data.get('speaking_style') |
| self.alive = char_data.get('alive') |
| self.prerequisites = prerequisites |
| self.message_count = 0 |
| self.clue_topic = None |
| self.clue = clue |
| self.next_npc = None |
| self.db_table = f"memory_{self.name.replace(' ', '_').replace('-', '_').lower()}" |
| create_npc_table(self.db_table) |
| |
| def store_exchange(self, player_message, npc_message): |
| store_message(self.db_table, "player", player_message) |
| store_message(self.db_table, "npc", npc_message) |
| self.message_count = get_message_count(self.db_table) |
| |
| def get_history(self, n): |
| return get_recent_history(self.db_table, n = n) |
| |
| def build_game_state(self, player_input, location = "New Dawn Station"): |
| history = self.get_history(n = 3) |
| history_str = "\n".join([f"{role}: {msg}" for role, msg in history]) |
| return f"Location: {location}. Speaking with {self.name}.\nRecent conversation:\n{history_str}\nPlayer says: {player_input}" |
| |
| def clear_memory(self): |
| return clear_table(self.db_table) |
| |
| @classmethod |
| def from_lore(cls, lore_data, npc_name): |
| char_data = {} |
| clue = "" |
| for c in lore_data['characters']: |
| if c['name'] == npc_name: |
| char_data = c |
| for m in lore_data['mystery_clues']: |
| if m['source'] == npc_name: |
| clue = m['clue'] |
| return cls(clue=clue, char_data=char_data) |