A GitHub Action created by Ondreian to automate daily logins and monthly SimuCoin redemptions for Simutronics games.
Questions? Open an issue or reach out on game-related Discord channels.
Go to github.com/new and create a new private repository.
Why private? GitHub automatically disables scheduled workflows in public repos with no activity for 60 days. A private repo avoids this.
Give it any name you like (e.g. my-simu-rewards), set the visibility to Private, and click Create repository.
Your Simutronics credentials are stored as encrypted GitHub Secrets — they are never exposed in logs or code.
Navigate to Settings → Secrets and variables → Actions, then click New repository secret to add each of the following:
| Secret Name | Value |
|---|---|
ACCOUNT1 |
Your Simutronics account name |
PASSWORD1 |
Your Simutronics password |
GAMECODE1 |
A game code from the table below (optional — defaults to GS3) |
Repeat for each additional account, incrementing the number (ACCOUNT2 / PASSWORD2 / GAMECODE2, etc.).
| Code | Game |
|---|---|
GS3 |
GemStone IV Prime |
GST |
GemStone IV Test |
GSX |
GemStone IV Platinum |
GSF |
GemStone IV Shattered |
DR |
DragonRealms Prime |
DRT |
DragonRealms Test |
DRX |
DragonRealms Platinum |
DRF |
DragonRealms Fallen |
From the Code tab of your repository, click Add file → Create new file.
Name the file .github/workflows/rewards.yml — as you type the slashes, GitHub will automatically create the nested directory structure for you.
Paste the following into the file editor, then adjust for your accounts (see the comments in the YAML):
# .github/workflows/rewards.yml
name: rewards
on:
workflow_dispatch: # allows manual runs from the Actions tab
schedule:
# Cron generator: https://crontab.guru/#5_1_*_*_*
# 01:05 AM UTC = 8:05 PM EST (summer) / 9:05 PM EST (winter)
# Please stagger your time to spread server load.
- cron: "5 1 * * *"
jobs:
login-account:
runs-on: ubuntu-latest
strategy:
matrix:
include:
# ── Account 1: uses a GAMECODE1 secret ──
- account: ACCOUNT1
password: PASSWORD1
game: GAMECODE1
# ── Account 2: no game code → defaults to GS3 ──
- account: ACCOUNT2
password: PASSWORD2
# ── Account 3: hardcoded game code (no secret needed) ──
- account: ACCOUNT3
password: PASSWORD3
game: 'GSF'
# ── Account 4: skip character logins, only redeem SimuCoins ──
- account: ACCOUNT4
password: PASSWORD4
bypass_login: true
fail-fast: false
name: login ${{ matrix.account }}
steps:
- uses: elanthia-online/simu-rewards@v1
with:
account: ${{ secrets[matrix.account] }}
password: ${{ secrets[matrix.password] }}
game: ${{ secrets[matrix.game] || matrix.game || 'GS3' }}
bypass_login: ${{ secrets[matrix.bypass_login] || matrix.bypass_login || 'false' }}Remove or duplicate the - account: … blocks in matrix.include to match however many accounts you added secrets for in Step 2.
You should also update the cron line to a time that works for you — the default ("5 1 * * *" / 1:05 AM UTC) is just an example, and staggering run times helps avoid unnecessary load on Simutronics' servers. See the schedule (cron) section below for a full breakdown of the syntax and common examples.
When you're done editing, click the green Commit changes button in the top right, confirm in the dialog, and the file will be saved to your repository.
The workflow will run automatically at the scheduled cron time. To trigger it immediately, go to the Actions tab at the top of your repository, click rewards in the left sidebar, then click the Run workflow dropdown on the right and confirm.
The game code can be provided three ways (checked in this order):
- As a secret — set a
GAMECODE1repository secret (most secure, recommended for shared repos) - Hardcoded in the matrix — e.g.
game: 'GSF'(simple, visible in the workflow file) - Omitted — defaults to
GS3
Set bypass_login: true on an account to skip character logins and only process SimuCoin redemptions. This is useful for instance-limited games like Shattered (GSF) or Fallen (DRF).
The cron line in the workflow controls when your rewards are collected. You should change it from the default to a time that works for you and to help spread the load across Simutronics' servers — if everyone runs at the same minute, it creates unnecessary strain.
A cron expression has five fields:
┌───────────── minute (0–59)
│ ┌───────────── hour (0–23)
│ │ ┌───────────── day of month (1–31)
│ │ │ ┌───────────── month (1–12)
│ │ │ │ ┌───────────── day of week (0–6, Sunday = 0)
│ │ │ │ │
* * * * *
The default in the example is "5 1 * * *", which means 1:05 AM UTC every day. All GitHub Actions cron times are in UTC — use a converter like dateful.com/time-zone-converter if you need to work out your local equivalent.
| Cron expression | Runs at (UTC) |
|---|---|
"5 1 * * *" |
1:05 AM — the example default |
"30 3 * * *" |
3:30 AM |
"0 12 * * *" |
12:00 PM (noon) |
"45 22 * * *" |
10:45 PM |
Pick a random-ish minute (not :00 or :30) so runs are naturally staggered. The hour matters less — just avoid picking the exact same time as the example default.
Use crontab.guru to build and verify your expression before committing.
Note: GitHub does not guarantee cron jobs run at the exact scheduled time. During periods of high demand, runs may be delayed by several minutes or occasionally longer. This is normal and will not cause missed rewards.
Workflow isn't running on schedule — GitHub may disable scheduled workflows after 60 days of no repository activity. Push a commit or run the workflow manually to re-enable it. Using a private repo reduces (but doesn't eliminate) this risk.
Login failures — Double-check that your secret names in the workflow YAML exactly match the secret names you created in Settings. Names are case-sensitive.