fanren/tests/test_new_quest_system.php
2025-12-24 21:10:08 +08:00

106 lines
3.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
require __DIR__ . '/../vendor/autoload.php';
use Game\Core\ServiceContainer;
use Game\Event\Event;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\BufferedOutput;
use Symfony\Component\Console\Helper\HelperSet;
use Symfony\Component\Console\Helper\QuestionHelper;
$input = new ArrayInput([]);
$output = new BufferedOutput();
$helperSet = new HelperSet(['question' => 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";
// 测试1: 检查任务数据结构
echo "1. 任务数据结构测试:\n";
$questRepo = $container->getQuestRepository();
$questData = $questRepo->find('QUEST_001');
if (isset($questData['nodes'])) {
echo " - 任务节点结构: ✅\n";
echo " - 节点数量: " . count($questData['nodes']) . "\n";
foreach ($questData['nodes'] as $nodeId => $node) {
echo " - 节点 {$nodeId}: 类型={$node['type']}\n";
}
} else {
echo " - 任务节点结构: ❌\n";
}
// 测试2: 检查ConditionEngine
echo "\n2. 条件引擎测试:\n";
$conditionEngine = new \Game\System\ConditionEngine();
$conditions = $questData['nodes']['START']['preConditions'] ?? [];
$playerSatisfies = $conditionEngine->checkConditions($player, $conditions);
echo " - 玩家满足前置条件: " . ($playerSatisfies ? '✅' : '❌') . "\n";
// 测试3: 检查Evaluator
echo "\n3. 目标评估器测试:\n";
$evaluator = new \Game\System\Evaluator();
$objectiveNode = $questData['nodes']['ACCEPT'];
$objectiveResult = $evaluator->evaluateObjective($player, $objectiveNode['goal']);
echo " - 目标评估结果: " . ($objectiveResult ? '完成' : '未完成') . "\n";
// 测试4: 检查ActionExecutor
echo "\n4. 动作执行器测试:\n";
$actionExecutor = new \Game\System\ActionExecutor($dispatcher);
$initialGold = $player->getGold();
$initialXp = $player->getCurrentXp();
$rewardNode = $questData['nodes']['REWARD'];
if (isset($rewardNode['actions'])) {
$actionExecutor->executeActions($player, $rewardNode['actions']);
$finalGold = $player->getGold();
$finalXp = $player->getCurrentXp();
echo " - 金币变化: {$initialGold} -> {$finalGold}\n";
echo " - 经验变化: {$initialXp} -> {$finalXp}\n";
echo " - 动作执行: ✅\n";
}
// 测试5: 任务服务交互
echo "\n5. 任务服务交互测试:\n";
// 测试接受任务
$initialActiveNodes = count($player->getActiveQuestNodes());
$dispatcher->dispatch(new Event('QuestAcceptRequest', ['questId' => 'QUEST_001']));
$finalActiveNodes = count($player->getActiveQuestNodes());
echo " - 任务节点状态: {$initialActiveNodes} -> {$finalActiveNodes}\n";
if ($finalActiveNodes > $initialActiveNodes) {
echo " - 任务接受: ✅\n";
} else {
echo " - 任务接受: ❌\n";
}
// 测试6: 检查完成状态
echo "\n6. 任务完成状态测试:\n";
$currentNode = $player->getQuestNode('QUEST_001');
echo " - 当前节点: {$currentNode}\n";
// 模拟完成目标
$dispatcher->dispatch(new Event('QuestProgressEvent', [
'questId' => 'QUEST_001'
]));
// 检查是否跳转到奖励节点
$updatedNode = $player->getQuestNode('QUEST_001');
echo " - 更新后节点: {$updatedNode}\n";
echo "\n输出消息:\n";
echo $output->fetch() . "\n";
echo "=== 新任务系统测试完成 ===\n";