Level Ranking 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.

Level Ranking

+20
Haseo
Doubleacont
srgeh01
Adanrox
wiferdgot
Ero-Sennin
agaceli1
Luizkaio100
Pablo Kawan
urbios
bielmegatrinf
Maephel
leoXP
Jonny
Paulo Soreto
GallighanMaker
Hashirama
Valentine
Komuro Takashi
blackcrow
24 participantes

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

Ir para baixo

Level Ranking Empty Level Ranking

Mensagem por blackcrow Qua Nov 26, 2014 10:04 pm

Alguns membros pediram esse script e decidi fazer para expandir meu conhecimento e também contribuir para o fórum.

Script


- A janela que exibe o ranking possuí "páginas", onde em cada página é exibida uma lista com 10 nicks no ranking.
- Se o arquivo do ranking não foi encontrado ou não pode ser lido no server, será exibida a mensagem Ranking indisponível na janela do ranking.
- Enquanto o ranking é carregado, será exibida a mensagem Loading... na janela.
- Se o jogador excluir um personagem da conta, esse personagem será excluído automaticamente do ranking.
- O ranking será salvo na pasta Rank(no server) em um arquivo de texto nomeado ranking, salvos nesse formato: level:nome,level:nome,...

Imagens



Spoiler:


Instalação


* Netplay

- Cole o script acima do main:
Código:
#===============================================================================
# * Level Ranking - Netplay Master 4.9
#-------------------------------------------------------------------------------
# Autor       blackcrow
# Versão      alpha - 26/11/2014
# Original de www.aldeiarpg.com
#===============================================================================
class Window_Rank < Window_Base
  
  def initialize
    super(25,35,190,256)
    self.contents = Bitmap.new(158,228)
    self.back_opacity = 200
    self.z = 9999
    self.visible = false
    self.active = false
    @title = Title.new(self,'Ranking')
    @nextb = Button.new(self,134,220,'>>'){next_page}
    @prevb = Button.new(self,14,220,'<<'){prev_page}
    @loading = false
    @dragable = true
    @closable = true
  end
  
  def update
    if @loading and Network::Main.rank
      @loading = false
      load
    end
    super
    @title.update
  end
  
  def request
    @nextb.visible = false
    @nextb.active = false
    @prevb.visible = false
    @prevb.active = false
    self.contents.clear
    self.contents.draw_text(0,28,158,64,'Loading...',1)
    @loading = true
    Network::Main.request_rank(50)
  end
  
  def load
    data = Network::Main.rank
    if data != '0'
      @list = data.split(',')
      @pages = (@list.size.to_f/10.0).ceil
      @index = 1
      if @pages > 1
        @nextb.visible = true
        @nextb.active = true
      end
      refresh
    else
      self.contents.clear
      self.contents.draw_text(0,28,158,64,'Ranking indisponível',1)
    end
  end
  
  def next_page
    @index += 1
    if @index == @pages
      @nextb.visible = false
      @nextb.active = false
    end
    unless @prevb.visible
      @prevb.visible = true
      @prevb.active = true
    end
    refresh
  end
  
  def prev_page
    @index -= 1
    if @index == 1
      @prevb.visible = false
      @prevb.active = false
    end
    unless @nextb.visible
      @nextb.visible = true
      @nextb.active = true
    end
    refresh
  end
  
  def refresh
    self.contents.clear
    lim = 10*@index
    y = 0
    for i in lim-10...@list.size
      break if i == lim
      sep = @list[i].index(':')
      self.contents.draw_text(0,y*16,158,64,sprintf("%s. %s",(i+1).to_s,@list[i][sep+1..-1]))
      self.contents.draw_text(0,y*16,158,64,sprintf("Lv. %s",@list[i][0..sep-1]),2)
      y += 1
    end
    self.contents.draw_text(0,182,158,64,sprintf("Pag. %s de %s",@index.to_s,@pages.to_s),1)
  end
end
#===============================================================================
# ** Scene_Map
#===============================================================================
class Scene_Map
  
  alias alias_main_draw     main_draw
  alias alias_update        update
  alias alias_dispose       dispose
  alias alias_windows_area? windows_area?
  
  def main_draw
    @rank_window = Window_Rank.new
    @rank_icon = Icon.new(nil,'rank','Ranking',310,444,'Ranking(R)'){@rank_window.visible=true;@rank_window.active=true;@rank_window.request}
    alias_main_draw
  end
  
  def windows_area?
    return unless $scene.is_a?(Scene_Map)
    return true if @rank_window.visible and @rank_window.in_area?
    alias_windows_area?
  end
  
  def update
    @rank_icon.update
    @rank_window.update if @rank_window.visible
    if Input.triggerd?(Input::Letters['R'])
      unless box_active
        unless @rank_window.visible
          @rank_window.visible = true
          @rank_window.active = true
          @rank_window.request
        else
          @rank_window.visible = false
          @rank_window.active = false
        end
      end
    end
    alias_update
  end
  
  def dispose
    @rank_icon.dispose
    @rank_window.dispose
    alias_dispose
  end
