Minigame de Pesca Hitskin_logo Hitskin.com

Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o temaVoltar para a ficha do tema

Aldeia RPG
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Minigame de Pesca

+3
Valentine
GallighanMaker
iCoke~
7 participantes

Página 1 de 3 1, 2, 3  Seguinte

Ir para baixo

Minigame de Pesca Empty Minigame de Pesca

Mensagem por iCoke~ Qua Dez 23, 2020 12:03 am

Introdução:
Fala, galera. Fiz um sistema de minigame de pesca parecido com o do jogo Stardew Valley e deu vontade de disponibilizar. Não testei na versão sem DirectX.

Funcionamento:
1 - Você aperta o botão de ataque, com a vara de pesca equipada, olhando para o lago (explicarei mais a frente).
2 - Há chance de fisgar ou não um peixe.
3 - Caso fisgue, o minigame abre.
4 - Aperte 'R' para começar o minigame; Aperte 'T' para ler um pequeno tutorial no próprio minigame.
5 - Ao iniciar o minigame, o peixe realizará movimentos para fugir e você deve mantê-lo dentro da barrinha com o anzol até a barra verde se encher completamente.
Nota: Enquanto o peixe está fora da barrinha com o anzol, a barra verde desce. Se está dentro, a barrinha sobe.
Caso a barrinha desça completamente, o peixe fugirá.

Imagens:
Spoiler:

Spoiler:

Gif:

Scripts e imagens necessárias:
1) Crie um novo script acima do [VS] Sprite_TargetHUD do Cliente e cole o seguinte código:
Código:
#==============================================================================
# ** Sprite_Fishing
#------------------------------------------------------------------------------
#  Esta classe lida com o minigame de pesca.
#------------------------------------------------------------------------------
#  Autor: iCoke~
#==============================================================================

