Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o tema • Voltar para a ficha do tema
Minigame de Pesca
+3
Valentine
GallighanMaker
iCoke~
7 participantes
Aldeia RPG :: VXA-OS Engine :: Recursos :: Scripts
Página 1 de 3
Página 1 de 3 • 1, 2, 3
Minigame de Pesca
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:
Scripts e imagens necessárias:
1) Crie um novo script acima do [VS] Sprite_TargetHUD do Cliente e cole o seguinte código:
2) Vá até o scripts [VS] Game_Player do Cliente e no "def init_basic", abaixo de "@blocked = []", cole:
3) Ainda no [VS] Game_Player do Cliente, agora no "def update_attack", acima de tudo, cole:
4) Ainda no [VS] Game_Player do Cliente, agora no "def send_movement(d)", acima de tudo, cole:
5) Finalmente, encontre o [VS] Scene_Base e substitua-o por:
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:
7) Salve as 6 imagens abaixo na pasta ".\Client\Graphics\System" com os seguintes nomes, respectivamente:
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.
Agradecimentos:
Valentine pelo VXA-OS
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~- Membro Ativo
- Medalhas :
Mensagens : 268
Créditos : 25
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Edsephiroth gosta desta mensagem
Re: Minigame de Pesca
Que foda, gostei demais do sistema, eu fiz um parecido mas no Unity!. Show de bola irmão, vai ajudar muito nos projetos.
_________________
using C# and import Python developer || Expert in Unity Engine IDE. || 2D pixel games.
Re: Minigame de Pesca
Ótimo sistema de pesca !
Agora pescar ficou mais desafiador e mais emocionante.
+ Créditos
Agora pescar ficou mais desafiador e mais emocionante.
+ Créditos
Manticora- Membro Ativo
- Mensagens : 261
Créditos : 62
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Re: Minigame de Pesca
Valeu pelo feedback, pessoal! Fico feliz que gostaram.
iCoke~- Membro Ativo
- Medalhas :
Mensagens : 268
Créditos : 25
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Re: Minigame de Pesca
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:
E o erro é o seguinte:
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
E o erro é o seguinte:
Hurgete- Novato
- Mensagens : 7
Créditos : 1
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Re: Minigame de Pesca
Esse erro ocorreu porque você não realizou a segunda comparação adequadamente, o certo seria:
Você deve repetir a comparação com a variável 50.
- Código:
if $game_variable[50]>=10 && $game_variable[50]<=19
Você deve repetir a comparação com a variável 50.
iCoke~- Membro Ativo
- Medalhas :
Mensagens : 268
Créditos : 25
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Hurgete gosta desta mensagem
Re: Minigame de Pesca
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.
- 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
- Mensagens : 7
Créditos : 1
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Re: Minigame de Pesca
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
- Mensagens : 7
Créditos : 1
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Re: Minigame de Pesca
Boa! Que bom que deu certo, depois posta aí o resultado pra gente ver.
iCoke~- Membro Ativo
- Medalhas :
Mensagens : 268
Créditos : 25
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Página 1 de 3 • 1, 2, 3
Tópicos semelhantes
» Script de Pesca
» [4.0.6] Pesca por terreno 100% script
» [Tutorial] SISTEMA DE PESCA POR EVENTOS
» Vincent ~ MiniGame
» Minigame Ice Trap
» [4.0.6] Pesca por terreno 100% script
» [Tutorial] SISTEMA DE PESCA POR EVENTOS
» Vincent ~ MiniGame
» Minigame Ice Trap
Aldeia RPG :: VXA-OS Engine :: Recursos :: Scripts
Página 1 de 3
Permissões neste sub-fórum
Não podes responder a tópicos