關於部落格
RPG製作大師XP腳本為主要更新

RPG製作大師VX腳本為其次更新

RPG製作大師VX_Ace目前不考慮

RPG製作大師MV腳本完全沒打算

留言完建議重新整理看看是否顯示

目前不處理本舖外腳本的相關問題

其他相關事項請觀看規定注意事項

本舖未來的經營計畫與VA的支援




var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-37462754-1']);
_gaq.push(['_trackPageview']);

(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

  • 305763

    累積人氣

  • 6

    今日人氣

    0

    追蹤人氣

【腳本】排行榜


使用方法
打開腳本編輯器,對腳本「Main」按下右鍵,選擇插入,會出現1個空白腳本
在空白腳本內貼上以下腳本:
RPG Maker XP 適用
module Sword
  SWORD_RANK_HELP = []
#=======================================
#★魔劍工舖 - 排行榜
#轉貼腳本請著名出處:
http://blog.yam.com/a870053jjkj/article/24427018
#如果採用在遊戲中,看你高興是否顯示腳本出處,但嚴禁說是自己寫的腳本!!
#=======================================
#● 使用者自定設置

SWORD_RANK_TIME = 2 # 時間類型,0為遊戲時間、1為現實時間、2為現實日期時間
SWORD_RANK_MAX = 20 # 設定要記錄前幾名的排行數目
SWORD_RANK_SMAX = 20 # 設定要顯示前幾名的排行數目
SWORD_RANK_ROLL = 2 # 設定當按住方向鍵滾動排名顯示時,每幀移動的像素
SWORD_RANK_YCOR = -16 # 顯示排行內容的窗口的Y座標修正,負數為往上調整
SWORD_RANK_REPE = 1 # 當排名一樣時,是否視為同個排名,0表示不視

SWORD_RANK_CHAM = [255, 255, 0] # 第1名的文字顏色,[紅 , 綠, 藍]
SWORD_RANK_SECO = [200, 200, 200] # 第2名的文字顏色,[紅 , 綠, 藍]
SWORD_RANK_THIR = [187, 121, 0] # 第3名的文字顏色,[紅 , 綠, 藍]
SWORD_RANK_LAST = [255, 255, 255] # 第4名以後的文字顏色,[紅 , 綠, 藍]
SWORD_RANK_DESI = [255, 100, 100] # 被指定使用的排名的文字顏色,[紅 , 綠, 藍]
#設定上方說明窗口的文字,同時有開通多個排行榜的作用(未開通登陸會錯誤!!)
#可自行新增多個SWORD_RANK_HELP[編號] = "說明窗口內容"

SWORD_RANK_HELP[1] = "撿東西小遊戲排行榜"
SWORD_RANK_HELP[2] = "測試用的排行"
SWORD_RANK_HELP[3] = "測試用的排行之二"
#=======================================
#呼叫方法:$scene = Sword_Ranking.new(編號)
 
#登陸排名:$game_system.sword_ranking(編號, 角色編號, 分數)
#[角色編號] 如果是字串,表示名稱為該字串的內容
 
#刪除排行:$game_system.sword_ranking_delete(編號, 排名)
#[排名] 為0表示刪除所有的排名
 
#推測排名:$game_system.sword_ranking?(編號, 分數)
#返回值 - 這個分數會在第幾名,沒進排名顯示 SWORD_RANK_MAX + 1 的數值
 
#排名變色:$game_system.sword_ranking_designate(編號, 排名)
#[排名] 為0表示不使用
 
#每次修改此腳本,建議重新開始新遊戲,不建議修改後讀取遊戲進度
#詳細設置說明請參考:
http://blog.yam.com/a870053jjkj/article/24427018
#=======================================
end
 
#☆ 定義儲存排行榜記錄的變量
class Game_System
  include Sword
  attr_accessor :sword1_ranking
  alias sword3_initialize initialize
  def initialize
    sword3_initialize
    # 產生每個排行榜的記錄變量
    @sword1_ranking = []
    for i in 1...SWORD_RANK_HELP.size
      @sword1_ranking[i] = Array.new(SWORD_RANK_MAX){ ["", "", -1] }#[名稱,時間,分數]
    end
    @sword1_ranking[0] = [0, 0] # 用來記錄指定變色的排名
  end
  # 登陸分數的方法
  def sword_ranking(number, name, fraction) # number:編號    name:名稱    fraction:分數
    # 如果是數值,就依照編號指定的角色名稱
    name.is_a?(Integer) ? name = $game_actors[name].name : 0
    a = 0
    for i in @sword1_ranking[number]
      if fraction > i[2]
        # 獲取時間
        case SWORD_RANK_TIME
        when 0 # 遊戲時間
          total_sec = Graphics.frame_count / Graphics.frame_rate
          hour = total_sec / 60 / 60
          min = total_sec / 60 % 60
          sec = total_sec % 60
          text = sprintf("%02d:%02d:%02d", hour, min, sec)
        when 1 # 現實時間
          text = Time.now.strftime("%H:%M:%S")
        when 2 # 現實日期時間
          text = Time.now.strftime("%y/%m/%d-%H:%M:%S")
        end
        # 插入新的排名資料
        @sword1_ranking[number].insert(a, [name, text, fraction])
        @sword1_ranking[number].pop
        break
      end
      a += 1
    end
  end
  # 獲取推測的排名的方法
  def sword_ranking?(number, fraction) # number:編號    fraction:分數
    a = 0
    for i in @sword1_ranking[number]
      a += 1
      if fraction > i[2] and SWORD_RANK_REPE == 0
        return a
      elsif fraction >= i[2] and SWORD_RANK_REPE == 1
        return a
      end
    end
    # 如果推測沒有進入排行,返回最後顯示的排名在減1
    return SWORD_RANK_MAX + 1
  end
  # 刪除排名內容的方法
  def sword_ranking_delete(number, ranking) # number:編號    ranking:排名
    if ranking == 0 # 刪除第0名的場合(表示全部清空)
      @sword1_ranking[number] = Array.new(SWORD_RANK_MAX){ ["", "", -1] }
    else # 刪除指定的排名的場合
      @sword1_ranking[number].delete_at(ranking-1)
      @sword1_ranking[number][SWORD_RANK_MAX] = ["", "", -1]
    end
  end
  # 指定排名內容變色的方法
  def sword_ranking_designate(number, ranking)
    @sword1_ranking[0] = [number, ranking]
  end
end
 
#☆ 顯示排行榜的用語
class WSword_Ranking < Window_Base
  include Sword
  def initialize
    super(0, 64, 640, 416)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  def refresh
    self.contents.clear
    # 用語
    self.contents.font.color = system_color
    self.contents.draw_text(4, 0, 50, 32, "排行", 1)
    self.contents.draw_text(54, 0, 200, 32, "名稱", 1)
    self.contents.draw_text(279, 0, 175, 32, "時間", 1)
    self.contents.draw_text(453, 0, 150, 32, "分數", 1)
  end
end
 
#☆ 顯示排行榜的內容(防止用語滾動而分開)
class WSword_Ranking1 < Window_Base
  include Sword
  def initialize(number)
    # 窗口位置修正
    y = 107 + SWORD_RANK_YCOR
    cy = 373
    if SWORD_RANK_YCOR < 0
      a = SWORD_RANK_YCOR - SWORD_RANK_YCOR - SWORD_RANK_YCOR
      cy += a
    elsif SWORD_RANK_YCOR > 0
      a = SWORD_RANK_YCOR.abs
      cy += a
    end
    super(0, y, 640, cy)
    # 計算箭頭是否出現
    b = 0 # 記錄循環的次數
    c = 0 # 記錄顯示的排名數
    for i in $game_system.sword1_ranking[number]
      b += 1
      if i == ["", "", -1]
        break
      else
        c += 1
      end
    end
    self.z += 1 and self.opacity = 0
    c == 0 ? c = 1 : 0
    self.contents = Bitmap.new(width - 32, 32 * c)
    ranking_oy(32 * c)
    refresh(number)
  end
  # 傳遞文字Y座標給顯示的畫面的方法
  def ranking_oy(oy = -1)
    if oy == -1
      return @oy
    end
    @oy = oy
  end
  def refresh(number)
    self.contents.clear
    # 內容
    a = 0 # 修正排名數值
    y = 0 # 用來計算下1行的位置
    for i in 0..SWORD_RANK_SMAX-1
      a += 1
      # 其他名次的顏色
      self.contents.font.color = Color.new(SWORD_RANK_LAST[0],
      SWORD_RANK_LAST[1], SWORD_RANK_LAST[2])
      # 變更第1名的顏色
      a == 1 ? self.contents.font.color = Color.new(SWORD_RANK_CHAM[0],
      SWORD_RANK_CHAM[1], SWORD_RANK_CHAM[2]) : 0
      # 變更第2名的顏色
      a == 2 ? self.contents.font.color = Color.new(SWORD_RANK_SECO[0],
      SWORD_RANK_SECO[1], SWORD_RANK_SECO[2]) : 0
      # 變更第3名的顏色
      a == 3 ? self.contents.font.color = Color.new(SWORD_RANK_THIR[0],
      SWORD_RANK_THIR[1], SWORD_RANK_THIR[2]) : 0
      # 變更指定的顏色
      if $game_system.sword1_ranking[0][0] == number and
      $game_system.sword1_ranking[0][1] == a
        self.contents.font.color = Color.new(SWORD_RANK_DESI[0],
      SWORD_RANK_DESI[1], SWORD_RANK_DESI[2])
      end
      ranking = $game_system.sword1_ranking[number][i] # 獲取內容
      # 如果無排名資料就不顯示排名數值
      if ranking[0] == "" and ranking[1] == ""
        b = ""
      else
        if SWORD_RANK_REPE == 0
          b = a
        else
          ii = 0 # 用來記錄目前在第前幾個排名
          loop do
            ii += 1
            break if i - ii < 0
            break if ranking[2] != $game_system.sword1_ranking[number][i-ii][2]
          end
          b = a - ii + 1
        end
      end
      self.contents.draw_text(4, y, 50, 32, b.to_s, 1) # 排名
      self.contents.draw_text(54, y, 200, 32, ranking[0], 1) # 名稱
      self.contents.draw_text(279, y, 175, 32, ranking[1], 1) # 時間
      # 如果無排名資料就不顯示排名分數
      if ranking[0] == "" and ranking[1] == ""
        b = ""
      else
        b = ranking[2].to_s
      end
      self.contents.draw_text(453, y, 150, 32, b, 1) # 分數
      y += 32
    end
  end
end
 
class Sword_Ranking
  include Sword
  # 用來獲取指定的排行榜的方法
  def initialize(number)
    @number = number
  end
  def main
    # 產生窗口
    @help_window = Window_Help.new
    @help_window.set_text(SWORD_RANK_HELP[@number])
    @ranking_wsword = WSword_Ranking.new
    @ranking1_wsword = WSword_Ranking1.new(@number)
    Graphics.transition
    # 主循環
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    # 關閉窗口
    @help_window.dispose
    @ranking_wsword.dispose
    @ranking1_wsword.dispose
  end
  def update
    if Input.trigger?(Input::C) or Input.trigger?(Input::B)
      $game_system.se_play($data_system.decision_se)
      $scene = Scene_Map.new
    end
    if Input.press?(Input::UP)
      @ranking1_wsword.oy > 0 ? @ranking1_wsword.oy -= SWORD_RANK_ROLL : 0
    end
    if Input.press?(Input::DOWN)
      a = @ranking1_wsword.ranking_oy - 320 - 16 + SWORD_RANK_YCOR
      @ranking1_wsword.oy < a ? @ranking1_wsword.oy += SWORD_RANK_ROLL : 0
    end
  end
end
 
RPG Maker VX 適用方法
1.腳本第120行發現【super(0, 64, 640, 416)
改成【super(0, 54, Graphics.width, Graphics.height-54)
2.腳本第129行發現以下腳本
self.contents.draw_text(54, 0, 200, 32, "名稱", 1)
self.contents.draw_text(279, 0, 175, 32, "時間", 1)
self.contents.draw_text(453, 0, 150, 32, "分數", 1)

改成以下腳本
self.contents.draw_text(24, 0, 175, 32, "名稱", 1)
self.contents.draw_text(189, 0, 175, 32, "時間", 1)
self.contents.draw_text(363, 0, 150, 32, "分數", 1)

3.腳本第141行發現【cy = 373】改成【cy = 306
4.腳本第149行發現【super(0, y, 640, cy)
改成【super(0, y, Graphics.width, cy)
5.腳本第216行發現以下腳本
self.contents.draw_text(4, y, 50, 32, b.to_s, 1) # 排名
self.contents.draw_text(54, y, 200, 32, ranking[0], 1) # 名稱
self.contents.draw_text(279, y, 175, 32, ranking[1], 1) # 時間

改成以下腳本
self.contents.draw_text(4, y, 50, 32, b.to_s, 1) # 排名
self.contents.draw_text(24, y, 175, 32, ranking[0], 1) # 名稱
self.contents.draw_text(189, y, 175, 32, ranking[1], 1) # 時間

6.腳本第225行發現【self.contents.draw_text(453, y, 150, 32, b, 1) # 分數
改成【self.contents.draw_text(363, y, 150, 32, b, 1) # 分數
7.腳本第261行發現【$game_system.se_play($data_system.decision_se)
改成【Sound.play_decision
8.腳本第268行發現【a = @ranking1_wsword.ranking_oy - 320 - 16 + SWORD_RANK_YCOR
改成【a = @ranking1_wsword.ranking_oy - 256 - 16 + SWORD_RANK_YCOR
 

 
設置方法
可以在事件中的 [腳本] 事件或是腳本編輯器中使用(但還是要看位置)
呼叫排行榜畫面
$scene = Sword_Ranking.new(編號)
編號:要呼叫的排行榜的編號,簡單來說就是用來分辨是要呼叫哪一個遊戲的排行榜
   當然排行榜必須要先開通後才可以呼叫,這個在下方的使用者自定設置會在說明
 
登陸分數到排行榜中
# 指定角色編號的名稱
$game_system.sword_ranking(編號, 角色編號, 分數)
# 直接指定名稱
$game_system.sword_ranking(編號, '名稱', 分數)
編號:設定要將分數登入在哪個編號的排行榜中,一樣只能選擇已經開通的排行榜
角色名稱:指定一個角色編號,則就會依照那個角色編號的名稱來登陸排行榜
     配合事件 [名稱輸入的處理] ,就變成了玩家自己輸入名字登入排行榜中
名稱:如果內容被 ' 符號包圍起來表示直接使用被包起來的內容做為名稱
分數:想要登陸排行榜的分數,登陸後系統會依照分數的多寡自動排入第幾名中
 
刪除排名資料
$game_system.sword_ranking_delete(編號, 排名)
編號:選擇要刪除排名的排行榜的編號,一樣只能選擇已經開通的排行榜
排名:指定要刪除第幾名的資料,然後系統會自動調整,將刪除的資料由後面的來補充
   簡單來說總共有1~4名的紀錄,如果你把第2名給刪了,則原本的第3第4名往前
   變成原本的第3名變成第2名,原本的第4名變成第3名,依此類推
   如果排名指定為0,就視同將所有的排名記錄全部刪除,請小心使用!!
 
推測這分數登入到排行榜的名次
$game_system.sword_ranking?(編號, 分數)
編號:選擇要推算的排行榜的編號,一樣只能選擇已經開通的排行榜
分數:想要推測的分數,則會依照登陸排行榜的方式,算出這個分數會在第幾名
   但不會實際登入在排行榜中,這只是讓你事先知道這分數會在第幾名而已
如果指定的分數會成功進入排行榜,則這個腳本會返回推測出來的排名數值
如果沒進入排行榜,則這個腳本會返回使用這自定設置的SWORD_RANK_MAX+1的數值
這個功能主要是用於在對話框顯示的內容,此外必須在登陸之前使用,不然會多進一名
事件使用範例:
註釋:判斷變數0001的數值登入到1號排行榜會第幾名
  :最右邊<=右邊的數值,請設定成使用者自定設置
  :SWORD_RANK_MAX或SWORD_RANK_SMAX
  
:一樣的數值即可
條件分歧:腳本:$game_system.sword_ranking?(1, $game_variables[1]) <= 10
 註釋:有進入前10名的情況(因最右邊的 <= 右邊為10)
 :  :[腳本]事件會強制換行,所以先將變數0001存入a
 :  :然後計算出變數0001在排行榜是第幾名並存入a
 :  :最後用變數0002代入a,變數0002就存入排名了

 ◆腳本:a = $game_variables[1]
 :  :a = $game_system.sword_ranking?(1, a)
 :  
$game_variables[2] = a
 註釋:在對話框中顯示變數0002的數值
 ◆文章:你的分數可以進入到第V[2]名
 

除此以外的場合
 ◆註釋:沒有進入前10名的情況
 ◆文章:很抱歉你沒有入圍
 

分歧結束
 
將指定的排名變色
$game_system.sword_ranking_designate(編號, 排名)
編號:選擇要變色的排行榜的編號,一樣只能選擇已經開通的排行榜
排名:指定1個排名,則那個排名將會變更為SWORD_RANK_DESI設置的顏色
   如果排名指定0就表示恢復成原本的顏色
這個功能主要是實現,標示玩家剛剛進入的排名換色,方便玩家找尋最新進入的排名
被指定的排名會無視其他設置的顏色強制變色,可配合推測這分數登入到排行榜的名次
使用範例:
腳本:a = $game_variables[1]
  :a = $game_system.sword_ranking?(1, a)
  $game_system.sword_ranking_designate(1, a)

  
$game_variables[2] = a
題外話:打字打到這個部分我竟然花了2小時,使用者自定設置都還沒寫耶= =
 
 
使用者自定設置說明
SWORD_RANK_TIME = 2
設定登入排行記錄時,登入的時間種類
以下是設置各種數值的效果:
0:遊戲時間 - 00:03:35
1:現實時間(不準確...) - 13:50:57
2:現實日期時間 - 09/10/6-08:05:32

 
SWORD_RANK_MAX = 20
設定要記錄的排名總數目,如果設置10,則11後面的排名都會永久刪除
當然記錄的排名越大,則系統和存檔的大小都會變大,請特別注意!!
 
SWORD_RANK_SMAX = 20
顯示排行的數目,SWORD_RANK_MAX是記錄資料,而這裡負責控制顯示的資料
這例如果設置為12,就算有100個排名記錄,也只會顯示前12名的排行(含12)
 
SWORD_RANK_ROLL = 2
這裡設置的是...當窗口顯示不下所有要顯示的排名時(也就會出現小箭頭標示)
設定按下方向鍵(上或下)時,按住期間每幀時間移動的像素
如果此設置數值越大,則排名的滾動速度就會越快
 
SWORD_RANK_YCOR = -16
如果對排名顯示的位置不滿意,可以在這裡修改Y座標
正數為將顯示排名的內容往下移,負數(數值左邊加上 - 符號為負數)為往上移
在這裡我設定-16的原因是因為我認為這樣比較好看,但是上方的箭頭會在不尋常的位置
如果設置0的話,就不會有這個問題,所以還是以0為實際腳本預設位置好了

 
SWORD_RANK_REPE = 1
設定當分數一樣時,是否視為同個排名,0表示不視為,1(或其他數值)表示視為
由於一樣會受到SWORD_RANK_SMAX的顯示上限控制
所以假設有3個分數為100,1個分數為90,則排名為:
排名:1        分數:100
排名:1        分數:100
排名:1        分數:100
排名:4        分數:90
 
SWORD_RANK_CHAM = [255, 255, 0]
設定冠軍(第1名)顯示的顏色,不想使用就設置的和SWORD_RANK_LAST設置一樣
顏色的設置從左邊開始為紅、綠、藍,以下舉裡幾種顏色給你參考:
[0, 0, 0]:黑色
[255, 255, 255]:白色
[255, 0, 0]:紅色
[0, 255, 0]:綠色
[0, 0, 255]:藍色
[255, 128, 0]:橘色
[255, 0, 255]:紫色
[255, 128, 192]:粉紅色
[255, 255, 0]:黃色
詳細設置方法可以參考事件「變更畫面色調」
 
SWORD_RANK_SECO = [200, 200, 200]
設定亞軍(第2名)顯示的顏色,不想使用就設置的和SWORD_RANK_LAST設置一樣
顏色設置方式請參考上方的SWORD_RANK_CHAM
 
SWORD_RANK_THIR = [187, 121, 0]
設定季軍(第3名)顯示的顏色,不想使用就設置的和SWORD_RANK_LAST設置一樣
顏色設置方式請參考上方的SWORD_RANK_CHAM
 
SWORD_RANK_LAST = [255, 255, 255]
設定殿軍和以後名次(第4名含以後)的顯示的顏色
顏色設置方式請參考上方的SWORD_RANK_CHAM
 
SWORD_RANK_DESI = [255, 100, 100]
使用將指定的排名變色的功能,其變色的顏色為此設置的內容
顏色設置方式請參考上方的SWORD_RANK_CHAM
 
SWORD_RANK_HELP[編號] = "說明窗口內容"
開通排行榜與指定上方那條說明窗口的內容,每增加此設置(都必須設置不同編號)
就能開通多個排行榜,所以可自行增加SWORD_RANK_HELP[編號] = "說明窗口內容"
例如你設置為以下:
SWORD_RANK_HELP[1] = "撿東西小遊戲排行榜" #產生編號1的排行榜
SWORD_RANK_HELP[3] = "射擊遊戲排行"
#產生編號3的排行榜
這樣就開通的編號1和編號3的排行榜,但是編號2由於沒設置所以沒產生
這樣就可以使用上方介紹的設置方法,來指定編號修改指定編號的排行榜內容
不同編號的排行榜不會被干涉,所以1個腳本可以分成很多個遊戲的排行榜是可行的
 
 
範例下載
下載連接:檔案大小:233 KB檔案類型:RAR(內為RMXP遊戲壓縮安裝檔)
本人掃毒程式不是說很好,雖然目前沒看出什麼中毒跡象,但下載前建議先用掃毒程式查毒
☆有開通了3個排行榜,可以試試看這3個排行榜資料是不是不會受到干擾
☆使用者自定設置保持原樣(就是和上方的腳本的設置一樣)
☆範例中不包含2009/10/13的更新內容,但基本上只是少了1個功能而已,其實影響不大
☆左邊的NPC為給你直接輸入分數直接登入排行榜的測試
☆中央的NPC為使用在撿東西小遊戲的排行榜範例,含對話顯示第幾名、名稱輸入、排名變色
☆右邊的NPC會1次隨機產生20個分數登陸排名給你測試,每隨機產生都會清空所有排名
相簿設定
標籤設定
相簿狀態