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.