Aldeia RPG

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

Suporte ao desenvolvimento de jogos


+3
Valentine
GallighanMaker
iCoke~
7 participantes

    Minigame de Pesca

    iCoke~
    iCoke~
    Membro Ativo
    Membro Ativo


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

    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)

    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

    Edsephiroth gosta desta mensagem

    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)

    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.
    Valentine
    Valentine
    Administrador
    Administrador


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

    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.
    Manticora
    Manticora
    Membro Ativo
    Membro Ativo


    Mensagens : 266
    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)

    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
    iCoke~
    iCoke~
    Membro Ativo
    Membro Ativo


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

    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)

    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
    avatar
    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)

    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
    iCoke~
    iCoke~
    Membro Ativo
    Membro Ativo


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

    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)

    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.

    Hurgete gosta desta mensagem

    avatar
    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)

    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.
    avatar
    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)

    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!
    iCoke~
    iCoke~
    Membro Ativo
    Membro Ativo


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

    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)

    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.

    Conteúdo patrocinado


    Minigame de Pesca Empty Re: Minigame de Pesca

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Qui Dez 12, 2024 10:42 am