World Activity System

v0.3

Event Scheduler Guide

Master automated event scheduling with intervals, time-of-day, and conditional triggers.

Overview

The Event Scheduler automates temporal activities without requiring manual triggering. It supports three trigger types: interval-based, time-of-day, and conditional events. All are managed through a priority queue system with smart caching for optimal performance.

Performance: The scheduler uses intelligent caching for conditional events, achieving 80-95% cache hit rates. Monitor via Debug Window.

Automated Scheduling

Enable the scheduler on WorldActivityManager to automate event triggering:

Step 1: Enable Scheduler

Select WorldActivityManager → Inspector → EventScheduler section → ✓ Scheduler Enabled

Step 2: Configure Time Settings

Set time-of-day trigger hours (optional, defaults work for most games):

  • Dawn Time: 6.0 (6 AM)
  • Noon Time: 12.0 (12 PM)
  • Dusk Time: 18.0 (6 PM)
  • Midnight Time: 0.0 (12 AM)

Step 3: Create Events

Create TemporalActivity assets with desired trigger types (see sections below).

// Scheduler automatically:
// 1. Evaluates prerequisites every frame/interval
// 2. Queues eligible events by priority
// 3. Triggers highest priority event
// 4. Manages event duration and cooldowns
// 5. Logs history (if enabled)

Interval Events

Interval events trigger at fixed time intervals. Perfect for recurring events like merchant spawns, resource respawns, or periodic world changes.

Setup

Create TemporalActivity asset:
├── Trigger Type: Interval
├── Interval: 300 (seconds = 5 minutes)
├── Start Delay: 60 (optional, wait 1 minute before first)
├── Max Occurrences: 0 (unlimited) or 10 (stop after 10 times)
└── Event Duration: 180 (event lasts 3 minutes)

Examples

Example 1: Merchant Spawn

Spawn a traveling merchant every 10 minutes, stays for 5 minutes.

Trigger Type: Interval
Interval: 600 (10 minutes)
Duration: 300 (5 minutes)
Priority: 0.5

On Activate:
  └─ Spawn Prefab: [Merchant NPC]
  └─ Play Audio: merchant_arrival.wav
  └─ Show Message: "A traveling merchant has arrived!"

On Complete:
  └─ Destroy GameObject: [Merchant NPC]
  └─ Play Audio: merchant_departure.wav

Example 2: Ore Respawn

Respawn mining nodes every 15 minutes.

Trigger Type: Interval
Interval: 900 (15 minutes)
Duration: 1 (instant)
Max Occurrences: 0 (unlimited)

On Activate:
  └─ For Each: All GameObjects tagged "MiningNode"
      └─ Set Active: True
      └─ Reset Component: [MiningNode script]

Time-of-Day Events

Time-of-Day events trigger at specific times: Dawn, Noon, Dusk, or Midnight. Perfect for daily quests, day/night transitions, and scheduled world events.

Setup

Create TemporalActivity asset:
├── Trigger Type: TimeOfDay
├── Time of Day: Dawn / Noon / Dusk / Midnight
├── Days Between: 1 (every day) or 7 (once per week)
├── Max Occurrences: 0 (unlimited) or specific number
└── Event Duration: varies by event type

Examples

Example 1: Daily Quest Reset

Reset all daily quests at midnight.

Trigger Type: TimeOfDay
Time of Day: Midnight
Days Between: 1 (every day)
Duration: 1 (instant)

On Activate:
  └─ Reset Local Variable: [DailyQuestsCompleted]
  └─ For Each Quest in [DailyQuests]:
      └─ Reset Quest Progress
  └─ Show Message: "Daily quests have been reset!"

Example 2: Dawn Blessing

Give players a temporary buff every dawn.

Trigger Type: TimeOfDay
Time of Day: Dawn
Days Between: 1
Duration: 3600 (buff lasts 1 hour)
Priority: 0.7

