Submit Your Article


 
RPG Maker

Welcome Guest ( Log In | Register )


  Games Resources RPG Maker VX RPG Maker XP Scripts Tutorials Downloads

> Submission: Fishing Script v1.0, by Prexus
Prexus
post Oct 15 2005, 03:27 AM
Post #1


Level 3
Group Icon

Group: Member
Posts: 31
Type: Event Designer
RM Skill: Masterful




Just put in a new script above Main... following the instructions is a good idea. Animation is at the bottom of post.

CODE
#-------------------------------#
#        Fishing System         #
#-------------------------------#
# Written By: Prexus            #
# www.prexus.nearfantastica.org #
#-------------------------------#
# Information:
# If you have bait and a fishing rod, you can fish in water. Water is designated
# by a Terrain Tag which is not equal (!=) to 0. The skill level of the water
# is equal to the Terrain Tag's value.
#
# If the Lure is equipped (shield), it adds its evasion to the roll for success.
# The roll for success is as follows:
# Success = Random Number between 0 and Fishing Skill + Lure Bonus
#
# The Fishing level system is inherited from the Actor's base EXP table.
# Every time you successfully fish, you gain 1 EXP towards your fishing level.
# This only occurs if the water level is equal to your level, since you cannot
# fish in waters of higher level than you and waters lower level are too easy.
# Leveling in the fishing opens up more waters to you.
#
# Obviously the benefits of fishing are up to the creator of the game but by
# request I added a "Best Fish" field.
# I figure that a fish sells for about 1 Gold per Pound. Thus, any fish
# in the database weighs half its price. This is what is set to Best Fish and
# is compared when catching new fish.
#
# Instructions:
# Search the text "Animations" and do what is requested there.
#
# The first part you see (RFIT1 = [1,2,3] etc.) is defining the Random Fish/Item Tables.
# This is where you customize what items can be yeilded depending on the level of
# the waters you are trying to fish from (Defined by Terrain Tag in Tileset part
# of database editor.)
#
# The difference between RIT and RFT is that RIT only produces every so often.
#
# This is where you'd put weird things like old boots and stuff or rare items.
#
# Below that is the Bait ID which is set to the ID of the item in the database
# that you are using as Bait. There is only one kind of bait (or only needs to be)
# because Lures change the result of success rate not bait.
#
# Below that is the Element IDs of both the pole and the lures.
# Go to the Database and on the System tab add two new elements, one called Pole
# and one called Lure.
# Lures are shields so make a shield in the database for each type of Lure you
# want. The modifier is held in the shield's evasion.
# If you want the lure to increase the chance by 1, then evasion = 1
#
# The chance to succeed is as follows: Success = Random Number between 0 and Fishing Skill + Lure Bonus
# If Success is greater than or equal to the terrain tag of the water, success.
# Anyhow. FishingLevelNames is an array with the levels of fisherman.
# There are of course 8 levels.
#
# All you need to do now is press D in game and you'll see what you need ^^

#Naming Format: Random Fish Table = RFT, Random Item Table = RIT, followed by level number
# [ ] brackets encorperate the IDs of items you can get for each level and type.
# Random Fish table are just the random tables, Random Item Table results in a
# very rare result (generated by if two random numbers between 0 and 19 are equal)
RFT1 = [1, 2, 3]
RIT1 = [4]
RFT2 = [5, 6, 7]
RIT2 = [8]
RFT3 = [9, 10, 11]
RIT3 = [12]
RFT4 = [13, 14, 15]
RIT4 = [16]
RFT5 = [17, 18, 19]
RIT5 = [20]
RFT6 = [21, 22, 23]
RIT6 = [24]
RFT7 = [25, 26, 27]
RIT7 = [28]
RFT8 = [29, 30, 31]
RIT8 = [32]
# ID of the Bait item, there is only one kind of bait.
BaitID = 33
# Element ID of Fishing Pole. Create a new element id in Database > System and
# give that ID to a weapon under Element Set. That Item now acts as a fishing pole.
PoleElemID = 17
# Element ID of Lures. Same as above.
LureElemID = 18