end
#===============================================================================
# ** Game_Actor
#===============================================================================
class Game_Actor < Game_Battler
  
  alias alias_level level=
  
  def level=(level)
    alias_level(level)
    Network::Main.socket.send("<41a>1,#{level}:#{@name}\n") if $scene.is_a?(Scene_Map) and level >= 10
  end
  
end
#===============================================================================
# ** Network
#===============================================================================
module Network
  
  class Main
    
    class << self
      
      alias alias_update_ingame update_ingame
      
      def update_ingame(line)
        case line
          when /<41>(.*)<\/41>/
            unless $1 == ''
              @rank = $1
            else
              @rank = '0'
            end
          return true
        end
        alias_update_ingame(line)
      end
    
      def rank
        @rank
      end
      
      def request_rank(qt)
        @rank = nil
        @socket.send("<41>#{qt}\n")
      end
    end
  end
end
- No script Window_Delete procure o método delete_char e abaixo de:
Código:
return if Account.character[$scene.select_char_id-1] == nil
Adicione:
Código:
Network::Main.socket.send("<41a>2,#{Account.character[$scene.select_char_id-1].name}\n") if Account.character[$scene.select_char_id-1].level >= 10
- Salve essa imagem Level Ranking AjEjrrW (ou outra) na pasta Icons com o nome rank.

* Servidor

- Na pasta do servidor crie uma nova pasta chamada Rank.
- No script functions.lua adicione o código abaixo antes do penúltimo end do script.
Código:
-------------------------------
-- Level Ranking - Server side
-- By blackcrow
-------------------------------
-- Update ranking
elseif cmd == "<41a>" then
  do
    data = string.gsub(data,"<41a>","")
    local f = io.open("Rank/ranking.txt","r")
    if string.sub(data,1,1) == '1' then
      if not f then
        data = string.sub(data,3)
        f = io.open("Rank/ranking.txt","w")
        f:write(data..',')
        f:close()
        return
      end
      local buff = f:read("*all")
      f:close()
      local sep = string.find(data,':')
      local char = string.sub(data,sep+1)
      local lvl = string.sub(data,3,sep-1)
      local list = {}
      local find = true
      local i = 0
      for lv, ch in string.gmatch(buff,"(%d+):(%w+),") do
        if find and char == ch then
          lv = lvl
          find = false
        end
        list[ch] = tonumber(lv)
      end
      if find then
        list[char] = tonumber(lvl)
      end
      local levels = {}
      for ch in pairs(list) do
        i = i + 1
        levels[i] = list[ch]
      end
      table.sort(levels,function(a,b) return a > b end)
      f = io.open("Rank/ranking.txt","w")
      for i=1, #levels do
        for ch, lv in pairs(list) do
          if lv == levels[i] then
            f:write(lv..':'..ch..',')
            list[ch] = nil
            break
          end
        end
      end
      f:close()
    else
      if not f then return end
      local buff = f:read("*all")
      f:close()
      data = string.sub(data,3)
      buff = string.gsub(buff,"%d+:"..data..',',"")
      f = io.open("Rank/ranking.txt","w")
      f:write(buff)
      f:close()
    end
  end
--
-- Load ranking
elseif cmd == "<41>" then
  do
    data = string.gsub(data,"<41>","")
    local f = io.open("Rank/ranking.txt","r")
    if not f then
      NP():SendToUser(user.id,"<41>0</41>\n")
      return
    end
    local buff = f:read("*all")    
    f:close()
    local qt = tonumber(data)
    local ranking = {}
    local i = 0
    for rank in string.gmatch(buff,"([^,]+)") do
      i = i + 1
      ranking[i] = rank
      if i == qt then
        break
      end
    end
    NP():SendToUser(user.id,"<41>"..table.concat(ranking,',').."</41>\n")
  end
--

Configuração


- Você pode configurar quantos rankings serão exibidos/carregados, para isso procure a linha:
Código:
Network::Main.request_rank(50)
Basta mudar o valor entre parênteses.
- Também pode alterar o level mínimo para que o jogador seja listado no ranking, para isso procure a linha:
Código:
Network::Main.socket.send("<41a>1,#{level}:#{@name}\n") if $scene.is_a?(Scene_Map) and level >= 10
Mude o valor que está na condição level >= 10 ou remova essa condição para permitir qualquer level. Também precisa alterar essa condição no script Window_Delete, nele procure a linha:
Código:
Network::Main.socket.send("<41a>2,#{Account.character[$scene.select_char_id-1].name}\n") if Account.character[$scene.select_char_id-1].level >= 10
Coloque o mesmo valor da condição do passo anterior em .level >= 10 ou remova if Account.character[$scene.select_char_id-1].level >= 10


Notas


