Desenhar bandeira
Primeiro quero dizer que provavelmente este será meu último script. Estou fazendo a pedido de um amigo.
Esse script eu já tinha feito a bastante tempo para um jogo, mas agora está 999% melhor.
Informações:
Lag gerado: Mínimo. Fiz o máximo para encurtar os códigos e compactar envios de dados.
Com este sistema os jogadores poderão desenhar a própria bandeira.
A bandeira é exibida na Window_guild e em um ícone ao lado dos nomes dos jogadores.
É possível modificar o tamanho da bandeira nas configurações.
Imagens:
- Spoiler:
Colocando no jogo:
OBS: Antes de por no seu jogo, faça uma cópia do seu projeto para o caso de der erro, assim você poderá refazer de novo.
Para por no jogo temos que modificar bastantes scripts. Vamos começar substituindo alguns.
Substitua o script [GD] Window_CreateGuild por este:
- Código:
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#|Autor: RD12| Criar guilda e Desenhar Bandeira
#------------------------------------------------------------------------------
# Chame o script -> $guild_w.open
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#Configure aqui a palheta de Cores
module Flag_Config
#Tamanho da bandeira na Window_Guilld
Flag_Size = 7
#Tamanho do ícone da bandeira dos jogadores
Icon_Size = 3
#Cores da palheta da bandeira
Colors = []
Colors[0] = Color.new(0,0,0)#Preto
Colors[1] = Color.new(150,150,150)#Cinza
Colors[2] = Color.new(255,255,255)#Branco
Colors[3] = Color.new(255,0,0)#Vermelho
Colors[4] = Color.new(255,100,0)#Laranja
Colors[5] = Color.new(255,255,128)#Amarelo
Colors[6] = Color.new(0,255,0)#Verde escuro
Colors[7] = Color.new(0,160,0)#Verde claro
Colors[8] = Color.new(0,162,232)#Azul
Colors[9] = Color.new(255,150,185)#Rosa
end
class Window_CreateGuild < Window_Base
def initialize
super(220,100,270,325)
self.contents = Bitmap.new(self.width-32, self.height-32)
self.back_opacity = 200
@dragable = true
@closable = true
self.z = 99999
$guild_input = Text_Box.new(self,60,260,90,10,1,true)
@criar_guild1 = Button.new(self,10,290,LANGUAGE::NEWGUILDCREATE) {criar; $fechando_ativar = true}
@sair_guild1 = Button.new(self,70,290,LANGUAGE::NEWGUILDBACK) {self.visible = false; self.active = false; $fechando_ativar = true}
@color = 0
end
def update
super
refresh
draw_flag
end
def draw_flag
#==Pegar cor da Palheta==#
if Input.pressed(Input::Mouse_Left)
for i in 0..4
if in_area?([70+i*22, 195+15, 17, 17])
@color = i
end
if in_area?([70+i*22, 195+35, 17, 17])
@color = i+5
end
end
#==Desenhar a cor na bandeira==#
for x in 0..5
for y in 0..5
if in_area?([60+x*21, 75+y*21, 20, 20])
$flag_contents[y][x] = @color
end
end
end
end
end
def refresh
self.contents.clear
return if $flag_contents.nil?
#Desenha a bandeira da guilda
for x in 0..5
for y in 0..5
rect = Rect.new(45+x*21, 60+y*21, 20, 20)
cor = $flag_contents[y][x]
self.contents.fill_rect(rect, Flag_Config::Colors[cor])
end
end
#Desenha a Palheta de cores
for i in 0..4
rect = Rect.new(55+i*22, 195, 17, 17)
self.contents.fill_rect(rect, Flag_Config::Colors[i])
#cores de baixo
rect = Rect.new(55+i*22, 195+20, 17, 17)
self.contents.fill_rect(rect, Flag_Config::Colors[i+5])
end
#textos
self.contents.font.size = 17
self.contents.draw_text(0, 0, self.width-44, 42, "Desenhe a bandeira da sua guilda", 1)
self.contents.font.size = 14
self.contents.draw_text(0, 237, self.width-64, 32, LANGUAGE::NEWGUILDNAME)
end
def open
if $guild_name == ""
$guild_w.visible = true
$guild_w.active = true
else
$msg.set_text(LANGUAGE::HAVEGUILD,20, -3)
$msg.visible = true
$msg.active = true
end
end
def on_close
self.visible = false
self.active = false
$fechando_ativar = true
end
def criar
if $guild_input.text.size < 4
$guild_w.visible = false
$guild_w.active = false
$msg.set_text(LANGUAGE::ERROGUILDNAME,45, -3)
$msg.visible = true
$msg.active = true
return
end
if Network::Main.user_exist?($guild_input.text+"-Guild") == true
$guild_w.visible = false
$guild_w.active = false
$msg.set_text(LANGUAGE::NEWGUILDEXIST,45, -3)
$msg.visible = true
$msg.active = true
$guild_input.text = ""
$guild_input.active = false
return
end
$guild_name = $guild_input.text
$guild_w.visible = false
$guild_w.active = false
$game_party.actors[0].guild = $guild_input.text
$guild_points = 0
$game_player.refresh
$scene = Scene_Map.new
Network::Main.send_start
$guild_position = LANGUAGE::GUILDLEADER
Network::Main.send_register($guild_input.text+"-Guild" , $guild_input.text)
end
end
$flag_contents = []
$flag_contents[0] = [1,1,1,1,1,1]
$flag_contents[1] = [1,1,1,1,1,1]
$flag_contents[2] = [1,1,1,1,1,1]
$flag_contents[3] = [1,1,1,1,1,1]
$flag_contents[4] = [1,1,1,1,1,1]
$flag_contents[5] = [1,1,1,1,1,1]
Agora substitua o [GD] Window_Guild por este:
- Código:
#==============================================================================
# ** Guild
#------------------------------------------------------------------------------
# By Valentine
# Editado por RD12
#==============================================================================
class Window_Guild < Window_Base
def initialize(x,y,a,b)
super(x,y,a,b)
self.contents = Bitmap.new(self.width-32, self.height-32)
self.back_opacity = 200
@dragable = true
@closable = true
self.z = 99999
@sair_guild2 = Button.new(self,10,180,LANGUAGE::LEAVEGUILD) {sair}
@member_guild = Button.new(self,108,180,LANGUAGE::GUILDMEMBERS) { $member_list.refresh;self.visible = false; self.active = false; $member_list.visible = true; $member_list.active = true }
if $guild_position == LANGUAGE::GUILDLEADER
$guild_created_input = Text_Box.new(self,64,117,77,10)
$guild_created_input2 = Text_Box.new(self,64,137,77,10)
@ok_guild = Button.new(self,145,117,LANGUAGE::ADDGUILDMEMBER) {ok}
@delet_guild = Button.new(self,145,137,LANGUAGE::DELGUILDMEMBER) {del}
else
$guild_created_input = Text_Box.new(self,200,207,77,10)
end
refresh
end
def on_close
self.visible = false
self.active = false
# $flag2.visible = false
$member_list.visible = false
$member_list.active = false
$fechando_ativar = true
end
def update
super
refresh if something_changed?
end
def something_changed?
return true if @old_guild != $game_party.actors[0].guild
return true if @old_position != $guild_position
return true if @old_pontos != $guild_points
return true if @old_lider != $guild_lider_name
return true if @old_flag != $flag_contents
return false
end
def refresh
@old_guild = $game_party.actors[0].guild
@old_position = $guild_position
@old_pontos = $guild_points
@old_lider = $guild_lider_name
@old_flag = $flag_contents
self.contents.clear
flag_size = Flag_Config::Flag_Size
#Desenhar bandeira
for x in 0..5
for y in 0..5
rect = Rect.new(x*flag_size, 5+y*flag_size, flag_size, flag_size)
cor = $flag_contents[y][x]
self.contents.fill_rect(rect, Flag_Config::Colors[cor])
end
end
self.contents.font.size = 17
self.contents.draw_text(75, 10, self.width-22, 20, $game_party.actors[0].guild)
self.contents.font.size = 14
self.contents.draw_text(0,53, self.width-44, 42, LANGUAGE::GUILDPOSITION + $guild_position.to_s)
self.contents.draw_text(0,69, self.width-44, 42, LANGUAGE::GUILDPOINTS + $guild_points.to_s)
if $guild_position == LANGUAGE::GUILDLEADER
self.contents.draw_text(0, 87, self.width-44, 42, LANGUAGE::GUILDCALL)
self.contents.draw_text(0, 107, self.width-44, 42, LANGUAGE::GUILDOUT)
else
self.contents.draw_text(0, 85, self.width-44, 42, LANGUAGE::GUILDLEADER+": "+$guild_lider_name.to_s)
end
end
def del
for p in Network::Main.players.values
if p.nome == $guild_created_input2.text
if p.guild == $game_party.actors[0].guild
jogador = p.nome
return if p.position == LANGUAGE::GUILDLEADER
Network::Main.pchat(p.netid,"[COM] [GDS] #{jogador}")
end
end
end
end
def ok
for p in Network::Main.players.values
if p.nome == $guild_created_input.text
flag = $flag.to_s
jogador = p.nome
lider_name = $game_party.actors[0].name
Network::Main.pchat(p.netid,"[COM] [GDD] #{$guild_name} #{jogador} #{flag} #{lider_name}")
end
end
end
def sair
if $guild_position == LANGUAGE::GUILDLEADER
Network::Main.send_register($guild_name.to_s+"-Guild-DEL" , $guild_name.to_s)
end
$guild_created.visible = false
$guild_created.active = false
$member_list.visible = false
$member_list.active = false
$guild_name = ""
$game_party.actors[0].guild = ""
$game_player.refresh
$scene = Scene_Map.new
Network::Main.send_start
$guild_position = LANGUAGE::GUILDRANK
$guild_points = 0
# $flag2.visible = false
$fechando_ativar = true
$flag = 1
end
end
Agora vamos no script [SPR] Sprite_NetCharacter, na linha 40 procure por:
- Código:
icon = RPG::Cache.icon("Mini-Flag#{@character.flag}")
bitmap.blt(55-@character.guild.size,8,icon,icon.rect)
Delete ele e no lugar coloque este código:
- Código:
#Desenha o íncone da bandeira do lado do nome
icon_size = Flag_Config::Icon_Size
@net_flag = @character.flag_icon.split("|")
for i in 0..5
for x in 0..5
rect = Rect.new((50-@character.guild.size)+x*icon_size, 8+(i)*icon_size, icon_size, icon_size)
cor = @net_flag[x+(i*6)].to_i
bitmap.fill_rect(rect, Flag_Config::Colors[cor])
end
end
Agora no script [GM] Game_NetPlayer, adicione essa linha em baixo da linha 21:
- Código:
attr_accessor :flag_icon
Neste mesmo script, em baixo da linha 75 adicione esta linha:
- Código:
@flag_icon = ""
Agora vá para o script [SC] Net Rmxp Hud, na linha 191 procure por:
- Código:
flag = $flag.to_s
- Código:
#Enviar dados da bandeira
flag = ""
for x in 0..5
for y in 0..5
flag += $flag_contents[x][y].to_s+"|"
end
end
No mesmo script, na linha 242 procure por:
- Código:
$flag = $flag_nominho
Apague e adicione este código no lugar:
- Código:
#Descompactar dados da bandeira
@flag_cont = $flag_nominho.split("|")
for x in 0..5
for y in 0..5
$flag_contents[x][y] = @flag_cont[y+(x*6)].to_i
end
end
Agora vá para o script [EXT] Event Text Display, na linha 188 procure por:
- Código:
icon = RPG::Cache.icon("Mini-Flag#{$flag}")
bitmap.blt(55-actor.guild.size,8,icon,icon.rect)
- Código:
flag_size = Flag_Config::Icon_Size
for x in 0..5
for y in 0..5
rect = Rect.new((50-actor.guild.size)+x*flag_size, 8+y*flag_size, flag_size, flag_size)
cor = $flag_contents[y][x]
bitmap.fill_rect(rect, Flag_Config::Colors[cor])
end
end
Agora no script [ACT] Auto Save
linha 38 procure por file.close.
Em cima cole isto:
- Código:
Marshal.dump($flag_contents, file)
Agora no script [SC] Scene_Title, linha 320 procure por
- Código:
$game_map.setup($game_map.map_id)
Em cima dessa linha coloque esta:
- Código:
$flag_contents = Marshal.load(file)
Agora no script [NET] Network, na linha 387 procure por
- Código:
send += "start(#{self.id});"
EM CIMA, cole este código:
- Código:
#Envia as cores da bandeira pro server
@flag_color = ""
if !$flag_contents.nil?
for x in 0..5
for y in 0..5
@flag_color += $flag_contents[x][y].to_s+"|"
end
end
send += "@flag_icon = '#{@flag_color}';"
else
send += "@flag_icon = ''"
end
Agora no script [SC] Net Rmxp Hud de novo, procure por:
- Código:
#Criar Guild
$guild_w = Window_CreateGuild.new(220,100,200,200)
Apague esse pedaço dele: (220,100,200,200)
Agora, aperte Ctrl+Shift+F, na busca procure por $flag1, repita a busca apagando todas as linhas que vc achar com esse código.
Faça o mesmo para $flag2
Pronto, eu fiz tudo isso em um netplay zerado e deu certo! Por favor, façam com cuidado antes de virem postar erros que foram cometidos por vocês!
Criado por RD12