93 lines
3.2 KiB
PHP
93 lines
3.2 KiB
PHP
<?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"; |