I thought I'd play around with PowerShell again, and see if I can create some kind of way to log the systems I visit without having to alt-tab out of the game or keep a notebook laying around. What I came up with seems to work pretty well (for me at least). Whenever you enter Frameshift, and the game creates your destination Island (instance), an entry is made in the game's network log (if you turn on verbose logging). This script looks for those entries and grabs the system name and time of entry. There are a couple of things you need to do in order to make this work.
.
The result (using the defaults in the script) will be that the script will run for 3 hours, read the game log file every 10 seconds and append to the VisitLog file if you've Frameshifted to a new destination (it also seems to work for in-system SuperCruise trips between stations too). The "Body" listings, as near as I can tell, are the internal game designation of the destination objects within a star system, but the log doesn't show the actual names.
Sample Visit Log:
.
I don't claim that it's particularly useful, just "interesting". I have a second monitor and tail the Visits log and watch the entries as they pop in. I find it an easy way to remember the last few places I've been so I can go back to them if I want (I'm not a fan of little scraps of paper everywhere). I also won't take responsibility if you goof something up, but can try to help sort things out if I can. I found no problems with the game while this is running, and you have the full source code so can see exactly what it's doing. Like it, don't like, use it, or don't. I just thought I'd share it.
.
- You need to add a line to the game's AppConfig.xml file. This file is located in the main install directory; on my machine it's "C:\Games\Frontier\EDLaunch\Products\FORC-FDEV-D-1003\AppConfig.xml". In the "Network" section, you need to add VerboseLogging="1" which I found out from another utility that said to do this.
Sample:
Code:<Threads RenderThreadStackSize="1048576" WorkerThreadStackSize="1048576" NumWorkerThreads="6" RenderJobQueueSize="10240" KernelJobQueueSize="10240" MinSpareCores="0" OptimiseForPerformance="1" UseThreadPriorities="0" PerformanceScaling="1" /> <Files MaxLoadRetries="10" /> <Network Port="0" upnpenabled="1" LogFile="netLog" DatestampLog="1" VerboseLogging="1" > </Network>
- You need to copy and paste the following PowerShell script wherever you want. There are 4 parameters at the top of the script with default values. Feel free to change them to match your setup and liking, otherwise you can over-ride them when you execute the script via command line.
The parameters are:- GameLogfilepath - this is the path to your game's logs folder, including the wildcard for the filename: "c:\Games\Frontier\EDLaunch\Products\FORC-FDEV-D-1003\Logs\netLog*"
- VisitLogfilepath - this is the path and name of the log file that will be created and appended to record the systems you visit: "c:\temp\ED_VisitLog.log"
- RunMinutes - this is how many minutes the script should run (you can kill it any time you want): 180
- RefreshSeconds - this is how many seconds between reading the log for updates: 10
Code:Param( [Parameter(Mandatory=$False,Position=1)] [string]$GameLogfilepath="c:\Games\Frontier\EDLaunch\Products\FORC-FDEV-D-1003\Logs\netLog*", [Parameter(Mandatory=$False,Position=2)] [string]$VisitLogfilepath="c:\temp\ED_VisitLog.log", [Parameter(Mandatory=$False,Position=3)] [int]$RunMinutes=180, [Parameter(Mandatory=$False,Position=4)] [int]$RefreshSeconds=10 ) function Read-Logfile { [CmdletBinding()] param ( [Parameter(Mandatory=$True)] [string]$LogFilename ) process { $Contents = Get-Content $LogFilename Write-Output $Contents } } function Find-CurrentGameLogfile { [CmdletBinding()] param ( [Parameter(Mandatory=$True)] [string]$LogFilepath ) process { $List = Get-ChildItem -Path "$LogFilepath" | Sort-Object -Descending LastWriteTime $FileInfo = $List[0] $FileData = New-Object PSCustomObject -Property @{ "FullFileName" = $FileInfo.FullName "FileDate" = Get-Date $FileInfo.LastWriteTime -Format "MMM-dd-yyyy" } Write-Output $FileData } } function Main { $VisitLogExists = $false $VisitList = @() $AddVisitList = @() #Read log files $GameLogfile = Find-CurrentGameLogfile $GameLogfilepath $GameLogContents = Read-Logfile $GameLogfile.FullFileName if (Test-Path $VisitLogfilepath) { $VisitLogExists = $true $VistLogContents = Read-Logfile $VisitLogfilepath } #Build list of systems visited (entry shows "cruising" if you dropped out of frameshift) #This then also shows inter-system "visits" where you drop out of supercruise $SystemsList = $GameLogContents | Where-Object {$_ -match " cruising"} | Sort-Object if ($SystemsList) { $LogDate = $GameLogfile.FileDate foreach ($Line in $SystemsList) { $Entry = $Line -split "}" $EntryTime = $Entry[0].Substring(1) $SystemLine = $Entry[1].Split(")") $System = $SystemLine[0].Split("(")[1] $Body = $SystemLine[1].Split(":")[1].Split(" ")[0] $VisitList += "$LogDate $EntryTime | $System (Body $Body)" } #If visit log doesn't exist, create it with current data, #otherwise compare game log data to visit log data and add new visit entries if (!($VisitLogExists)) { $VisitList | Out-File $VisitLogfilepath } else { $Compare = Compare-Object $VisitList $VistLogContents if ($Compare) { foreach ($item in $Compare) { if ($item.SideIndicator -eq "<=") { $AddVisitList += $item.InputObject } } $AddVisitList | Out-File -Append $VisitLogfilepath } } } } $EndTime = (Get-Date).AddMinutes($RunMinutes) Do { [Void]$blah = Main Start-Sleep -Seconds $RefreshSeconds } Until ((Get-Date) -gt $EndTime)
- Run the script with PowerShell (I named mine "ED_System_Visits.ps1" and have it in my C:\Temp folder for now. So from the PowerShell prompt (remember, if you want to change the defaults to match your setup, you don't need to supply parameters on the commandline.
Sample Commandline:
Code:PS C:\temp> .\ED_System_Visits.ps1 -GameLogfilepath "c:\Games\Frontier\EDLaunch\Products\FORC-FDEV-D-1003\Logs\netLog*" -VisitLogfilepath "c:\temp\ED_VisitLog.log" -RunMinutes 60 -RefreshSeconds 30
The result (using the defaults in the script) will be that the script will run for 3 hours, read the game log file every 10 seconds and append to the VisitLog file if you've Frameshifted to a new destination (it also seems to work for in-system SuperCruise trips between stations too). The "Body" listings, as near as I can tell, are the internal game designation of the destination objects within a star system, but the log doesn't show the actual names.
Sample Visit Log:
Code:
Jan-07-2015 19:08:43 | Gliese 563.1 (Body 0)
Jan-07-2015 19:18:01 | LTT 14271 (Body 0)
Jan-07-2015 19:28:47 | Gliese 563.1 (Body 0)
Jan-07-2015 19:35:51 | Gliese 563.1 (Body 31)
Jan-07-2015 19:41:03 | Gliese 563.1 (Body 32)
Jan-07-2015 19:47:05 | G 179-7 (Body 1)
Jan-07-2015 19:48:06 | LTT 14478 (Body 0)
Jan-07-2015 19:56:08 | G 179-7 (Body 1)
Jan-07-2015 19:56:57 | Gliese 563.1 (Body 0)
Jan-07-2015 19:57:47 | LTT 14271 (Body 0)
Jan-07-2015 20:05:53 | LHS 2931 (Body 0)
Jan-08-2015 21:08:18 | LHS 2931 (Body 0)
Jan-08-2015 21:09:06 | G 179-7 (Body 1)
Jan-08-2015 21:09:57 | LTT 14478 (Body 0)
Jan-08-2015 21:18:09 | G 179-7 (Body 1)
Jan-08-2015 21:19:01 | LHS 2931 (Body 0)
Jan-08-2015 21:25:41 | Gliese 563.1 (Body 0)
Jan-08-2015 21:31:32 | G 179-7 (Body 1)
Jan-08-2015 21:32:19 | LTT 14478 (Body 0)
Jan-08-2015 21:40:52 | G 179-7 (Body 1)
Jan-08-2015 21:41:39 | LHS 2931 (Body 0)
Jan-08-2015 21:43:20 | LHS 2931 (Body 0)
Jan-08-2015 21:50:31 | G 179-7 (Body 1)
Jan-08-2015 21:51:20 | LTT 14478 (Body 0)
Jan-08-2015 21:58:41 | G 179-7 (Body 1)
Jan-08-2015 21:59:30 | LHS 2931 (Body 0)
Jan-08-2015 22:03:23 | LHS 2931 (Body 0)
Jan-08-2015 22:29:21 | LHS 2948 (Body 0)
Jan-08-2015 22:30:17 | LHS 2931 (Body 0)
I don't claim that it's particularly useful, just "interesting". I have a second monitor and tail the Visits log and watch the entries as they pop in. I find it an easy way to remember the last few places I've been so I can go back to them if I want (I'm not a fan of little scraps of paper everywhere). I also won't take responsibility if you goof something up, but can try to help sort things out if I can. I found no problems with the game while this is running, and you have the full source code so can see exactly what it's doing. Like it, don't like, use it, or don't. I just thought I'd share it.
Last edited: