我正在考虑为游戏创建一个模组,在游戏启动时随机化代码行。具体来说,我想修改 Forza Horizo n 4 以随机化从点“a”到点“b”的线路,然后从点“c”到点“d”等等,以真正随机化游戏中的收音机。我认为这是我正在考虑的 .dll,但我没有任何编码知识,所以我不知道如何创建它,或者是否有可能修改配置文件的文件是游戏使用。我已经尝试在游戏运行时修改配置,游戏不会为此烦恼,但我没有进一步。配置写在 .xml 文件中。我想要这个的原因是因为游戏本身不会随机化,如果你修改收音机以播放更多歌曲,这些额外的歌曲很少播放,只会占用空间。通过在启动时随机化这些行,这个问题将得到解决。 .xml 文件如下所示:
<PlayList Type="FreeRoam">
<Entry Name="<Gametitle>_<Radioname>_<artist>_<songtitle>" />
...
<Entry Name="<Gametitle>_<Radioname>_<artist>_<songtitle>" />
</PlayList>
<PlayList Type="Event">
<Entry Name="<Gametitle>_<Radioname>_<artist>_<songtitle>" />
...
<Entry Name="<Gametitle>_<Radioname>_<artist>_<songtitle>" />
</PlayList>
这些
<PlayList Type="FreeRoam">
和</PlayList>
之间的一切都应该是随机的。
在这一点上,我通过选择应该随机化的行然后使用“编辑>行操作>随机化行顺序”,使用 Notepad++ 手动随机化这些行,但正如您可能预料的那样,如果您想这样做,这是非常痛苦的定期这样做,所以这就是我想要那个的原因。
我能够使用 PowerShell 对播放列表进行排序。我做了 PlayList PlayLists 的父类。这是代码
using assembly System
using assembly System.Linq
using assembly System.Xml.Linq
$inputFilename = "c:\temp\test.xml"
$outputFilename = "c:\temp\test1.xml"
$xDoc = [System.Xml.Linq.XDocument]::Load($inputFilename)
$playlists = $xDoc.Descendants("Playlists")
$rand = [System.Random]::new()
$entries = $playlists.Descendants("Entry")
$table = [System.Collections.ArrayList]::new()
foreach($entry in $entries)
{
$newRow = New-Object -TypeName psobject
$newRow | Add-Member -NotePropertyName Name -NotePropertyValue $rand.Next()
$newRow | Add-Member -NotePropertyName XElement -NotePropertyValue $entry
$table.Add($newRow) | Out-Null
}
$table
$table = $table | Sort-Object -Property Name
$table
$playlists.RemoveNodes()
$newPlayList =[System.Xml.Linq.XElement]::new([System.Xml.Linq.XName]::Get("PlayList"))
$newPlayList.Add([System.Xml.Linq.XAttribute]::new("Type", "Random"));
$playlists.Add($newPlayList);
foreach($row in $table)
{
$newPlayList.Add([System.Xml.Linq.XElement]$row.XElement);
}
$xDoc.Save($outputFilename)