Desenhar a bandeira da Guilda

    jiraya
    jiraya
    Administrador
    Administrador

    Mensagens : 1299
    Credibilidade : 54

    Desenhar a bandeira da Guilda Empty Desenhar a bandeira da Guilda

    Mensagem por jiraya em Dom Jan 20, 2013 7:47 pm

    [Autor: RD12]


    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:
    Desenhar a bandeira da Guilda 2XVFbK6

    Desenhar a bandeira da Guilda TOldL8o


    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
    Apague e substitue por este:


    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)
    Apague e coloque este no lugar:

    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

      Data/hora atual: Dom Ago 18, 2019 8:30 am