.class public Lcom/firemint/realracing/OfflineEventsManager; .super Ljava/lang/Object; .source "OfflineEventsManager.java" # static fields .field private static final TAG:Ljava/lang/String; = "RR3_OfflineEvents" .field private static eventsEnabled:Z = true # direct methods .method static constructor ()V .locals 1 # Enable all events by default const/4 v0, 0x1 sput-boolean v0, Lcom/firemint/realracing/OfflineEventsManager;->eventsEnabled:Z return-void .end method .method public constructor ()V .locals 0 invoke-direct {p0}, Ljava/lang/Object;->()V return-void .end method .method public static init(Landroid/content/Context;)V .locals 2 const-string v0, "RR3_OfflineEvents" const-string v1, "Initializing Offline Events Manager" invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I # Initialize event data in save file invoke-static {p0}, Lcom/firemint/realracing/OfflineEventsManager;->initializeEventData(Landroid/content/Context;)V const-string p0, "All special events enabled for offline play" invoke-static {v0, p0}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I return-void .end method .method private static initializeEventData(Landroid/content/Context;)V .locals 5 const-string v0, "RR3_OfflineEvents" :try_start_0 # Get or create events object in save file invoke-static {}, Lcom/firemint/realracing/LocalSaveManager;->getSaveData()Lorg/json/JSONObject; move-result-object v1 if-nez v1, :cond_0 const-string p0, "Save data not initialized" invoke-static {v0, p0}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I return-void :cond_0 # Check if events object exists const-string v2, "events" invoke-virtual {v1, v2}, Lorg/json/JSONObject;->has(Ljava/lang/String;)Z move-result v3 if-nez v3, :cond_1 # Create events object new-instance v3, Lorg/json/JSONObject; invoke-direct {v3}, Lorg/json/JSONObject;->()V # Add event types const-string v4, "timeTrial" invoke-static {}, Lcom/firemint/realracing/OfflineEventsManager;->createDefaultTimeTrialData()Lorg/json/JSONObject; move-result-object v4 const-string v2, "timeTrial" invoke-virtual {v3, v2, v4}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; const-string v4, "dailyBattle" invoke-static {}, Lcom/firemint/realracing/OfflineEventsManager;->createDefaultDailyBattleData()Lorg/json/JSONObject; move-result-object v4 const-string v2, "dailyBattle" invoke-virtual {v3, v2, v4}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; const-string v4, "championship" invoke-static {}, Lcom/firemint/realracing/OfflineEventsManager;->createDefaultChampionshipData()Lorg/json/JSONObject; move-result-object v4 const-string v2, "championship" invoke-virtual {v3, v2, v4}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; const-string v4, "specialEvent" invoke-static {}, Lcom/firemint/realracing/OfflineEventsManager;->createDefaultSpecialEventData()Lorg/json/JSONObject; move-result-object v4 const-string v2, "specialEvent" invoke-virtual {v3, v2, v4}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; # Save to save data const-string v2, "events" invoke-virtual {v1, v2, v3}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; # Save to disk invoke-static {p0}, Lcom/firemint/realracing/LocalSaveManager;->saveSave(Landroid/content/Context;)V const-string p0, "Event data initialized" invoke-static {v0, p0}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I :cond_1 :try_end_0 .catch Lorg/json/JSONException; {:try_start_0 .. :try_end_0} :catch_0 goto :goto_0 :catch_0 move-exception p0 const-string v1, "Error initializing event data" invoke-static {v0, v1, p0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I :goto_0 return-void .end method .method private static createDefaultTimeTrialData()Lorg/json/JSONObject; .locals 4 :try_start_0 new-instance v0, Lorg/json/JSONObject; invoke-direct {v0}, Lorg/json/JSONObject;->()V const-string v1, "available" const/4 v2, 0x1 invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Z)Lorg/json/JSONObject; const-string v1, "name" const-string v2, "Offline Time Trial" invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; const-string v1, "track" const-string v2, "brands_hatch" invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; const-string v1, "carClass" const-string v2, "all" invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; const-string v1, "reward" const/16 v2, 0x1388 invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;I)Lorg/json/JSONObject; const-string v1, "goldReward" const/16 v2, 0x32 invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;I)Lorg/json/JSONObject; :try_end_0 .catch Lorg/json/JSONException; {:try_start_0 .. :try_end_0} :catch_0 return-object v0 :catch_0 move-exception v0 const-string v1, "RR3_OfflineEvents" const-string v2, "Error creating time trial data" invoke-static {v1, v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I new-instance v0, Lorg/json/JSONObject; invoke-direct {v0}, Lorg/json/JSONObject;->()V return-object v0 .end method .method private static createDefaultDailyBattleData()Lorg/json/JSONObject; .locals 4 :try_start_0 new-instance v0, Lorg/json/JSONObject; invoke-direct {v0}, Lorg/json/JSONObject;->()V const-string v1, "available" const/4 v2, 0x1 invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Z)Lorg/json/JSONObject; const-string v1, "name" const-string v2, "Offline Daily Battle" invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; const-string v1, "opponents" const/4 v2, 0x3 invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;I)Lorg/json/JSONObject; const-string v1, "reward" const/16 v2, 0x7d0 invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;I)Lorg/json/JSONObject; const-string v1, "goldReward" const/16 v2, 0x14 invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;I)Lorg/json/JSONObject; :try_end_0 .catch Lorg/json/JSONException; {:try_start_0 .. :try_end_0} :catch_0 return-object v0 :catch_0 move-exception v0 const-string v1, "RR3_OfflineEvents" const-string v2, "Error creating daily battle data" invoke-static {v1, v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I new-instance v0, Lorg/json/JSONObject; invoke-direct {v0}, Lorg/json/JSONObject;->()V return-object v0 .end method .method private static createDefaultChampionshipData()Lorg/json/JSONObject; .locals 4 :try_start_0 new-instance v0, Lorg/json/JSONObject; invoke-direct {v0}, Lorg/json/JSONObject;->()V const-string v1, "available" const/4 v2, 0x1 invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Z)Lorg/json/JSONObject; const-string v1, "name" const-string v2, "Offline Championship" invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; const-string v1, "season" const-string v2, "all_seasons" invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; const-string v1, "reward" const/16 v2, 0x2710 invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;I)Lorg/json/JSONObject; const-string v1, "goldReward" const/16 v2, 0x64 invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;I)Lorg/json/JSONObject; :try_end_0 .catch Lorg/json/JSONException; {:try_start_0 .. :try_end_0} :catch_0 return-object v0 :catch_0 move-exception v0 const-string v1, "RR3_OfflineEvents" const-string v2, "Error creating championship data" invoke-static {v1, v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I new-instance v0, Lorg/json/JSONObject; invoke-direct {v0}, Lorg/json/JSONObject;->()V return-object v0 .end method .method private static createDefaultSpecialEventData()Lorg/json/JSONObject; .locals 4 :try_start_0 new-instance v0, Lorg/json/JSONObject; invoke-direct {v0}, Lorg/json/JSONObject;->()V const-string v1, "available" const/4 v2, 0x1 invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Z)Lorg/json/JSONObject; const-string v1, "name" const-string v2, "Offline Special Event" invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; const-string v1, "type" const-string v2, "unlimited" invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; const-string v1, "reward" const/16 v2, 0x4e20 invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;I)Lorg/json/JSONObject; const-string v1, "goldReward" const/16 v2, 0xc8 invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;I)Lorg/json/JSONObject; :try_end_0 .catch Lorg/json/JSONException; {:try_start_0 .. :try_end_0} :catch_0 return-object v0 :catch_0 move-exception v0 const-string v1, "RR3_OfflineEvents" const-string v2, "Error creating special event data" invoke-static {v1, v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I new-instance v0, Lorg/json/JSONObject; invoke-direct {v0}, Lorg/json/JSONObject;->()V return-object v0 .end method .method public static isEventAvailable(Ljava/lang/String;)Z .locals 2 # In offline mode, all events are always available invoke-static {}, Lcom/firemint/realracing/OfflineModeManager;->isOfflineMode()Z move-result v0 if-eqz v0, :cond_0 const-string v0, "RR3_OfflineEvents" new-instance v1, Ljava/lang/StringBuilder; invoke-direct {v1}, Ljava/lang/StringBuilder;->()V const-string v0, "Event available (offline): " invoke-virtual {v1, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p0 const-string v0, "RR3_OfflineEvents" invoke-static {v0, p0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I const/4 p0, 0x1 return p0 :cond_0 # Online mode - let game decide const/4 p0, 0x0 return p0 .end method .method public static completeEvent(Landroid/content/Context;Ljava/lang/String;I)V .locals 4 const-string v0, "RR3_OfflineEvents" :try_start_0 # Log event completion new-instance v1, Ljava/lang/StringBuilder; invoke-direct {v1}, Ljava/lang/StringBuilder;->()V const-string v2, "Event completed: " invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; const-string v2, " | Position: " invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I # Award rewards based on position invoke-static {p0, p1, p2}, Lcom/firemint/realracing/OfflineEventsManager;->awardEventRewards(Landroid/content/Context;Ljava/lang/String;I)V :try_end_0 .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 goto :goto_0 :catch_0 move-exception p0 const-string p1, "Error completing event" invoke-static {v0, p1, p0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I :goto_0 return-void .end method .method private static awardEventRewards(Landroid/content/Context;Ljava/lang/String;I)V .locals 5 const-string v0, "RR3_OfflineEvents" # Base rewards (1st place) const/16 v1, 0x1388 # 5000 M$ const/16 v2, 0x32 # 50 Gold # Adjust based on position const/4 v3, 0x1 if-ne p2, v3, :cond_1st # 1st place - 100% goto :cond_award :cond_1st const/4 v3, 0x2 if-ne p2, v3, :cond_2nd # 2nd place - 75% mul-int/lit8 v1, v1, 0x3 div-int/lit8 v1, v1, 0x4 mul-int/lit8 v2, v2, 0x3 div-int/lit8 v2, v2, 0x4 goto :cond_award :cond_2nd const/4 v3, 0x3 if-ne p2, v3, :cond_3rd # 3rd place - 50% div-int/lit8 v1, v1, 0x2 div-int/lit8 v2, v2, 0x2 goto :cond_award :cond_3rd # 4th+ place - 25% div-int/lit8 v1, v1, 0x4 div-int/lit8 v2, v2, 0x4 :cond_award # Award the rewards invoke-static {p0, v1}, Lcom/firemint/realracing/OfflineCurrencyManager;->addCash(Landroid/content/Context;I)V invoke-static {p0, v2}, Lcom/firemint/realracing/OfflineCurrencyManager;->addGold(Landroid/content/Context;I)V # Log rewards new-instance p0, Ljava/lang/StringBuilder; invoke-direct {p0}, Ljava/lang/StringBuilder;->()V const-string p1, "Awarded: " invoke-virtual {p0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {p0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; const-string p1, " M$, " invoke-virtual {p0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {p0, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; const-string p1, " Gold" invoke-virtual {p0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {p0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p0 invoke-static {v0, p0}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I return-void .end method .method public static bypassEventValidation()Z .locals 2 # Always bypass validation in offline mode invoke-static {}, Lcom/firemint/realracing/OfflineModeManager;->isOfflineMode()Z move-result v0 if-eqz v0, :cond_0 const-string v0, "RR3_OfflineEvents" const-string v1, "Bypassing event validation (offline mode)" invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I const/4 v0, 0x1 return v0 :cond_0 const/4 v0, 0x0 return v0 .end method