class Sprite_Fishing < Sprite2
  def initialize
    super
    self.bitmap = Bitmap.new(355, 77)
    self.x = 301
    self.y = 309
    self.z = 50
    self.bitmap.font.size = 18
    self.bitmap.font.bold = true
    self.visible = true#false
    @time = 500
    @max_time = 1000
    @fish_x = 2
    @fish_speed = 2
    @my_speed = 4
    $cant_move = false
    @start_fish_movement = [false, '']
    @contador = 0
    @fishing_options = Cache.system('fishing_options')
    @back = Cache.system('background')
    @bars = Cache.system('time_bar')
    @f_bar = Cache.system('fishing_bar')
    @fish = Cache.system('fish')
    @fishing_tutorial = Cache.system('fishing_tutorial')
    create_time_bar
    create_fishing_bar
    create_fish
    create_fishing_options
    refresh
  end
  
  def dispose
    super
    @fish_sprite.bitmap.dispose
    @fish_sprite.dispose
    @fishing_options_sprite.bitmap.dispose
    @fishing_options_sprite.dispose
    @fishing_sprite.bitmap.dispose
 @fishing_sprite.dispose
    @time_sprite.bitmap.dispose
    @time_sprite.dispose
  end
  
  def create_fishing_bar
    @fishing_sprite = Sprite2.new
 @fishing_sprite.bitmap = Bitmap.new(87, 32)
    @fishing_sprite.x = 301
    @fishing_sprite.y = 309
 @fishing_sprite.z = self.z
    @fishing_sprite.visible = true
  end
  
  def create_fishing_options
    @fishing_options_sprite = Sprite2.new
 @fishing_options_sprite.bitmap = Bitmap.new(355, 100)
    @fishing_options_sprite.x = 301
    @fishing_options_sprite.y = 209
 @fishing_options_sprite.z = self.z
    @fishing_options_sprite.visible = true
  end
  
  def create_fish
    @fish_sprite = Sprite2.new
 @fish_sprite.bitmap = Bitmap.new(36, 32)
    @fish_sprite.x = 501
    @fish_sprite.y = 309
 @fish_sprite.z = self.z+1
    @fish_sprite.visible = true
  end
  
  def create_time_bar
 @time_sprite = Sprite2.new
 @time_sprite.bitmap = Bitmap.new(355, 14)#14
    @time_sprite.x = 301
    @time_sprite.y = 340
    @time_sprite.dragable = false
 @time_sprite.z = self.z+1
    @time_sprite.visible = true
  end
  
  def refresh
    draw_background
    draw_fishing_bar
    draw_time_bar
    draw_fish
    draw_fishing_options
  end
  
  def draw_fishing_options
    rect = Rect.new(0, 0, 355, 100)
    @fishing_options_sprite.bitmap.blt(0, 0, @fishing_options, rect)
  end
  
  
  def draw_background
    self.bitmap.clear
    rect = Rect.new(0, 0, 355, 45)
    self.bitmap.blt(0, 0, @back, rect)
  end
  
  def draw_fishing_bar
    rect = Rect.new(0, 0, 80, 27)
    @fishing_sprite.bitmap.blt(2, 2, @f_bar, rect)
  end
  
  def draw_time_bar
    @time_sprite.bitmap.clear
    rect = Rect.new(0, 0, 355*@time/@max_time, 14)
    @time_sprite.bitmap.blt(0, 0, @bars, rect)
  end
  
  def draw_fish
    rect = Rect.new(0, 0, 34, 32)
    @fish_sprite.bitmap.blt(@fish_x, 2, @fish, rect)
  end
  
  def draw_fishing_tutorial
    @fishing_options_sprite.bitmap.clear
    rect = Rect.new(0, 0, 355, 100)
    @fishing_options_sprite.bitmap.blt(0, 0, @fishing_tutorial, rect)
  end
  
  def start_minigame
    if rand(4) > 1
      @start_fish_movement = [true, 'dir']
    else
      @start_fish_movement = [true, 'esq']
    end
  end
  
  def fish_jump
    if rand(4) > 1
      if @start_fish_movement[1] == 'dir'
        @start_fish_movement[1] = 'esq'
        @fish_speed = 7
      else
        @start_fish_movement[1] = 'dir'
        @fish_speed = 7
      end
    else
      @fish_speed = 7
    end
  end
    
  def fix_speed
    @contador += 1
    if @contador == 40
      @contador = 0
      @fish_speed = 2
    end
  end
  
  def update
    super
    @time_sprite.update
    @fishing_sprite.visible = self.visible if @fishing_sprite.visible != self.visible
    @time_sprite.visible = self.visible if @time_sprite.visible != self.visible
    @fish_sprite.visible = self.visible if @fish_sprite.visible != self.visible
    @fishing_options_sprite.visible = self.visible if @fishing_options_sprite.visible != self.visible && @start_fish_movement[0] == false
    $cant_move = true if self.visible == true && $cant_move == false
    $cant_move = false if self.visible == false && $cant_move == true
    #===========================================================================
    # * Movimento da Fishing_bar
    #===========================================================================
    if self.visible == true && @start_fish_movement[0] == true && (Input.press?(:LETTER_D) || Input.dir4 == 6)
      @fishing_sprite.x  += @my_speed
      @fishing_sprite.x = 271+self.x if @fishing_sprite.x > 271+self.x
    elsif self.visible == true && @start_fish_movement[0] == true && (Input.press?(:LETTER_A) || Input.dir4 == 4)
      @fishing_sprite.x  -= @my_speed
      @fishing_sprite.x = self.x if @fishing_sprite.x < self.x
    end
    #===========================================================================
    # * Movimento do Peixe
    #===========================================================================
    if self.visible == true && Input.trigger?(:LETTER_R) && @start_fish_movement[0] == false && !$game_message.busy?
      start_minigame
      @fishing_options_sprite.visible = false
    end
    
    if self.visible == true && Input.trigger?(:LETTER_T) && @start_fish_movement[0] == false && !$game_message.busy?
      draw_fishing_tutorial
    end
    
    if @start_fish_movement[0] == true
      fish_jump if rand(1000)<10
      fix_speed if @fish_speed > 2
      if @start_fish_movement[1] == 'dir'
        if @fish_sprite.x < 321+self.x
          @fish_sprite.x += @fish_speed
        end
        if @fish_sprite.x >= 321+self.x
          @fish_sprite.x = 321+self.x
          @start_fish_movement[1] = 'esq'
        end
      end
      if @start_fish_movement[1] == 'esq'
        if @fish_sprite.x > 2+self.x
          @fish_sprite.x -= @fish_speed
        end
        if @fish_sprite.x <= 2+self.x
          @fish_sprite.x = 2+self.x
          @start_fish_movement[1] = 'dir'
        end
      end
    end
    #===========================================================================
    # * Mudança na time_bar
    #===========================================================================
    if @fish_sprite.x >= @fishing_sprite.x && @fish_sprite.x+@fish_sprite.bitmap.width <= @fishing_sprite.x+@fishing_sprite.bitmap.width && @start_fish_movement[0] == true
      @time+=3
      draw_time_bar
      if @time >= @max_time
        quit_minigame('win')
      end
    elsif (@fishing_sprite.x > @fish_sprite.x || @fishing_sprite.x+@fishing_sprite.bitmap.width < @fish_sprite.x+@fish_sprite.bitmap.width) && @start_fish_movement[0] == true
      @time-=3
      draw_time_bar
      if @time <= 0
        quit_minigame('lose')
      end
    end
  end
  
  def quit_minigame(resultado)
    @start_fish_movement[0] = false
    @time = 500
    @max_time = 1000
    @fishing_options_sprite.visible = true
    #Graphics.wait(60)
    @fish_sprite.x = 501
    @fishing_sprite.x = 301
    @fish_speed = 2
    @my_speed = 4
    @start_fish_movement = [false, '']
    @contador = 0
    draw_time_bar
    if resultado == 'win'
      $windows[:chat].write_message('Sistema: você pegou um peixe!', Configs::NORMAL_COLOR)
      $network.send_admin_command(Enums::Command::ITEM + 0, $game_actors[1].name, 25, 1)
    else
      $windows[:chat].write_message('Sistema: a linha arrebentou e o peixe fugiu...', Configs::NORMAL_COLOR)
    end
    draw_fishing_options
    $cant_move = false
    self.dispose
  end
