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

93 lines
3.2 KiB
PHP
Raw Permalink 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";
// 检查初始状态
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";