How to Play 20,000 Games in Ticket to Ride Without Actually Playing it

In this guide I’ll explain what counts for Conductor achievements and present you with 2 ways of reaching the final Level 5 إنجاز. Unfortunately slow progress and announcement of shutting down the servers pushed me to look for a new approach to unlock these achievements.

What counts for Conductor achievements

With some testing I came to a conclusion that only the following counts for Conductor achievements:

  • Online ranked games,
  • Solo games against bots
  • Tutorial games (sic!)

The progress for offline games (solo and tutorial) is stored locally.

The More Legit way

نعم, قرأته بشكل صحيح, tutorial games count for the achievement and that’s what we’re gonna use.
Finishing one tutorial game takes ~70 seconds which is almost 4x faster than a game against bot (when farming).
70 seconds x 20,0000 games ~= 389 hours ~= 16 أيام

We’ll use AutoHotkey, since going through tutorial 20,000 times manually would be extremely boring.
Below is my script, just make sure to:

  • Run it always on the same PCthe progress is not saved on the cloud/servers,
  • Use AutoHotkey v1.1, the script is not compatible with the newer version. You can download it from هنا.
  • Set your Display resolution to 1920×1080,
  • Run the game in Fullscreen mode,
  • Run the game and the ahk script, then press F2 key to start the script,
  • Stop the script with F3 key before you exit the game.
; This script will keep playing Ticket To Ride

F2::

SetDefaultMouseSpeed,6
WinWaitActive Ticket to Ride
Run()

F3::ExitApp


Run() {
    while true {
        StartNewTutorialGame()
        DrawTicket()
        if (CheckIsStuck()) {
            إعادة تشغيل()
            يكمل
        }
        PlayMiamiAtlanta()
        PlayAtlantaWashington()
        DrawSecondAndFourth()
        PlayWashingtonNewYork()
        DrawNewTicket()
        DrawFourthAndDeck()
        PlayNewYorkMontreal()
        DrawNewTicket()
        DrawFourthAndFifth()
        PlayMontrealChicago()
        DrawSecondAndDeck()
        PlayChicagoDuluth()
        DrawSecondAndDeck()
        PlayDuluthDenver()
        ConfirmLastTurn()
        Draw2Deck()
        ClickForwardAndQuit()
    }
}

StartNewTutorialGame()
{
    ;Click Play
    Click, 713, 299
    ينام, 1000
    ;Click Tutorial
    Click, 1061, 139
    ينام, 1000
    ;Click Go
    Click, 1000, 839
    ينام, 1000
}

DrawTicket()
{
    انقر, 1846, 345
    ينام, 1000
    انقر, 1846, 903
    ينام, 1000
}

PlayMiamiAtlanta()
{
    انقر, 1000, 959
    ينام, 500
    انقر, 1506, 883
    ينام, 1000
}

PlayAtlantaWashington()
{
    انقر, 1000, 959
    ينام, 500
    انقر, 1496, 653
    ينام, 1000
}

DrawSecondAndFourth()
{
    ينام, 2000
    DrawSecond()
    DrawFourth()
}

PlayWashingtonNewYork()
{
    انقر, 1000, 959
    ينام, 500
    انقر, 1566, 405
    ينام, 1000
}

DrawNewTicket()
{
    ينام, 1000
    ;Click Go
    Click, 1000, 939
    ينام, 1000
    ;Click Ticket Pile
    Click, 1846, 100
    ينام, 1000
    DrawTicket()
    ينام, 1000
}

DrawFourthAndDeck()
{
    ينام, 2000
    DrawFourth()
    DrawFromDeck()
}

PlayNewYorkMontreal()
{
    انقر, 850, 959
    ينام, 500
    انقر, 1566, 305
    ينام, 1000
}

DrawFourthAndFifth()
{
    ينام, 2000
    DrawFourth()
    DrawFifth()
}

PlayMontrealChicago()
{
    انقر, 1000, 959
    ينام, 500
    انقر, 1366, 305
    ينام, 1000
}

DrawSecondAndDeck()
{
    ينام, 1000
    DrawSecond()
    DrawFromDeck()
}

PlayChicagoDuluth()
{
    انقر, 1000, 959
    ينام, 500
    انقر, 1166, 365
    ينام, 1000
}

PlayDuluthDenver()
{
    انقر, 1000, 959
    ينام, 500
    انقر, 876, 445
    ينام, 1000
}

Draw2Deck()
{
    ينام, 1000
    DrawFromDeck()
    DrawFromDeck()
}

ConfirmLastTurn()
{
    ينام, 2000
    ;Click Go
    Click, 1000, 839
    ينام, 1000
    إرسال, {يدخل 100}
}

DrawFirst()
{
    
}

DrawSecond()
{
    انقر, 1846, 345
    ينام, 1000
}

DrawThird()
{

}

DrawFourth()
{
    انقر, 1846, 557
    ينام, 1000
}

DrawFifth()
{
    انقر, 1846, 757
    ينام, 1000
}

DrawFromDeck()
{
    انقر, 1846, 803
    ينام, 1000
}

ClickForwardAndQuit()
{
    ينام, 1000
    ; Forward
    Click, 1446, 957
    ينام, 1000
    ; Quit
    Click, 877, 42
    ينام, 1000
}

CheckIsStuck()
{
    PixelGetColor, لون, 1000, 550, RGB
    if (color = 0xF4EFE1)
    {
        ينام, 1000
        return true
    }
    آخر
    {
        return false
    }
}

إعادة تشغيل()
{
    ينام, 1000
    إرسال, {Escape 100}
    ينام, 1000
    إرسال, {Escape 100}
    ينام, 1000
    إرسال, {يدخل 100}
}

Feel free to experiment with DefaultMouseSpeed value and Sleep times, but I found above to be the most reliable. Tutorial sometimes get stuck during drawing the ticket, I’ve added some logic to restart it in case of that happening.

The Less Legit way

لو 390 hours is still too much and you feel like a bit of cheating is ok, then you can get there much much faster. The progress for offline games is stored locally in UserDefault.xml file. You can find it in local app data:

%localappdata%\Days of Wonder\Ticket to Ride\UserDefault.xml

فقط:

  1. Open the file in your favourite text editor (when the game is not running),
  2. تجد <NbSoloGamesPlayed> element <NbSoloGamesPlayed>12345</NbSoloGamesPlayed>
  3. Update the value to 200000 (or whatever you want) and save the file.
  4. قم بتشغيل اللعبة, done. (Actually you might need to play one more game, didn’t test that).
هذا الدليل حول Ticket to Ride كتب بواسطة PapaSmok. يمكنك زيارة المنشور الأصلي من هذا حلقة الوصل. إذا كان لديك أي مخاوف بشأن هذا الدليل, من فضلك لا تتردد في الاتصال بنا هنا.

عن المؤلف