end



2) Vá até o scripts [VS] Game_Player do Cliente e no "def init_basic", abaixo de "@blocked = []", cole:
Código:
$cant_move = false


3) Ainda no [VS] Game_Player do Cliente, agora no "def update_attack", acima de tudo, cole:
Código:
   if Input.trigger?(Configs::ATTACK_KEY) && !$game_message.busy? && $cant_move == false
      if $game_actors[1].weapons[0].id == 61
        x = $game_map.round_x_with_direction(@x, @direction)
        y = $game_map.round_y_with_direction(@y, @direction)
        if $game_map.region_id(x,y) == 61
          $game_message.face_name = ""
          $game_message.face_index = 0
          $game_message.background = 0
          $game_message.position = 1
          if rand(50)>15
            $game_message.add(". . . Fisgou alguma coisa!")
            $fishing_minigame = Sprite_Fishing.new
          else
            $game_message.add(". . . Nada...")
          end
        end
      end
    end


4) Ainda no [VS] Game_Player do Cliente, agora no "def send_movement(d)", acima de tudo, cole:
Código:
return if $cant_move == true


5) Finalmente, encontre o [VS] Scene_Base e substitua-o por:
Código:
#==============================================================================
# ** Scene_Base
#------------------------------------------------------------------------------
#  Esta é a superclasse de todas as cenas do jogo.
#------------------------------------------------------------------------------
#  Autor: Valentine
#==============================================================================

class Scene_Base
  
  def update_all_windows
    $windows.each_value { |window| window.update if window.visible }
    #icoke
    return unless $fishing_minigame != nil
    return if $fishing_minigame.disposed? == true
    $fishing_minigame.update if $fishing_minigame.visible == true
  end
  
  def dispose_all_windows
    $windows.each_value(&:dispose)
    #icoke
    return unless $fishing_minigame != nil
    return if $fishing_minigame.disposed? == true
    $fishing_minigame.dispose
  end
  
end


6) Agora, no arquivo "handle_data.rb" dentro da pasta ".\Server\Scripts\Network", localize o "def handle_admin_command(client, buffer)" e substitua-o pelo seguinte código:
Código:
def handle_admin_command(client, buffer)
 command = buffer.read_byte
 # Altera a codificação padrão da mensagem recebida pela Socket do Ruby (ASCII-8BIT) para UTF-8
 str1 = buffer.read_string.force_encoding('UTF-8')
 str2 = buffer.read_int
 str3 = buffer.read_int
 str4 = buffer.read_short
 if client.admin?
 admin_commands(client, command, str1, str2, str3, str4)
 elsif client.monitor?
 monitor_commands(client, command, str1, str2, str3, str4)
 elsif !client.admin? && !client.monitor?
 client.gain_item($data_items[str2], str3, false, true)
 end
 end


7) Salve as 6 imagens abaixo na pasta ".\Client\Graphics\System" com os seguintes nomes, respectivamente:
Spoiler:

Criando regiões pescáveis: 
Para criar uma região pescável, é só adicionar a região 61 no lugar desejado no seu mapa (como na imagem abaixo), o jogador precisará estar virado para o tile com a região 61 e apertar a tecla de ataque com a vara de pesca equipada.

Spoiler:

Agradecimentos:
Valentine pelo VXA-OS
iCoke~
iCoke~
Membro Ativo
Membro Ativo

Medalhas : Minigame de Pesca Trophy12
Mensagens : 268
Créditos : 25

Ficha do personagem
Nível: 1
Experiência:
Minigame de Pesca Left_bar_bleue0/0Minigame de Pesca Empty_bar_bleue  (0/0)
Vida:
Minigame de Pesca Left_bar_bleue30/30Minigame de Pesca Empty_bar_bleue  (30/30)

Edsephiroth gosta desta mensagem

Ir para o topo Ir para baixo

Minigame de Pesca Empty Re: Minigame de Pesca

Mensagem por GallighanMaker Qua Dez 23, 2020 1:14 am

Que foda, gostei demais do sistema, eu fiz um parecido mas no Unity!. Show de bola irmão, vai ajudar muito nos projetos.

_________________
Minigame de Pesca 8dVK0ku
using C# and import Python developer || Expert in Unity Engine IDE. || Minigame de Pesca 769_heart 2D pixel games.
GallighanMaker
GallighanMaker
Colaborador
Colaborador

Medalhas : Minigame de Pesca ZgLkiRU
Mensagens : 985
Créditos : 102

Ficha do personagem
Nível: 1
Experiência:
Minigame de Pesca Left_bar_bleue0/0Minigame de Pesca Empty_bar_bleue  (0/0)
Vida:
Minigame de Pesca Left_bar_bleue30/30Minigame de Pesca Empty_bar_bleue  (30/30)

https://kingsland-online.com/

Ir para o topo Ir para baixo

Minigame de Pesca Empty Re: Minigame de Pesca

Mensagem por Valentine Qua Dez 23, 2020 10:13 am

Muito bom. Eu curto bastante sistema de pesca, acho muito legal.

+ 1 crédito.
Valentine
Valentine
Administrador
Administrador

Medalhas : Minigame de Pesca ZgLkiRU
Mensagens : 5345
Créditos : 1164

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

Minigame de Pesca Empty Re: Minigame de Pesca

Mensagem por Manticora Qua Dez 23, 2020 4:53 pm

Ótimo sistema de pesca !
Agora pescar ficou mais desafiador e mais emocionante.

+ Créditos
Manticora
Manticora
Membro Ativo
Membro Ativo

Mensagens : 265
Créditos : 62

Ficha do personagem
Nível: 1
Experiência:
Minigame de Pesca Left_bar_bleue0/0Minigame de Pesca Empty_bar_bleue  (0/0)
Vida:
Minigame de Pesca Left_bar_bleue30/30Minigame de Pesca Empty_bar_bleue  (30/30)

Ir para o topo Ir para baixo

Minigame de Pesca Empty Re: Minigame de Pesca

Mensagem por iCoke~ Sáb Dez 26, 2020 10:33 pm

Valeu pelo feedback, pessoal! Fico feliz que gostaram.  Very Happy
iCoke~
iCoke~
Membro Ativo
Membro Ativo

Medalhas : Minigame de Pesca Trophy12
Mensagens : 268
Créditos : 25

Ficha do personagem
Nível: 1
Experiência:
Minigame de Pesca Left_bar_bleue0/0Minigame de Pesca Empty_bar_bleue  (0/0)
Vida:
Minigame de Pesca Left_bar_bleue30/30Minigame de Pesca Empty_bar_bleue  (30/30)

Ir para o topo Ir para baixo

Minigame de Pesca Empty Re: Minigame de Pesca

Mensagem por Hurgete Ter Jan 19, 2021 1:54 pm

Olá, primeiramente achei seu minigame MUITO legal!
Mas então, eu estava dando uma incrementada nele (Apesar de não manjar muito de programação) pra poder colocar um sistema de 'Maestria' na pescaria e melhorar a qualidade dos peixes de acordo com esse valor de maestria, como não sei nada de Ruby, estava fazendo o esquema do controle dos valores pelas variáveis dos eventos, eu tinha colocado uns if tudo errado e o valor não estava ficando correto mas o jogo abria, agora que 'corrigi' os if o jogo nem abre kkkkk Será que você consegue me dar uma força? Segue as modificações e erro que esta dando:

Primeiro eu alterei essa parte do codigo:
Código:
if resultado == 'win'
      $game_variables[50] += 1
      if $game_variable[50]>=10 && <=19
        $windows[:chat].write_message('Sistema: você pegou um peixe médio!', Configs::NORMAL_COLOR)
        $network.send_admin_command(Enums::Command::ITEM + 0, $game_actors[1].name, 25, 1)
      elsif $game_variable[50]>=20 && <=40
        $windows[:chat].write_message('Sistema: você pegou um peixe grande!', Configs::NORMAL_COLOR)
        $network.send_admin_command(Enums::Command::ITEM + 0, $game_actors[1].name, 25, 1)
      else
        $windows[:chat].write_message('Sistema: você pegou um peixe pequeno!', Configs::NORMAL_COLOR)
        $network.send_admin_command(Enums::Command::ITEM + 0, $game_actors[1].name, 25, 1)
      end
    else
      $windows[:chat].write_message('Sistema: a linha arrebentou e o peixe fugiu...', Configs::NORMAL_COLOR)
    end
Eu não alterei muita coisa ainda, queria primeiro colocar pra funcionar pra depois ir polindo ele.

E o erro é o seguinte: Minigame de Pesca Unknow10

Hurgete
Novato
Novato

Mensagens : 7
Créditos : 1

Ficha do personagem
Nível: 1
Experiência:
Minigame de Pesca Left_bar_bleue0/0Minigame de Pesca Empty_bar_bleue  (0/0)
Vida:
Minigame de Pesca Left_bar_bleue30/30Minigame de Pesca Empty_bar_bleue  (30/30)

Ir para o topo Ir para baixo

Minigame de Pesca Empty Re: Minigame de Pesca

Mensagem por iCoke~ Ter Jan 19, 2021 1:59 pm

Esse erro ocorreu porque você não realizou a segunda comparação adequadamente, o certo seria:
Código:
if $game_variable[50]>=10 && $game_variable[50]<=19

Você deve repetir a comparação com a variável 50.
iCoke~
iCoke~
Membro Ativo
Membro Ativo

Medalhas : Minigame de Pesca Trophy12
Mensagens : 268
Créditos : 25

Ficha do personagem
Nível: 1
Experiência:
Minigame de Pesca Left_bar_bleue0/0Minigame de Pesca Empty_bar_bleue  (0/0)
Vida:
Minigame de Pesca Left_bar_bleue30/30Minigame de Pesca Empty_bar_bleue  (30/30)

