""" 세계관 생성 및 관리를 담당하는 모듈 """ from modules.ai_service import generate_gemini_text def generate_world_description(theme): """ 선택한 테마에 기반한 세계관 생성 - 개선된 버전 Args: theme (str): 세계관 테마 Returns: str: 생성된 세계관 설명 """ prompt = f""" 당신은 TRPG 게임 마스터입니다. '{theme}' 테마의 몰입감 있는 세계를 한국어로 만들어주세요. 다음 구조에 따라 체계적으로 세계관을 구축해주세요: # 1. 기본 골격 수립 ## 핵심 테마와 분위기 - '{theme}'의 특성이 뚜렷하게 드러나는 세계의 중심 이념이나 분위기 ## 세계의 독창적 규칙 - 이 세계만의 특별한 물리법칙이나 마법/기술 체계 # 2. 구조적 요소 ## 주요 지역 (3~5개) - 각 지역의 특성과 분위기 ## 주요 세력 (2~3개) - 세력 간의 관계와 갈등 구조 # 3. 현재 상황 ## 중심 갈등 - 플레이어가 직면하게 될 세계의 주요 문제나 갈등 ## 잠재적 위협 - 세계를 위협하는 요소나 임박한 위기 # 4. 플레이어 개입 지점 - 플레이어가 이 세계에서 영향력을 행사할 수 있는 방법 - 탐험 가능한 비밀이나 수수께끼 모든 문장은 반드시 완성된 형태로 작성하세요. 중간에 문장이 끊기지 않도록 해주세요. 전체 내용은 약 400-500단어로 작성해주세요. """ return generate_gemini_text(prompt, 800) def master_answer_question(question, world_desc, theme): """ 세계관에 대한 질문에 마스터가 답변 - 개선된 버전 Args: question (str): 플레이어의 질문 world_desc (str): 세계관 설명 theme (str): 세계관 테마 Returns: str: 마스터의 답변 """ try: prompt = f""" 당신은 TRPG 게임 마스터입니다. 플레이어가 '{theme}' 테마의 다음 세계에 대해 질문했습니다: 세계 설명: {world_desc[:500]}... 플레이어 질문: {question} ## 응답 지침: 1. 게임 마스터로서 이 질문에 대한 답변을 한국어로 작성해주세요. 2. 세계관을 풍부하게 하면서 플레이어의 상상력을 자극하는 답변을 제공하세요. 3. 플레이어가 알 수 없는 신비한 요소를 한두 가지 남겨두세요. 4. 질문에 관련된 세계의 역사, 전설, 소문 등을 포함하세요. 5. 150단어 이내로 간결하게 답변하세요. 모든 문장은 완결된 형태로 작성하세요. """ return generate_gemini_text(prompt, 400) except Exception as e: from config.constants import BACKUP_RESPONSES return BACKUP_RESPONSES["question"] # 백업 응답 반환 def generate_world_expansion(world_description, theme, expansion_topic): """ 세계관을 특정 주제로 확장하는 함수 Args: world_description (str): 기존 세계관 설명 theme (str): 세계관 테마 expansion_topic (str): 확장할 주제 Returns: str: 확장된 세계관 내용 """ prompt = f""" 당신은 TRPG 게임 마스터입니다. 다음 세계관 설명을 이어서 작성해주세요. 이전 세계관 내용을 기반으로 "{expansion_topic}" 측면을 더 상세히 확장해주세요. 테마: {theme} 현재 세계관 설명의 일부: {world_description[:500]}... ## 확장 지침: 1. 선택한 주제({expansion_topic})에 초점을 맞추어 세계관을 확장하세요. 2. 플레이어가 탐험하거나 상호작용할 수 있는 구체적인 요소를 추가하세요. 3. 이전 내용과 일관성을 유지하면서 세계를 더 풍부하게 만드세요. 4. 비밀, 갈등, 또는 미스터리 요소를 하나 이상 포함하세요. 5. 200-300단어 내외로 작성하세요. 6. 단락을 나누어 가독성을 높이세요. 모든 문장은 완결된 형태로 작성하세요. """ return generate_gemini_text(prompt, 500) def master_answer_game_question(question, theme, location, world_description): """ 게임 중 질문에 마스터가 답변 Args: question (str): 플레이어의 질문 theme (str): 세계관 테마 location (str): 현재 위치 world_description (str): 세계관 설명 Returns: str: 마스터의 답변 """ prompt = f""" 당신은 TRPG 게임 마스터입니다. 플레이어가 게임 중에 다음과 같은 질문을 했습니다: {question} ## 게임 정보 세계 테마: {theme} 현재 위치: {location} 세계 설명: {world_description[:300]}... ## 응답 지침 1. 게임의 흐름을 유지하되, 플레이어에게 유용한 정보를 제공하세요. 2. 세계관의 신비함과 일관성을 유지하세요. 3. 필요하다면 플레이어의 캐릭터가 알지 못하는 정보는 "소문에 따르면..." 또는 "전설에 의하면..."과 같은 형식으로 제공하세요. 4. 직접적인 답변보다는 플레이어가 스스로 발견하고 탐험할 수 있는 힌트를 제공하세요. 5. 150단어 이내로 답변하세요. 6. 모든 문장은 완결된 형태로 작성하세요. """ return generate_gemini_text(prompt, 400)