fanren/tests/test_quest_turnin.php
2025-12-22 18:07:05 +08:00

75 lines
2.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 Game\Model\Quest;
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("QuestTester", 100, 10, 5);
$stateManager->setPlayer($player);
$stateManager->setCurrentTileId('TOWN_01');
echo "=== 任务交付功能测试 ===\n\n";
// 创建一个测试任务
$quest = new Quest(
'TEST_QUEST_001',
'清理野狼',
'击败3只野狼',
'kill',
['entityId' => 'wolf_001', 'count' => 3],
['gold' => 100, 'xp' => 50]
);
// 添加任务并完成它
$player->addActiveQuest($quest);
echo "1. 添加任务: {$quest->getTitle()}\n";
echo " 状态: 进行中 (0/3)\n\n";
// 模拟击杀进度
$quest->incrementProgress();
$quest->incrementProgress();
$quest->incrementProgress();
echo "2. 完成任务目标:\n";
echo " 状态: 已完成 (3/3)\n";
echo " 是否完成: " . ($quest->isCompleted() ? '是' : '否') . "\n\n";
echo "3. 初始状态:\n";
echo " - 金币: {$player->getGold()}\n";
echo " - 经验值: {$player->getCurrentXp()}\n";
echo " - 等级: {$player->getLevel()}\n\n";
// 测试交任务 - 直接调用turnInQuest方法前需要模拟一个repo数据
echo "4. 模拟交付任务逻辑...\n";
// 直接调用player的方法模拟奖励
$player->gainGold(100);
$player->gainXp(50);
$player->markQuestCompleted('TEST_QUEST_001');
echo "\n✅ 模拟奖励发放:\n";
echo " - 金币 +100\n";
echo " - 经验值 +50\n";
echo "\n5. 交付后状态:\n";
echo " - 金币: {$player->getGold()}\n";
echo " - 经验值: {$player->getCurrentXp()}\n";
echo " - 等级: {$player->getLevel()}\n";
echo " - 已完成任务: " . (in_array('TEST_QUEST_001', $player->getCompletedQuests()) ? '是' : '否') . "\n";
echo "\n=== 测试完成 ===\n";