# Names of advancements in fishing level (they go in order from 1-8)
FishingLevelNames = [
"Junior Fisherman",
"Apprentice Fisherman",
"Average Fisherman",
"Sport Fisherman",
"Famous Fisherman",
"Professional Fisherman",
"Master Fisherman",
"He-Who-Speak-To-Water"]

class Scene_Map
  def main
    @spriteset = Spriteset_Map.new
    @message_window = Window_Message.new
    # Added
    @fishing_window = Window_Fishing.new
    # End Added
    @window_wait_count = 0
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @spriteset.dispose
    @message_window.dispose
    # Added
    @fishing_window.dispose
    # End Added
    if $scene.is_a?(Scene_Title)
      Graphics.transition
      Graphics.freeze
    end
  end
  def update
    loop do
      $game_map.update
      $game_system.map_interpreter.update
      $game_player.update
      $game_system.update
      $game_screen.update
      unless $game_temp.player_transferring
        break
      end
      transfer_player
      if $game_temp.transition_processing
        break
      end
    end
    @spriteset.update
    @message_window.update
    # Added
    @fishing_window.update
    if @window_wait_count > 0
      @window_wait_count -= 1
      if @window_wait_count == 0
        @fishing_window.visible = false
      end
    end
    # End Added
    if $game_temp.gameover
      $scene = Scene_Gameover.new
      return
    end
    if $game_temp.to_title
      $scene = Scene_Title.new
      return
    end
    if $game_temp.transition_processing
      $game_temp.transition_processing = false
      if $game_temp.transition_name == ""
        Graphics.transition(20)
      else
        Graphics.transition(40, "Graphics/Transitions/" +
          $game_temp.transition_name)
      end
    end
    if $game_temp.message_window_showing
      return
    end
    if $game_player.encounter_count == 0 and $game_map.encounter_list != []
      unless $game_system.map_interpreter.running? or
             $game_system.encounter_disabled
        n = rand($game_map.encounter_list.size)
        troop_id = $game_map.encounter_list[n]
        if $data_troops[troop_id] != nil
          $game_temp.battle_calling = true
          $game_temp.battle_troop_id = troop_id
          $game_temp.battle_can_escape = true
          $game_temp.battle_can_lose = false
          $game_temp.battle_proc = nil
        end
      end
    end
    if Input.trigger?(Input::B)
      unless $game_system.map_interpreter.running? or
             $game_system.menu_disabled
        $game_temp.menu_calling = true
        $game_temp.menu_beep = true
      end
    end
    # Added
    if @window_wait_count == 0
      if Input.trigger?(Input::Z)
        call_fishing
      end
    end
    # End Added
    if $DEBUG and Input.press?(Input::F9)
      $game_temp.debug_calling = true
    end
    unless $game_player.moving?
      if $game_temp.battle_calling
        call_battle
      elsif $game_temp.shop_calling
        call_shop
      elsif $game_temp.name_calling
        call_name
      elsif $game_temp.menu_calling
        call_menu
      elsif $game_temp.save_calling
        call_save
      elsif $game_temp.debug_calling
        call_debug
      end
    end
  end
  # Added
  def call_fishing
    # Checks to see if anyone has a Fishing Rod. The first person found with one
    # is used for the system.
    for i in 0..$game_party.actors.size
      if $data_weapons[$game_party.actors[i].weapon_id] != nil
        if $data_weapons[$game_party.actors[i].weapon_id].element_set.include?(PoleElemID)
          actor = $game_party.actors[i]
          break
        end
      end
      if i == 3
        # Displays a message if nobody has pole.
        @fishing_window.catch_name("Nobody has Pole")
        @fishing_window.visible = true
        @window_wait_count = 50
        return
      end
    end
    # Takes direction of player and sets looking area to one block infront
    # animid is the ID of the animation you want to play.
    # "Animations"
    # When you press D, the game sets up an animation based on what direction
    # you are facing. With the script i've included a little water splash
    # animation however its up to you to decide how it looks.
    # The lines "animid = 102" is setting the animation to an animation ID.
    # Just change 102 or whatever is there to the ID of the animation
    # you wish to use. Remember, Animations target the player not the spot
    # infront of him.
    character = $game_player
    case character.direction
    when 2
      lookingx = character.x
      lookingy = character.y + 1
      animid = 102
    when 4
      lookingx = character.x - 1
      lookingy = character.y
      animid = 103
    when 6
      lookingx = character.x + 1
      lookingy = character.y
      animid = 104
    when 8
      lookingx = character.x
      lookingy = character.y - 1
      animid = 101
    end
    # If the terrain tag of the spot isn't 0, it goes ahead with the process
    if $game_map.terrain_tag(lookingx,lookingy) != 0
      # Plays animation on the character
      character.animation_id = animid
      # Plays a soundeffect of water.
      Audio.se_play("Audio/SE/021-Dive01")
    else
      # If it is = to 0 then show message.
      @fishing_window.catch_name("Need Water")
      @fishing_window.visible = true
      @window_wait_count = 20
      return
    end
    # Checks to see if you have more than 0 bait.
    if $game_party.item_number(BaitID) > 0
      # Chance to catch is set to a random number 0 to fishing skill
      catch_chance = rand(actor.fishing_skill + 1)
      # If you have a lure equipped (shield)...
      if $data_armors[actor.armor1_id] != nil
        if $data_armors[actor.armor1_id].guard_element_set.include?(LureElemID)
          # Increase chance by the value of the shield's evasion
          catch_chance += $data_armors[actor.armor1_id].eva
        end
      end
      # If you are the approriate level..
      if actor.fishing_skill >= $game_map.terrain_tag(lookingx, lookingy)
        # If the chance results in true..
        if catch_chance >= $game_map.terrain_tag(lookingx,lookingy)
          # Lose 1 bait
          $game_party.lose_item(BaitID, 1)
          # Check to see what Terrain Tag is equal to.
          # The number of the tag is level you require to use.
          case $game_map.terrain_tag(lookingx, lookingy)
          when 1
            # Setting for random chance to get RARE item
            num1 = rand(20)
            num2 = rand(20)
            if num1 != num2
              # If fail, give an item from Fish Table
              item = $data_items[RFT1[rand(RFT1.size)]]
            else
              # If succeed, give an item from Item Table
              item = $data_items[RIT1[rand(RIT1.size)]]
            end
          when 2
            num1 = rand(20)
            num2 = rand(20)
            if num1 != num2
              item = $data_items[RFT2[rand(RFT2.size)]]
            else
              item = $data_items[RIT2[rand(RIT2.size)]]
            end
          when 3
            num1 = rand(20)
            num2 = rand(20)
            if num1 != num2
              item = $data_items[RFT3[rand(RFT3.size)]]
            else
              item = $data_items[RIT3[rand(RIT3.size)]]
            end
          when 4
            num1 = rand(20)
            num2 = rand(20)
            if num1 != num2
              item = $data_items[RFT4[rand(RFT4.size)]]
            else
              item = $data_items[RIT4[rand(RIT4.size)]]
            end
          when 5
            num1 = rand(20)
            num2 = rand(20)
            if num1 != num2
              item = $data_items[RFT5[rand(RFT5.size)]]
            else
              item = $data_items[RIT5[rand(RIT5.size)]]
            end
          when 6
            num1 = rand(20)
            num2 = rand(20)
            if num1 != num2
              item = $data_items[RFT6[rand(RFT6.size)]]
            else
              item = $data_items[RIT6[rand(RIT6.size)]]
            end
          when 7
            num1 = rand(20)
            num2 = rand(20)
            if num1 != num2
              item = $data_items[RFT7[rand(RFT7.size)]]
            else
              item = $data_items[RIT7[rand(RIT7.size)]]
            end
          when 8
            num1 = rand(20)
            num2 = rand(20)
            if num1 != num2
              item = $data_items[RFT8[rand(RFT8.size)]]
            else
              item = $data_items[RIT8[rand(RIT8.size)]]
            end
          end
          # Adds item to inventory
          $game_party.gain_item(item.id, 1)
          if item.price > $game_party.best_fish
            $game_party.best_fish = item.price
            @fishing_window.catch_name(item.name, true)
          else
            @fishing_window.catch_name(item.name)
          end
          # Displays the name of the item you get
          @fishing_window.visible = true
          @window_wait_count = 50
          # If your skill is equal to or less than the terrain tag you get 1 exp
          if $game_map.terrain_tag(lookingx,lookingy) >= actor.fishing_skill
            actor.fishing_exp += 1
          end
          return
        else
          # Random chance of losing bait.
          num1 = rand(50)
          if num1 > 39
            $game_party.lose_item(BaitID, 1)
            @fishing_window.catch_name("Lost Bait")
            @fishing_window.visible = true
            @window_wait_count = 20
          end
          return
        end
      else
        # If level is too low show message
        @fishing_window.catch_name("Level too low.")
        @fishing_window.visible = true
        @window_wait_count = 20
        return
      end
    end
  else
    # If no bait show message
    @fishing_window.catch_name("No Bait")
    @fishing_window.visible = true
    @window_wait_count = 20
    return
  end
  # End Added
