adnanmula/keyforge-game-log-parser 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

adnanmula/keyforge-game-log-parser

最新稳定版本:0.3.0

Composer 安装命令:

composer require adnanmula/keyforge-game-log-parser

包简介

README 文档

README

Parse The Crucible game logs into a structured model.

Requirements

  • PHP >= 8.4

Installation

Install via Composer:

composer require adnanmula/keyforge-game-log-parser

Quick start

<?php

use AdnanMula\KeyforgeGameLogParser\Event\EventType;
use AdnanMula\KeyforgeGameLogParser\Parser\GameLogParser;
use AdnanMula\KeyforgeGameLogParser\Parser\ParseType;

$log = file_get_contents('path/to/log.txt');

$parser = new GameLogParser();
$game = $parser->execute($log, ParseType::PLAIN);

$winner = $game->winner()?->name;
$keysForged = $game->timeline()->filter(EventType::KEY_FORGED)->count();
$reapsByPlayer1 = $game->player1->timeline->filter(EventType::REAP)->count();
$firstCreatureUsedToReapByPlayer1 = $game->player1->timeline->filter(EventType::REAP)->at(0)->value;

Input formats

You can parse logs provided in 3 different formats via ParseType:

  • ParseType::PLAIN (default): a single string containing the full log, what you get when use tco's copy to clipboard button.
  • ParseType::ARRAY: an array of strings containing the log messages, one per line.
  • ParseType::HTML: the HTML markup of the log view.
<?php

use AdnanMula\KeyforgeGameLogParser\Parser\GameLogParser;
use AdnanMula\KeyforgeGameLogParser\Parser\ParseType;

$parser = new GameLogParser();

$plainString = '
    Alice brings Deck A to The Crucible
    Bob brings Deck B to The Crucible
    ...
';

// PLAIN
$game1 = $parser->execute($plainString, ParseType::PLAIN);

// ARRAY
$messages = [
    'Alice brings Deck A to The Crucible',
    'Bob brings Deck B to The Crucible',
    // ...
];
$game2 = $parser->execute($messages, ParseType::ARRAY);

// HTML
$html = '<div class="message">Alice brings Deck A to The Crucible</div>...';
$game3 = $parser->execute($html, ParseType::HTML);

Exploring results

execute() returns a Game object with the following useful members:

  • player1, player2 (AdnanMula\KeyforgeGameLogParser\Game\Player)
    • name, deck, isFirst, isWinner, hasConceded
    • timeline (AdnanMula\KeyforgeGameLogParser\Game\Timeline)
  • winner(): ?Player
  • loser(): ?Player
  • first(): ?Player (the player who took the first turn)
  • timeline(): Timeline (combined, time-ordered events from both players)

Timelines are collections with helper methods:

  • filter(EventType ...$events): Collection
  • count(), first(), last(), at(int $i), items(): array

Example queries:

<?php

use AdnanMula\KeyforgeGameLogParser\Event\EventType;

// Checks declared across the whole game
$checks = $game->timeline()->filter(EventType::CHECK_DECLARED)->items();

// Player-specific timeline queries
$p1Checks = $game->player1->timeline->filter(EventType::CHECK_DECLARED)->items();
$p2Keys   = $game->player2->timeline->filter(EventType::KEY_FORGED)->items();
$reapsAndFights   = $game->player2->timeline->filter(EventType::REAP, EventType::FIGHT)->items();

etc...

Events

The library categorizes log messages into typed events via EventType enum:

  • AMBER_OBTAINED
  • AMBER_STOLEN
  • CARDS_DISCARDED
  • CARDS_DRAWN
  • CARDS_PLAYED
  • CARD_USED
  • HOUSE_CHOSEN
  • KEY_FORGED
  • FIGHT
  • REAP
  • EXTRA_TURN
  • TOKEN_CREATED
  • PROPHECY_ACTIVATED
  • PROPHECY_FULFILLED
  • FATE_RESOLVED
  • TIDE_RAISED
  • CHAINS_ADDED
  • CHAINS_REDUCED
  • PLAYER_CONCEDED
  • CHECK_DECLARED

统计信息

  • 总下载量: 146
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-04-16

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固