mauserrifle/simresults

PHP 模拟赛车结果阅读器

v0.20.0 2024-07-10 12:31 UTC

README

Minimum PHP Version CI Status Total Downloads License

Simresults 是一个使用 PHP 开发的开源、面向对象的库。它允许您读取赛车游戏的日志文件,并将它们转换为简单的数据模型,以便轻松读取这些数据。

该项目是网站 simresults.net 的核心,允许您上传您的赛车日志文件,并将它们转换为可读格式。上传的结果将被保存并公开,以便访客可以与他们的赛车伙伴分享。一个示例结果可以在 http://simresults.net/130529-X2g 找到。

该网站是一种服务,同时也是使用此库可以实现的功能的演示。此库不提供任何 HTML 模板或其他任何内容。任何“实现”都取决于您在自己的项目中进行,且不受任何框架的限制。

该项目由 Maurice van der Star 创建(2013)并维护。

请考虑 捐赠 以支持未来的开发。

还可以使用 Simresults 网站的远程结果 API。这需要较少的工作和编程知识。

支持的游戏

Simresults 支持广泛的游戏

  • rFactor
  • rFactor 2
  • Project Cars
  • Project Cars 2
  • Assetto Corsa
  • Assetto Corsa Competizione
  • Automobilista
  • Automobilista 2
  • Game Stock Car 2012
  • Game Stock Car 2013
  • Game Stock Car Extreme
  • Formula Truck 2013
  • RACE
  • RACE 07
  • GTR
  • GTR2
  • GT Legends
  • RaceRoom Racing Experience
  • BMW M3 Challenge
  • F1 challenge 99-02

以下 RACE (07) 的扩展也应该可以工作

  • Race: Caterham expansion
  • GTR Evolution
  • Crowne Plaza
  • STCC - The Game
  • STCC 2 - The Game
  • RACE On
  • Raceroom - The Game
  • Raceroom - The Game 2
  • Formula Raceroom
  • GT Power
  • WTCC 2010
  • Retro
  • Race Injection
  • Volvo - The Game

请注意,Formula Truck 将被报告为 rFactor 游戏。

F1 challenge 和 GTR 的结果可能会缺少圈数。

Assetto Corsa(race_out.json)和 Raceroom 的结果可能只包含 1 圈。

特性

  • 可以读取包含以下信息的完整会话:游戏,服务器,设置,赛道,参与者/车手包括交换,车辆,化合物选择,聊天,圈数/区域,燃油消耗,维修站信息,处罚和事故
  • 提供额外的方法来获取特定数据,例如 getBestLap()getBestLapBySector(<int>)
  • 提供辅助类以按时间排序圈数并将时间格式化为人类可读格式(h:i:s.u
  • 缓存重方法如 getLapsSortedBySector(<int>)。这对于拥有200+圈数的耐力赛结果非常有用
  • API未进行单元测试

rFactor读取器

lib/Data/Reader/Rfactor2.php

  • 支持rFactor和rFactor 2。也适用于其他由rFactor驱动的游戏:Automobilista、Game Stock Car 2012、Game Stock Car 2013和Formula Truck 2013
  • 检测并修复位置数据(有时日志文件会因延迟/错误报告完全错误的位置)
  • 检测人类和AI玩家使用他们的辅助工具(有时日志文件报告错误的玩家状态)

Project Cars服务器读取器

lib/Data/Reader/ProjectCarsServer.php

Assetto Corsa读取器

lib/Data/Reader/AssettoCorsa.php

  • 数据有限。如果可能,请使用服务器日志。

Assetto Corsa服务器读取器

lib/Data/Reader/AssettoCorsaServer.php

Assetto Corsa服务器读取器 JSON

lib/Data/Reader/AssettoCorsaServerJson.php

Assetto Corsa Competizione

lib/Data/Reader/AssettoCorsaCompetizione.php

RaceRoom服务器读取器

lib/Data/Reader/RaceRoomServer.php

RACE 07读取器

lib/Data/Reader/Race07.php

  • 也适用于以下游戏:RACE、GTR、GTR2、GT Legends、BMW M3 Challenge、F1 challenge 99-02及其所有扩展
  • 检查并修复日志变化,如非零圈数和缺失圈数数据

iRacing读取器

lib/Data/Reader/Iracing.php

  • 数据有限。只包含车手的最佳圈数。

要求

  • PHP >= 7.3
  • Composer(用于轻松安装和自动加载)

安装和示例

Simresults可以使用 composer 进行安装和自动加载。但当然,它也可以与任何 PSR-0 自动加载器一起工作。

Linux/OSX示例

安装composer.

将Simresults包添加到 composer.json 文件中

composer require mauserrifle/simresults:dev-develop

创建index.php

<?php

// Load code
require(realpath('vendor/autoload.php'));

// Path to the result source file
$file = realpath(dirname(__FILE__)
        .'/vendor/mauserrifle/simresults/tests/logs/rfactor2'
        .DIRECTORY_SEPARATOR.'race.xml');

// Get a reader using the source file
$reader = \Simresults\Data_Reader::factory($file);

// Get the first session. Note: Use `getSessions()` to get all sessions
$session = $reader->getSession();

// Get participants sorted by their position
$participants = $session->getParticipants();

// Get the driver name of the second participant
$driver_name = $participants[1]->getDriver()->getName();

// Get the best lap of the second participant
$best_lap = $participants[1]->getBestLap();

// Get the best lap of the session
$session_best_lap = $session->getBestLap();

// Format the gap between the two laps
$helper = new \Simresults\Helper;
$best_lap_gap = $helper->formatTime($session_best_lap->getGap($best_lap));
echo $best_lap_gap;

运行服务器

 php -S localhost:8000

打开 https://:8000 并应该正常工作!

有关进一步使用,请阅读 lib 文件夹中的类代码。它们经过了仔细的文档说明。

赞助商

感谢以下赞助商对Simresults的支持!请访问他们 :)

错误

有错误或功能请求? 请打开一个新问题

已知问题

缓存

某些类如Participant执行大量的缓存。因此,在调用排序方法之后更改任何值将是徒劳的。尚无缓存无效化方法(目前)。很可能永远不需要,因为实际上没有任何用例需要读取所有数据后更改值。

当编写读取器时。永远不要在参与者(使用缓存方法)上调用如getVehicle()等方法。在读取过程中重用您自己创建的对象(如$vehicle),以防止任何早期无效缓存。为此,对所有类型的对象都这样做。

圈数缺失

所有游戏的日志往往会缺少圈数数据。检查日志。

标记为RACE会话而实际上不是

RACE 07读取器检测到所有车手都是DNF时为预赛。这些日志文件中没有会话类型。在某些情况下,这种检测可能是不正确的。

会话日期不正确

GTR、GTL、F1 challenge没有时间戳或时区信息。因此,日期使用默认时区创建。

贡献

该项目旨在通过新功能和游戏支持进行扩展。请随意在GitHub上 fork Simresults 并提交拉取请求!

该项目使用PHPUnit和phpspec进行测试。如果您提供任何更改,请确保所有新的添加都已测试。

运行simresults测试

要运行测试,请使用以下命令

./vendor/bin/phpunit
./vendor/bin/phpspec run

许可协议

Simresults库是开源软件,许可证为ISC许可证