end

class Game_Actor < Game_Battler
  # Added
  attr_accessor :fishing_skill
  attr_accessor :fishing_exp
  # End Added
  def setup(actor_id)
    actor = $data_actors[actor_id]
    @actor_id = actor_id
    @name = actor.name
    @character_name = actor.character_name
    @character_hue = actor.character_hue
    @battler_name = actor.battler_name
    @battler_hue = actor.battler_hue
    @class_id = actor.class_id
    @weapon_id = actor.weapon_id
    @armor1_id = actor.armor1_id
    @armor2_id = actor.armor2_id
    @armor3_id = actor.armor3_id
    @armor4_id = actor.armor4_id
    @level = actor.initial_level
    # Added
    @fishing_skill = 1
    # End Added
    @exp_list = Array.new(101)
    make_exp_list
    @exp = @exp_list[@level]
    # Added
    @fishing_exp = @exp_list[@fishing_skill]
    # End Added
    @skills = []
    @hp = maxhp
    @sp = maxsp
    @states = []
    @states_turn = {}
    @maxhp_plus = 0
    @maxsp_plus = 0
    @str_plus = 0
    @dex_plus = 0
    @agi_plus = 0
    @int_plus = 0
    for i in 1..@level
      for j in $data_classes[@class_id].learnings
        if j.level == i
          learn_skill(j.skill_id)
        end
      end
    end
    update_auto_state(nil, $data_armors[@armor1_id])
    update_auto_state(nil, $data_armors[@armor2_id])
    update_auto_state(nil, $data_armors[@armor3_id])
    update_auto_state(nil, $data_armors[@armor4_id])
  end
  # Added
  def fishing_exp=(fishing_exp)
    @fishing_exp = [[fishing_exp, 9999999].min, 0].max
    # Limits fishing skill to level 8
    while @fishing_skill < 8 and @fishing_exp >= @exp_list[@fishing_skill+1] and @exp_list[@fishing_skill+1] > 0
      @fishing_skill += 1
    end
    while @fishing_exp < @exp_list[@fishing_skill] and @fishing_skill > 0
      @fishing_skill -= 1
    end
  end
  # End Added