- Coloque no máximo 70 ranks para serem carregados, pois o script no server ainda não compacta os dados para serem enviados ao usuário.

Créditos


blackcrow - Criador


Última edição por blackcrow em Qui Nov 27, 2014 12:21 pm, editado 2 vez(es)
blackcrow
blackcrow
Semi-Experiente
Semi-Experiente

Mensagens : 111
Créditos : 41

Ir para o topo Ir para baixo

Level Ranking Empty Re: Level Ranking

Mensagem por Komuro Takashi Qui Nov 27, 2014 6:50 am

Parabéns Crow sempre ajudando você é um Bom Scripter...veio como que não queria nada e hoje ajuda muito...

@off-topic : consegui arrumar o pet global plug em play com seu script class << self só agora que eu entendi essa funcionalidade Obrigado.

_________________
Level Ranking Takashi_komuro_by_minato8-d51g9o4

Paga um café? Patreon
Komuro Takashi
Komuro Takashi
Colaborador
Colaborador

Mensagens : 1047
Créditos : 130

Ir para o topo Ir para baixo

Level Ranking Empty Re: Level Ranking

Mensagem por Valentine Qui Nov 27, 2014 8:03 am

Muito bom cara

+ 1 crédito
Valentine
Valentine
Administrador
Administrador

Medalhas : Level Ranking ZgLkiRU
Mensagens : 5345
Créditos : 1164

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

Level Ranking Empty Re: Level Ranking

Mensagem por Hashirama Qui Nov 27, 2014 11:27 am

Bem bacana mano
+1Crédito

_________________
Apoia nosso projeto? use nossa assinatura
Hashirama
Hashirama
Membro de Honra
Membro de Honra

Mensagens : 413
Créditos : 133

Ir para o topo Ir para baixo

Level Ranking Empty Re: Level Ranking

Mensagem por GallighanMaker Qui Nov 27, 2014 11:32 am

Parabéns blackcrow, chegou do nada e é muito bacana com a galera, sempre ajudando e ótimo script, muita gente precisa disso em seus jogos. +1 credito. Só faltou uma print de como fica o Ranking Very Happy abraço.

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

Medalhas : Level Ranking ZgLkiRU
Mensagens : 985
Créditos : 102

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

https://kingsland-online.com/

Ir para o topo Ir para baixo

Level Ranking Empty Re: Level Ranking

Mensagem por blackcrow Qui Nov 27, 2014 12:24 pm

Tá aí os prints.
Um ranking é algo essencial para um jogo.
blackcrow
blackcrow
Semi-Experiente
Semi-Experiente

Mensagens : 111
Créditos : 41

Ir para o topo Ir para baixo

Level Ranking Empty Re: Level Ranking

Mensagem por Paulo Soreto Qui Nov 27, 2014 12:55 pm

Não tive oportunidade de analisar os códigos, mas pelo que vi você fez (muito bem) uso do servidor da forma correta, deixando para o client apenas a renderização sem ter que processar as informações, re-organizar e tal.
Espero que esse script sirva de inspiração e modelo para os que querem criar sistemas para o netplay.

_________________
Level Ranking FwYnoXI
Paulo Soreto
Paulo Soreto
Lenda
Lenda

Mensagens : 1980
Créditos : 367

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

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

Level Ranking Empty Re: Level Ranking

Mensagem por Jonny Qui Nov 27, 2014 2:35 pm

muy bien blackcrow, veo que las dudas que haclaramos el otro dia sirbieron de algo para crear el sistema Very Happy

PD : Tambien puede ser mejorado el script, no use una windo_normal, use una window_selectabel, queda mas mejor Very Happy

PD2 : Tambien usted puede modificar el rankin para guild, para os player que estan baneados, ou son  VIP's o los admin, ecet... Very Happy

_________________
Spoiler:


Level Ranking KVIdx
Jonny
Jonny
Aldeia Friend
Aldeia Friend

Medalhas : Level Ranking Trophy11Level Ranking 9P5Gx
Mensagens : 1936
Créditos : 327

http://fanmakers.ultimaterpg.net/

Ir para o topo Ir para baixo

Level Ranking Empty Re: Level Ranking

Mensagem por leoXP Qui Nov 27, 2014 6:30 pm

Gostei +1 cred eu tava precisando dele vlw
leoXP
leoXP
Ocasional
Ocasional

Mensagens : 219
Créditos : 5

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

Ir para o topo Ir para baixo

Level Ranking Empty Re: Level Ranking

Mensagem por blackcrow Sex Nov 28, 2014 11:10 am

Não vejo o por que de usar uma Window_Selectable, seria mais processamento em vão.

Obrigado a todos pelos comentários.
blackcrow
blackcrow
Semi-Experiente
Semi-Experiente

Mensagens : 111
Créditos : 41

Ir para o topo Ir para baixo

Level Ranking Empty Re: Level Ranking

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

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

Ir para o topo

- Tópicos semelhantes

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