new QuestionHelper()]); $container = new ServiceContainer($input, $output, $helperSet); $dispatcher = $container->registerServices(); $stateManager = $container->getStateManager(); // 创建测试玩家 $player = new \Game\Model\Player("HanLi", 100, 10, 5); $player->setLevel(5); // 设置等级为5,满足所有任务条件 $player->gainGold(50); // 给玩家一些初始金币 $stateManager->setPlayer($player); $stateManager->setCurrentTileId('TOWN_01'); echo "=== NPC与任务关联测试 ===\n\n"; // 测试1: 检查任务与NPC的关联 echo "1. 检查任务与NPC关联:\n"; $questRepo = $container->getQuestRepository(); $npcRepo = $container->getNpcRepository(); // 获取VILLAGER_1相关的任务 $villagerQuests = $questRepo->getQuestsByNpc('VILLAGER_1'); echo " - VILLAGER_1关联的任务: " . implode(', ', $villagerQuests) . "\n"; // 获取MODOCTOR相关的任务 $doctorQuests = $questRepo->getQuestsByNpc('MODOCTOR'); echo " - MODOCTOR关联的任务: " . implode(', ', $doctorQuests) . "\n"; // 检查任务数据中的NPC ID $quest1 = $questRepo->find('QUEST_001'); if (isset($quest1['npcId'])) { echo " - QUEST_001的NPC: {$quest1['npcId']}\n"; } else { echo " - QUEST_001没有NPC关联\n"; } $quest3 = $questRepo->find('QUEST_003'); if (isset($quest3['npcId'])) { echo " - QUEST_003的NPC: {$quest3['npcId']}\n"; } else { echo " - QUEST_003没有NPC关联\n"; } // 测试2: 检查NPC是否存在 echo "\n2. 检查NPC数据:\n"; $villager = $npcRepo->createNPC('VILLAGER_1'); if ($villager) { echo " - VILLAGER_1存在: {$villager->getName()}\n"; } else { echo " - VILLAGER_1不存在\n"; } $doctor = $npcRepo->createNPC('MODOCTOR'); if ($doctor) { echo " - MODOCTOR存在: {$doctor->getName()}\n"; } else { echo " - MODOCTOR不存在\n"; } // 测试3: 模拟NPC交互 echo "\n3. 模拟NPC交互测试:\n"; $initialActiveQuests = count($player->getActiveQuests()); echo " - 初始活跃任务数: {$initialActiveQuests}\n"; // 模拟与VILLAGER_1的交互 $dispatcher->dispatch(new Event('StartInteractionEvent', ['npcId' => 'VILLAGER_1'])); $afterInteractionQuests = count($player->getActiveQuests()); echo " - 与VILLAGER_1交互后任务数: {$afterInteractionQuests}\n"; // 检查是否接受了任务 $activeQuestNodes = $player->getActiveQuestNodes(); echo " - 活跃任务节点: " . count($activeQuestNodes) . "\n"; foreach ($activeQuestNodes as $questId => $nodeId) { echo " - 任务{$questId}节点: {$nodeId}\n"; } echo "\n输出消息:\n"; echo $output->fetch() . "\n"; echo "=== 关联测试完成 ===\n";