On Activate:
  └─ Add Status Effect: [Dawn's Blessing]
  └─ Modify Stat: Health Regen +5
  └─ Play VFX: dawn_blessing_particles

On Complete:
  └─ Remove Status Effect: [Dawn's Blessing]

Example 3: Weekly Boss

Spawn a world boss every Sunday at noon.

Trigger Type: TimeOfDay
Time of Day: Noon
Days Between: 7 (weekly)
Duration: 7200 (boss available for 2 hours)
Priority: 0.9

Prerequisites:
  └─ Day of Week = Sunday

On Activate:
  └─ Spawn Prefab: [World Boss]
  └─ Broadcast Message: "The Ancient Dragon has awakened!"
  └─ Set Quest Marker: [Boss Location]

On Complete:
  └─ Destroy GameObject: [World Boss]
  └─ Award Loot: [Boss Chest]

Conditional Events

Conditional events trigger when custom Game Creator 2 conditions are met. Use for achievement unlocks, story progression, or gameplay milestones.

OneShot vs Temporal

Conditional events have two behavior modes:

OneShot

Triggers once when conditions are met, then automatically disables.

Use for: Achievements, story triggers, permanent unlocks

Temporal

Can trigger multiple times whenever conditions are met (respects cooldown).

Use for: Combat events, resource gathering, repeatable mechanics

Example: Achievement Unlock (OneShot)

Trigger Type: Conditional
Conditional Behavior: OneShot
Priority: 0.6

Prerequisites:
  └─ Player Level >= 10
  └─ Enemies Defeated >= 100
  └─ Achievement "Warrior" NOT unlocked

On Activate:
  └─ Unlock Achievement: "Warrior"
  └─ Award Skill Points: 5
  └─ Show Message: "Achievement Unlocked: Warrior!"
  └─ Play Audio: achievement_unlock.wav

// Event automatically disables after first trigger

Example: Low Health Alert (Temporal)

Trigger Type: Conditional
Conditional Behavior: Temporal
Cooldown: 30 (can trigger every 30 seconds)
Duration: 5 (alert lasts 5 seconds)

Prerequisites:
  └─ Player Health <= 20%
  └─ Player NOT in Safe Zone

On Activate:
  └─ Play Audio: low_health_warning.wav
  └─ Show UI: [Low Health Warning]
  └─ Apply Screen Effect: [Red Vignette]

On Complete:
  └─ Hide UI: [Low Health Warning]
  └─ Remove Screen Effect

// Can re-trigger after 30 second cooldown if still low health

Performance & Caching

The scheduler uses smart caching to optimize conditional event checking:

Cache System Benefits

  • 80-95% Hit Rate: Most checks use cached results
  • 10x Faster: Cached checks complete in microseconds
  • Automatic Invalidation: Cache updates when game state changes
  • Smart Batching: Multiple events share prerequisite checks

Monitor cache performance: Open Debug Window → Performance tab → Check cache hit rate. Target: >80% for optimal performance.

Priority System

When multiple events are ready to trigger, the scheduler uses priority (0.0-1.0) to determine execution order. Higher priority events trigger first.

PriorityLevelUse Cases
0.9 - 1.0CriticalStory events, boss fights, emergency situations
0.7 - 0.8HighImportant world events, daily resets, major spawns
0.4 - 0.6NormalRegular merchants, standard events, resource respawns
0.1 - 0.3LowAmbient events, minor spawns, background activities

Conflict Resolution: Use Incompatible Events list to prevent conflicting events (e.g., "Peace Festival" and "Demon Invasion") from running simultaneously.

Best Practices

Use Appropriate Durations

Match event duration to content: merchants (5-10 min), daily quests (24h), ambient events (30-60s). Set Duration = 1 for instant effects.

Set Realistic Cooldowns

Prevent event spam with cooldowns. Minimum: 30s for frequent events, 5+ minutes for rare events.

Optimize Conditional Events

Keep prerequisites simple. Complex conditions reduce cache hit rate. Use built-in GC2 conditions over custom scripts when possible.

Use OneShot for Permanent Changes

Achievements, story progression, and permanent unlocks should use OneShot behavior to prevent redundant triggers.

Monitor Performance

Regularly check Debug Window → Performance tab. Aim for >80% cache hit rate and <1ms average check time.

Test Extensively

Use Debug Window → Tools tab to manually trigger events during development. Verify timing, duration, and prerequisites before release.