RMRK is retiring.
Server is paid up for the rest of 2026, but the forum may go after that. See here for more information. Please archive or save anything you would like to keep before 2027.
Main Menu
  • Welcome to The RPG Maker Resource Kit.

Fishing Skill

Started by Jesse 015, January 18, 2006, 07:03:09 AM

0 Members and 1 Guest are viewing this topic.

Jesse 015

is there any way to make a fishing skill, and get lvls and all of that
Badass, and a do'er not a thinker

landofshadows

I have made fishing in my game... The way I done it was to make a skill called fishing and let the Spearmen (Lancers) Learn it at Level 10... Then I set up Events All around a pond, or coast line, with a Conditional Branch (If Spearmen in Party, with Skill fishing Then... and Else...) Some events I have set Large fish (30lbs), others small (10lbs), some none then some with a monster battle... (Create the Fish as Items)...

If you want the events to stop you can set another conditional branch to say when Holding Item FISH 10lbs - Show message You caught nothing...

The better fishing spots I set a different limit, so you stop catching fish when you reach a Certain level of Exp, and made different fish appear...

Conditional Branches work well for me, but if you find another way, lets us know....
 


My RMRK Wikki:- http://wiki.rmrk.net/index.php/Landofshadows
Make a Donation for my Resource making:- https://www.paypal.me/landofshadows

ahref

there is one as a script i cant remember what version your using so if you are using xp then ill find nad post the script

Jesse 015

umm,ok landofshadows, wouldnt u just make a text in fishing spot, saying..,,,,you start fishing...........u catch a fish, then add item, u cant usde it in battle the raw fish, so make it wont heal any health, then make a fire event saying, u cook the fish, then u get the cooked fish (conditional branch) , if u dont hav raw fish say, (u do not hav a fish to cook) else, u cook the fish add cooked fish remove 1 item raw fish, use the  cooked fish as a heal item
Badass, and a do'er not a thinker

Jesse 015

script, you mean there is a script for a fishing skill that no1 would ever think of!!! :shock:  :shock: , then i must know this site, or resource
Badass, and a do'er not a thinker

ahref


Jesse 015

look, i am not a expert at scripting, acturlly i really suck at scripting and very good at events, but the link u sent me does not work. :cry:  :cry:
Badass, and a do'er not a thinker

ahref

gah you need a rmxp account anyway ill copy it to the scripts section of the forum and then send you the link

ahh here it is:


#-------------------------------#
#        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


youll need this

http://i2.photobucket.com/albums/y41/AuroraDreamsGFX/Water.png

i did not make the above it belongs to prexus

Jesse 015

umm.....ok thnx for that, i dont need it anymore srry :O_o:
Badass, and a do'er not a thinker

Bearrick

you got a demo for this script?

Jalkson

This topic is over a year old.  Try searching the Script database.