end

# Added
class Window_Fishing < Window_Base
  def initialize
    super(0,0,640,64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.visible = false
    self.x = $game_player.screen_x
    self.y = $game_player.screen_y
    self.opacity = 0
  end
  def catch_name(name, record = false)
    @name = name
    @record = record
    refresh
  end
  def refresh
    if @name != nil
      self.contents.clear
    end
    self.x = $game_player.screen_x - self.width / 2
    self.y = $game_player.screen_y
    if @record == false
      self.contents.font.color = Color.new(0,0,0,255)
      self.contents.draw_text(6, 2, 600, 32, @name.to_s, 1)
      self.contents.draw_text(6, 0, 600, 32, @name.to_s, 1)
      self.contents.draw_text(4, 2, 600, 32, @name.to_s, 1)
      self.contents.draw_text(4, 0, 600, 32, @name.to_s, 1)
      self.contents.font.color = normal_color
      self.contents.draw_text(5, 1, 600, 32, @name.to_s, 1)
    else
      self.contents.font.color = Color.new(0,0,0,255)
      self.contents.draw_text(6, 2, 600, 32, @name.to_s + " New Record!", 1)
      self.contents.draw_text(6, 0, 600, 32, @name.to_s + " New Record!", 1)
      self.contents.draw_text(4, 2, 600, 32, @name.to_s + " New Record!", 1)
      self.contents.draw_text(4, 0, 600, 32, @name.to_s + " New Record!", 1)
      self.contents.font.color = normal_color
      self.contents.draw_text(5, 1, 600, 32, @name.to_s + " New Record!", 1)
    end
  end
  def update
    super
    self.x = $game_player.screen_x - self.width / 2
    self.y = $game_player.screen_y
  end
end
# End Added

class Window_Base
  # Added
  def draw_fish_level(actor, x, y, width = 174)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, width, 32, FishingLevelNames[actor.fishing_skill - 1].to_s)
  end
  # End Added
end

class Game_Party
  # Added
  attr_accessor :best_fish
  # End Added
  def initialize
    @actors = []
    @gold = 0
    @steps = 0
    # Added
    @best_fish = 0
    # End Added
    @items = {}
    @weapons = {}
    @armors = {}
  end
end

class Window_Status < Window_Base
  def refresh
    self.contents.clear
    draw_actor_graphic(@actor, 40, 112)
    draw_actor_name(@actor, 4, 0)
    draw_actor_class(@actor, 4 + 144, 0)
    draw_actor_level(@actor, 96, 32)
    draw_actor_state(@actor, 96, 64)
    draw_actor_hp(@actor, 96, 112, 172)
    draw_actor_sp(@actor, 96, 144, 172)
    draw_actor_parameter(@actor, 96, 192, 0)
    draw_actor_parameter(@actor, 96, 224, 1)
    draw_actor_parameter(@actor, 96, 256, 2)
    draw_actor_parameter(@actor, 96, 304, 3)
    draw_actor_parameter(@actor, 96, 336, 4)
    draw_actor_parameter(@actor, 96, 368, 5)
    draw_actor_parameter(@actor, 96, 400, 6)
    self.contents.font.color = system_color
    self.contents.draw_text(320, 48, 80, 32, "EXP")
    self.contents.draw_text(320, 80, 80, 32, "NEXT")
    self.contents.font.color = normal_color
    self.contents.draw_text(320 + 80, 48, 84, 32, @actor.exp_s, 2)
    self.contents.draw_text(320 + 80, 80, 84, 32, @actor.next_rest_exp_s, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(320, 160, 96, 32, "Equipment")
    draw_item_name($data_weapons[@actor.weapon_id], 320 + 16, 128)
    draw_item_name($data_armors[@actor.armor1_id], 320 + 16, 160)
    draw_item_name($data_armors[@actor.armor2_id], 320 + 16, 192)
    draw_item_name($data_armors[@actor.armor3_id], 320 + 16, 224)
    draw_item_name($data_armors[@actor.armor4_id], 320 + 16, 256)
    draw_fish_level(@actor, 320, 288)
    self.contents.draw_text(320, 320, 96, 32, "Best Catch")
    self.contents.draw_text(336, 352, 64, 32, ($game_party.best_fish / 2).to_s + "lbs!")
  end
end


Animation:
http://i2.photobucket.com/albums/y41/Auror...msGFX/Water.png

Demo:
http://prexus.rmxponline.com/prexus/script...hingSystem1.rar


__________________________
Go to the top of the page
 
+Quote Post
   
 
Start new topic
Replies
screaminggingin
post Sep 30 2009, 06:35 PM
Post #2



Group Icon

Group: Member
Posts: 1
Type: Writer
RM Skill: Intermediate




What's with all the ????'s ?
I'm currently deleting them all... Maybe it's just my computer...
And also I found this
if $data_weapons[$game_party.actors[i].weapon_id] != nil
it said
"Unidentified weapon_i.d for Nil_Class"
I know nothing about scripts

This post has been edited by screaminggingin: Sep 30 2009, 07:25 PM
Go to the top of the page
 
+Quote Post
   



Closed TopicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 

Lo-Fi Version Time is now: 18th June 2013 - 02:11 PM
RPG RPG Revolution is an Privacy Policy and Legal
eXTReMe Tracker