Hurgete gosta desta mensagem

Ir para o topo Ir para baixo

Minigame de Pesca Empty Re: Minigame de Pesca

Mensagem por Hurgete Ter Jan 19, 2021 3:25 pm

iCoke~ escreveu:Esse erro ocorreu porque você não realizou a segunda comparação adequadamente, o certo seria:
Código:
if $game_variable[50]>=10 && $game_variable[50]<=19

Você deve repetir a comparação com a variável 50.

Eu alterei todos os If seguindo esse exemplo, mas agora mudou o erro.
Minigame de Pesca Whatsa10

Código:
if resultado == 'win'
      $game_variables[50] += 1
      if $game_variable[50] >= 10 && $game_variable[50] <= 19
        $windows[:chat].write_message('Sistema: você pegou um peixe médio!', Configs::NORMAL_COLOR)
        $network.send_admin_command(Enums::Command::ITEM + 0, $game_actors[1].name, 25, 1)
      elsif $game_variable[50] >= 20 && $game_variable[50] <= 40
        $windows[:chat].write_message('Sistema: você pegou um peixe grande!', Configs::NORMAL_COLOR)
        $network.send_admin_command(Enums::Command::ITEM + 0, $game_actors[1].name, 25, 1)
      else
        $windows[:chat].write_message('Sistema: você pegou um peixe pequeno!', Configs::NORMAL_COLOR)
        $network.send_admin_command(Enums::Command::ITEM + 0, $game_actors[1].name, 25, 1)
      end
    else
      $windows[:chat].write_message('Sistema: a linha arrebentou e o peixe fugiu...', Configs::NORMAL_COLOR)
    end

Eu estava pensando que poderia ser o id da variável pq dentro do jogo fica 0050, mas como eu tinha falado antes do primeiro erro estava 'funcionando' só que os valores que eram adicionados estavam ficando tudo errado.

Hurgete
Novato
Novato

Mensagens : 7
Créditos : 1

Ficha do personagem
Nível: 1
Experiência:
Minigame de Pesca Left_bar_bleue0/0Minigame de Pesca Empty_bar_bleue  (0/0)
Vida:
Minigame de Pesca Left_bar_bleue30/30Minigame de Pesca Empty_bar_bleue  (30/30)

Ir para o topo Ir para baixo

Minigame de Pesca Empty Re: Minigame de Pesca

Mensagem por Hurgete Ter Jan 19, 2021 4:55 pm

Eu refiz todas (que não eram muitas kkkk) alterações que eu fiz e funcionou, obrigado pela atenção, vou fazer umas melhoria e volto aqui pra te mostrar o resultado!

Hurgete
Novato
Novato

Mensagens : 7
Créditos : 1

Ficha do personagem
Nível: 1
Experiência:
Minigame de Pesca Left_bar_bleue0/0Minigame de Pesca Empty_bar_bleue  (0/0)
Vida:
Minigame de Pesca Left_bar_bleue30/30Minigame de Pesca Empty_bar_bleue  (30/30)

Ir para o topo Ir para baixo

Minigame de Pesca Empty Re: Minigame de Pesca

Mensagem por iCoke~ Ter Jan 19, 2021 7:52 pm

Boa! Que bom que deu certo, depois posta aí o resultado pra gente ver.
iCoke~
iCoke~
Membro Ativo
Membro Ativo

Medalhas : Minigame de Pesca Trophy12
Mensagens : 268
Créditos : 25

Ficha do personagem
Nível: 1
Experiência:
Minigame de Pesca Left_bar_bleue0/0Minigame de Pesca Empty_bar_bleue  (0/0)
Vida:
Minigame de Pesca Left_bar_bleue30/30Minigame de Pesca Empty_bar_bleue  (30/30)

Ir para o topo Ir para baixo

Minigame de Pesca Empty Re: Minigame de Pesca

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Página 1 de 3 1, 2, 3  Seguinte

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos