Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Help with numbers

Status
Not open for further replies.
Best title I could think of.

Ok i'm making a free trial verson of a game. Evry time you play variable 10 goes up by 1 once it is at 10 your free trial is over.

this is in scene tital. know its wrong, but what are you supposed to put in?
Code:
    @trial_enabled = false
    for i in 0..3
      if $game_variables[10] == 10
        @trial_enabled = true
      end
    end
 

khmp

Sponsor

I'm kind of confused on the reason for looping. Unless you're trying to get tricky and store the number for the trial in separate variable indexes. Instead I'd do:

Code:
@trial_enabled = true
if $game_variables[10] < 10
 $game_variables[10] += 1
 print("You have used {#$game_variables[10]} of 10 possible trials.")
else
 @trial_enabled = false
 print("The trial has expired.")
end
 
ok ill test it out.
Edit: Got the following error:
Script 'Scene_Title' Line 48: No MethodError Occured.
Undefined method `[]' for Nil:Class

Line 48:
Code:
if $game_variables[10] < 10
 
Freakboy just stated that $game_switches has not been initialized yet. $game_switches is initialized in Scene_Title. The best thing to do would be to create a settings file. Basically in main run a scene that checks if Settings.rxdata is there, and if it isn't exit the game. And in the Settings.rxdata it'll have the trial times there and whenever you open the game it'll rewrite that file by adding a number to it, then it'll save it and encrypt it the same way save files are made. I could script this for you if you like, but that's how I'd do it.
 
ye i did do that before hand.
Code:
#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
#  This class performs title screen processing.
#==============================================================================

class Scene_Title_2
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    # If battle test
    if $BTEST
      battle_test
      return
    end
    # Load database
    $data_actors        = load_data("Data/Actors.rxdata")
    $data_classes       = load_data("Data/Classes.rxdata")
    $data_skills        = load_data("Data/Skills.rxdata")
    $data_items         = load_data("Data/Items.rxdata")
    $data_weapons       = load_data("Data/Weapons.rxdata")
    $data_armors        = load_data("Data/Armors.rxdata")
    $data_enemies       = load_data("Data/Enemies.rxdata")
    $data_troops        = load_data("Data/Troops.rxdata")
    $data_states        = load_data("Data/States.rxdata")
    $data_animations    = load_data("Data/Animations.rxdata")
    $data_tilesets      = load_data("Data/Tilesets.rxdata")
    $data_common_events = load_data("Data/CommonEvents.rxdata")
    $data_system        = load_data("Data/System.rxdata")
    $game_variables     = load_data("Data/Variables.rxdata")
    # Make system object
    $game_system = Game_System.new
    # Make title graphic
    @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    # Make command window
    s1 = "Activate"
    s2 = "Free Trial"
    s3 = "Shutdown"
    @command_window = Window_Command.new(192, [s1, s2, s3])
    @command_window.back_opacity = 160
    @command_window.x = 320 - @command_window.width / 2
    @command_window.y = 288
    # Continue enabled determinant
    # Check if at least one save file exists
    # If enabled, make @continue_enabled true; if disabled, make it false
    @trial_enabled = true
    if $game_variables [10] > 10
      $game_variables [10] += 1
    else
      @trial_enabled = false
      print("The trial has expired.")
    end
    # If continue is enabled, move cursor to "Continue"
    # If disabled, display "Continue" text in gray
    if @continue_enabled
      @command_window.index = 1
    else
      @command_window.disable_item(1)
    end
    # Play title BGM
    $game_system.bgm_play($data_system.title_bgm)
    # Stop playing ME and BGS
    Audio.me_stop
    Audio.bgs_stop
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose of command window
    @command_window.dispose
    # Dispose of title graphic
    @sprite.bitmap.dispose
    @sprite.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Update command window
    @command_window.update
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Branch by command window cursor position
      case @command_window.index
      when 0  # New game
        command_new_game
      when 1  # Continue
        command_continue
      when 2  # Shutdown
        command_shutdown
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Command: New Game
  #--------------------------------------------------------------------------
  def command_new_game

    $scene = Scene_Register.new
  end
  #--------------------------------------------------------------------------
  # * Command: Continue
  #--------------------------------------------------------------------------
  def command_continue
    # Play decision SE
    $game_system.se_play($data_system.decision_se)
    # Stop BGM
    Audio.bgm_stop
    # Reset frame count for measuring play time
    Graphics.frame_count = 0
    # Make each type of game object
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Game_Switches.new
    $game_variables     = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party         = Game_Party.new
    $game_troop         = Game_Troop.new
    $game_map           = Game_Map.new
    $game_player        = Game_Player.new
    # Set up initial party
    $game_party.setup_starting_members
    # Set up initial map position
    $game_map.setup($data_system.start_map_id)
    # Move player to initial position
    $game_player.moveto($data_system.start_x, $data_system.start_y)
    # Refresh player
    $game_player.refresh
    # Run automatic change for BGM and BGS set with map
    $game_map.autoplay
    # Update map (run parallel process event)
    $game_map.update
    # Switch to map screen
    $scene = Scene_Map.new
  end
  #--------------------------------------------------------------------------
  # * Command: Shutdown
  #--------------------------------------------------------------------------
  def command_shutdown
    # Play decision SE
    $game_system.se_play($data_system.decision_se)
    # Fade out BGM, BGS, and ME
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    # Shutdown
    $scene = nil
  end
  #--------------------------------------------------------------------------
  # * Battle Test
  #--------------------------------------------------------------------------
  def battle_test
    # Load database (for battle test)
    $data_actors        = load_data("Data/BT_Actors.rxdata")
    $data_classes       = load_data("Data/BT_Classes.rxdata")
    $data_skills        = load_data("Data/BT_Skills.rxdata")
    $data_items         = load_data("Data/BT_Items.rxdata")
    $data_weapons       = load_data("Data/BT_Weapons.rxdata")
    $data_armors        = load_data("Data/BT_Armors.rxdata")
    $data_enemies       = load_data("Data/BT_Enemies.rxdata")
    $data_troops        = load_data("Data/BT_Troops.rxdata")
    $data_states        = load_data("Data/BT_States.rxdata")
    $data_animations    = load_data("Data/BT_Animations.rxdata")
    $data_tilesets      = load_data("Data/BT_Tilesets.rxdata")
    $data_common_events = load_data("Data/BT_CommonEvents.rxdata")
    $data_system        = load_data("Data/BT_System.rxdata")
    # Reset frame count for measuring play time
    Graphics.frame_count = 0
    # Make each game object
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Game_Switches.new
    $game_variables     = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party         = Game_Party.new
    $game_troop         = Game_Troop.new
    $game_map           = Game_Map.new
    $game_player        = Game_Player.new
    # Set up party for battle test
    $game_party.setup_battle_test_members
    # Set troop ID, can escape flag, and battleback
    $game_temp.battle_troop_id = $data_system.test_troop_id
    $game_temp.battle_can_escape = true
    $game_map.battleback_name = $data_system.battleback_name
    # Play battle start SE
    $game_system.se_play($data_system.battle_start_se)
    # Play battle BGM
    $game_system.bgm_play($game_system.battle_bgm)
    # Switch to battle screen
    $scene = Scene_Battle.new
  end
end
 

khmp

Sponsor

Yes this is because game_variables is not initialized until Scene_Load or in a new game is created in Scene_Title. So what you are trying to do is access an array index that does not yet exist.
 
That's not what I meant, I meant that it's checking a file that has the variable in it, so it can reload it every time you load the game, except when in Debug/testplay.

Edit: Well I decided to make a script for this for you.

Just place this in a new script above main.
Code:
module Trial
  File_Name = "Settings.rxdata"
  Max_Free_Trial = 30
  module_function
  def check_trial
    if $DEBUG and !FileTest.exist?(File_Name)
      $trial = 1
      file = File.open(File_Name, "wb")
      Marshal.dump($trial, file)
      file.close
    elsif $DEBUG and FileTest.exist?(File_Name)
      return
    elsif !$DEBUG and !FileTest.exist?(File_Name)
      exit
    else
      file = File.open(File_Name, "rb")
      $trial = Marshal.load(file)
      file.close
      if $trial >= Max_Free_Trial
        print "Free trial is over."
        exit
      end
      $trial += 1
      file = File.open(File_Name, "wb")
      Marshal.dump($trial, file)
      file.close
      print "Free trial uses #{$trial} out of #{Max_Free_Trial}"
    end
  end
end

and then edit main adding this line right below begin or below Graphics.freeze, it doesn't really matter, just as long as it's before $scene = Scene_Title.new
Code:
Trial.check_trial
 

khmp

Sponsor

All right cut the code I gave ya. My sincere apology for not aliasing right off the bat. In your script editor create a file above main and name it whatever you like. To stick with its purpose I named it Trial_Handling. Now paste the code below in it. I would disable the code while creating the game it could be quite annoying every time you started a new game or loaded a game.

Code:
class Scene_Title
  alias old_command_new_game command_new_game
  
  def command_new_game
    # Call the original command_new_game
    old_command_new_game
    
    # Lets do our trial test!
    @trial_enabled = true
    if $game_variables[10] < 10
      $game_variables[10] = 1
      print("You have used #{$game_variables[10]} of 10 possible trials.")
    else
      @trial_enabled = false
      print("The trial has expired.")
    end
    
    # Handle how to deal with the trial expiration.
    =begin
    if !@trial_enabled
      Quit/Dib out purchase information/ Etc.
    end
    =end
  end
end

class Scene_Load < Scene_File
  alias old_on_decision on_decision

  def on_decision(filename)
    old_on_decision(filename)
    
    # Lets do our trial test!
    @trial_enabled = true
    if $game_variables[10] < 10
      $game_variables[10] = 1
      print("You have used #{$game_variables[10]} of 10 possible trials.")
    else
      @trial_enabled = false
      print("The trial has expired.")
    end
    
    # Handle how to deal with the trial expiration.
    =begin
    if !@trial_enabled
      Quit/Dib out purchase information/ Etc.
    end
    =end
  end
end
 
The script I posted is exactly the way you described how you wanted it, which I'm guessing is the same way RMXP's free trial thing is, where you have 30 days to use, or 30 uses in this case. All you'd have to do is change the 30 at the top of my script to whatever number you want, and voila it allows only x number of runnings.
 
Status
Not open for further replies.

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top