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 "=== 《凡人修仙传》新任务系统完整流程测试 ===\n\n"; // 检查初始状态 echo "1. 初始状态:\n"; echo " - 活跃任务节点数: " . count($player->getActiveQuestNodes()) . "\n"; echo " - 金币: " . $player->getGold() . "\n"; echo " - 经验: " . $player->getCurrentXp() . "\n"; // 接受任务 echo "\n2. 接受任务:\n"; $dispatcher->dispatch(new Event('QuestAcceptRequest', ['questId' => 'QUEST_001'])); $initialNodes = $player->getActiveQuestNodes(); echo " - 接受后活跃节点: " . count($initialNodes) . "\n"; if (isset($initialNodes['QUEST_001'])) { echo " - 任务QUEST_001节点: " . $initialNodes['QUEST_001'] . "\n"; } // 模拟完成目标 echo "\n3. 完成任务目标:\n"; // 更新任务节点到目标节点 $player->updateQuestNode('QUEST_001', 'ACCEPT'); // 模拟目标完成事件 $dispatcher->dispatch(new Event('QuestProgressEvent', [ 'questId' => 'QUEST_001' ])); $afterProgressNodes = $player->getActiveQuestNodes(); echo " - 完成目标后节点: " . ($afterProgressNodes['QUEST_001'] ?? '未找到') . "\n"; // 检查奖励是否发放 echo "\n4. 奖励发放检查:\n"; echo " - 金币: " . $player->getGold() . "\n"; echo " - 经验: " . $player->getCurrentXp() . "\n"; // 检查任务是否完成 echo "\n5. 任务完成检查:\n"; $completedQuests = $player->getCompletedQuests(); echo " - 已完成任务数: " . count($completedQuests) . "\n"; if (in_array('QUEST_001', $completedQuests)) { echo " - QUEST_001 已完成: ✅\n"; } else { echo " - QUEST_001 已完成: ❌\n"; } // 测试分支任务 echo "\n6. 分支任务测试 (QUEST_004):\n"; $dispatcher->dispatch(new Event('QuestAcceptRequest', ['questId' => 'QUEST_004'])); $quest4Nodes = $player->getActiveQuestNodes(); if (isset($quest4Nodes['QUEST_004'])) { echo " - 任务QUEST_004节点: " . $quest4Nodes['QUEST_004'] . "\n"; // 模拟选择接受路径 $dispatcher->dispatch(new Event('DialogueChoice', [ 'choiceIndex' => 0, // 选择"请墨大夫传授功法" 'questId' => 'QUEST_004' ])); $afterChoiceNodes = $player->getActiveQuestNodes(); echo " - 选择后节点: " . ($afterChoiceNodes['QUEST_004'] ?? '未找到') . "\n"; } echo "\n输出消息:\n"; echo $output->fetch() . "\n"; echo "=== 完整流程测试完成 ===\n";