Project1

标题: 请问下这个脚本要怎么用? [打印本页]

作者: skyboy1283    时间: 2013-10-11 15:04
标题: 请问下这个脚本要怎么用?
本帖最后由 skyboy1283 于 2013-10-11 16:55 编辑

RUBY 代码复制
  1. #==============================================================================
  2. # ■ VXAce-RGSS3-41 簡易メッセージ                           by Claimh
  3. #------------------------------------------------------------------------------
  4. #   マップ上に簡易メッセージを表示します。
  5. #------------------------------------------------------------------------------
  6. # ● 簡易メッセージ表示実行(イベント)
  7. # show_msg(type, msg, num)
  8. #    type  :項目番号
  9. #               0  .. msgの内容を表示(制御文字も使用可能)
  10. #               1  .. アイテムを入手(msgにアイテムID、numに個数を指定)
  11. #               2  .. 武器を入手(msgに武器ID、numに個数を指定)
  12. #               3  .. 防具を入手(msgに防具ID、numに個数を指定)
  13. #               4  .. スキルを習得(msgにスキルID, numにアクターIDを指定)
  14. #               5  .. レベルアップ(msgにアクターIDを指定)
  15. #               6  .. 加入(msgにアクターIDを指定)
  16. #               7  .. 離脱(msgにアクターIDを指定)
  17. #               8  .. お金を入手(msgに金額を入れる)
  18. #               20 .. クエスト開始(msgにIDを指定) ※「クエストシステム」必須
  19. #               21 .. クエスト完了(msgにIDを指定) ※「クエストシステム」必須
  20. #               22 .. 用語登録(msgにカテゴリ、numに用語IDを指定)※「用語辞典」必須
  21. #    msg   :表示文字、ID情報(アイテム等)など
  22. #    num   :個数(省略可能)
  23. #------------------------------------------------------------------------------
  24. # ● メッセージ表示の強制停止(全停止)
  25. # stop_msg
  26. #   ※強制停止中は解除されるまで簡易メッセージ表示を行いません。
  27. #     強制停止中にshow_msgが実行された場合はrestart_msg実行まで待たされます
  28. #------------------------------------------------------------------------------
  29. # ● メッセージ表示の強制停止解除
  30. # restart_msg
  31. #==============================================================================
  32.  
  33. module ShtMsg
  34.   # スキンタイプ
  35.   #    0 .. ウィンドウ
  36.   #    1 .. 半透明ブラックボックス
  37.   #    2 .. ピクチャ
  38.   SKIN = 1
  39.   # ウィンドウ背景の不透明度
  40.   OPACITY = 160
  41.   # ピクチャファイル(Graphics/System)
  42.   PICT = "msg_skin"
  43.  
  44.   # メッセージ矩形サイズ(x,yは未参照)
  45.   RECT = Rect.new(0, 0, 160, 20)
  46.   # 表示矩形(x,widthは未参照。yは最初のy位置, heightは表示する範囲)
  47.   VIEW = Rect.new(0, Graphics.height * 2 / 3, 0, Graphics.height / 3) # 下のほう
  48. #~   VIEW = Rect.new(0, 0, 0, Graphics.height / 3)  # 上のほう
  49.   # 表示位置(高さ)のずらし幅
  50.   OFST = 0
  51.  
  52.   # スライドイン方向(true:左端から / false:右端から)
  53.   SLD_DIR = false
  54.   # スライド時間
  55.   SLD_FRM = 8
  56.   # 表示ウェイト時間
  57.   WAIT = 100
  58.  
  59.   # 固有名の着色(色index)   0..normal_color
  60.   COLOR = 2
  61.   # フォントサイズ
  62.   FSZ = 14
  63.   # 文字描画開始X位置
  64.   STX = 4
  65.  
  66.   # SE音(鳴らさない場合はnilにする)
  67.   SE = RPG::SE.new("Chime2")
  68.  
  69.   # メッセージ表示と同時に本処理(アイテム入手等)を実行する
  70.   EXE = false
  71. end
  72.  
  73.  
  74.  
  75. #==============================================================================
  76. # ■ Game_Interpreter
  77. #==============================================================================
  78. class Game_Interpreter
  79.   #--------------------------------------------------------------------------
  80.   # ● 簡易メッセージ表示
  81.   #     type  : 項目番号
  82.   #     msg   : メッセージ
  83.   #     num   : 個数(省略可能)
  84.   #--------------------------------------------------------------------------
  85.   def show_msg(type, msg, num=0)
  86.     if SceneManager.scene_is?(Scene_Map)
  87.       SceneManager.scene.show_msg(type, msg, num)
  88.     end
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 簡易メッセージの強制停止
  92.   #--------------------------------------------------------------------------
  93.   def stop_msg
  94.     if SceneManager.scene_is?(Scene_Map)
  95.       SceneManager.scene.stop_msg
  96.     end
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● 簡易メッセージの強制停止解除
  100.   #--------------------------------------------------------------------------
  101.   def restart_msg
  102.     if SceneManager.scene_is?(Scene_Map)
  103.       SceneManager.scene.restart
  104.     end
  105.   end
  106. end
  107.  
  108.  
  109. #==============================================================================
  110. # ■ ShtMsg::Messenger
  111. #==============================================================================
  112. class ShtMsg::Messenger
  113.   #--------------------------------------------------------------------------
  114.   # ● オブジェクト初期化
  115.   #--------------------------------------------------------------------------
  116.   def initialize(type, msg, num)
  117.     @type = type; @msg = msg; @num = num
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # ● 簡易メッセージ表示内容
  121.   #--------------------------------------------------------------------------
  122.   def text
  123.     exe if ShtMsg::EXE
  124.     c = ShtMsg::COLOR
  125.     n = @num > 1 ? "#{@num}個" : ""
  126.     case @type
  127.     when 0;  return @msg
  128.     when 1;  return "\\C[#{c}]#{$data_items[@msg].name}\\C[0]を#{n}入手"
  129.     when 2;  return "\\C[#{c}]#{$data_weapons[@msg].name}\\C[0]を#{n}入手"
  130.     when 3;  return "\\C[#{c}]#{$data_armors[@msg].name}\\C[0]を#{n}入手"
  131.     when 4;  return "\\C[#{c}]#{$data_skills[@msg].name}\\C[0]を習得"
  132.     when 5;  return "\\C[#{c}]#{$game_actors[@msg].name}\\C[0]がレベルアップ"
  133.     when 6;  return "\\C[#{c}]#{$game_actors[@msg].name}\\C[0]が仲間になった"
  134.     when 7;  return "\\C[#{c}]#{$game_actors[@msg].name}\\C[0]が離脱した…"
  135.     when 8;  return "\\C[#{c}]#{@msg}#{Vocab::currency_unit}\\C[0]入手"
  136.     when 20; return "『\\C[#{c}]#{$game_system.quest[@msg].name}\\C[0]』開始"
  137.     when 21; return "『\\C[#{c}]#{$game_system.quest[@msg].name}\\C[0]』クリア"
  138.     when 22; return "新語『\\C[#{c}]#{$game_system.dictionary[@msg][@num].name}\\C[0]』"
  139.     end
  140.     return "type error<#{@type},#{@msg}>"
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● 本処理実行
  144.   #--------------------------------------------------------------------------
  145.   def exe
  146.     case @type
  147.     when 1;  $game_party.gain_item($data_items[@msg], @num) if @num > 0
  148.     when 2;  $game_party.gain_item($data_weapons[@msg], @num) if @num > 0
  149.     when 3;  $game_party.gain_item($data_armors[@msg], @num) if @num > 0
  150.     when 4;  $game_actors[@num].learn_skill(@msg) if @num > 0
  151.     when 5;  $game_actors[@msg].level_up
  152.     when 6;  $game_party.add_actor(@msg)
  153.     when 7;  $game_party.remove_actor(@msg)
  154.     when 8;  $game_party.gain_gold(@msg)
  155.     when 20; $game_system.quest[@msg].quest_start
  156.     when 21; $game_system.quest[@msg].quest_clear
  157.     when 22; $game_system.dictionary[@msg][@num].show_flg = true if @num > 0
  158.     end
  159.   end
  160. end
  161.  
  162. #==============================================================================
  163. # ■ Sprite_ShrtMsgrBack
  164. #==============================================================================
  165. class Sprite_ShrtMsgrBack < Sprite
  166.   #--------------------------------------------------------------------------
  167.   # ● オブジェクト初期化
  168.   #--------------------------------------------------------------------------
  169.   def initialize(x, y, z, bitmap)
  170.     super(nil)
  171.     self.bitmap = bitmap
  172.     self.x = x; self.y = y; self.z = z
  173.   end
  174. end
  175.  
  176. #==============================================================================
  177. # ■ Window_ShrtMsgr
  178. #==============================================================================
  179. class Window_ShrtMsgr < Window_Base
  180.   #--------------------------------------------------------------------------
  181.   # ● オブジェクト初期化
  182.   #--------------------------------------------------------------------------
  183.   def initialize(msg, x, y, back)
  184.     @count = 0
  185.     @phase = 0
  186.     super(x, y, ShtMsg::RECT.width, fitting_height(1))
  187.     self.opacity = 0
  188.     self.back_opacity = ShtMsg::OPACITY
  189.     [url=home.php?mod=space&uid=114926]@sprite[/url] = Sprite_ShrtMsgrBack.new(x, y+4, z-1, back) if ShtMsg::SKIN != 0
  190.     refresh(msg)
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # ● 解放
  194.   #--------------------------------------------------------------------------
  195.   def dispose
  196.     @sprite.dispose if ShtMsg::SKIN != 0
  197.     super
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ● X位置の設定
  201.   #--------------------------------------------------------------------------
  202.   def x=(x)
  203.     super(x)
  204.     @sprite.x = x if ShtMsg::SKIN != 0
  205.   end
  206.   #--------------------------------------------------------------------------
  207.   # ● Y位置の設定
  208.   #--------------------------------------------------------------------------
  209.   def y=(y)
  210.     super(y)
  211.     @sprite.y = y if ShtMsg::SKIN != 0
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # ● 行の高さを取得
  215.   #--------------------------------------------------------------------------
  216.   def line_height
  217.     ShtMsg::RECT.height
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ● 標準パディングサイズの取得
  221.   #--------------------------------------------------------------------------
  222.   def standard_padding
  223.     return 4
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ● フォント設定のリセット
  227.   #--------------------------------------------------------------------------
  228.   def reset_font_settings
  229.     change_color(normal_color)
  230.     contents.font.size = ShtMsg::FSZ
  231.     contents.font.bold = false
  232.     contents.font.italic = false
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # ● リフレッシュ
  236.   #--------------------------------------------------------------------------
  237.   def refresh(msg)
  238.     contents.clear
  239.     draw_text_ex(ShtMsg::STX, 0, msg.text)
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ● 簡易メッセージの強制停止
  243.   #--------------------------------------------------------------------------
  244.   def stop
  245.     update_phase while @phase == 0
  246.     @count = ShtMsg::WAIT / 2
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # ● フレーム更新
  250.   #--------------------------------------------------------------------------
  251.   def update
  252.     return if self.disposed?
  253.     super
  254.     update_phase
  255.   end
  256.   #--------------------------------------------------------------------------
  257.   # ● フレーム更新
  258.   #--------------------------------------------------------------------------
  259.   def update_phase
  260.     case @phase
  261.     when 0
  262.       @phase += 1 if update_slidein and update_fadein
  263.     when 1
  264.       @phase += 1 if (@count += 1) >= ShtMsg::WAIT
  265.     when 2
  266.       dispose if update_slideout and update_fadeout
  267.     end
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # ● フレーム更新 : スライドイン
  271.   #--------------------------------------------------------------------------
  272.   def update_slidein
  273.     w = ShtMsg::RECT.width / ShtMsg::SLD_FRM
  274.     if ShtMsg::SLD_DIR
  275.       return true if self.x >= 0
  276.       self.x += w
  277.       self.x = 0 if self.x >= 0
  278.     else
  279.       xx = Graphics.width - ShtMsg::RECT.width
  280.       return true if self.x <= xx
  281.       self.x -= w
  282.       self.x = xx if self.x <= xx
  283.     end
  284.     return false
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ● フレーム更新 : スライドアウト
  288.   #--------------------------------------------------------------------------
  289.   def update_slideout
  290.     w = ShtMsg::RECT.width / ShtMsg::SLD_FRM
  291.     if ShtMsg::SLD_DIR
  292.       xx = 0 - ShtMsg::RECT.width
  293.       return true if self.x <= xx
  294.       self.x -= w
  295.       self.x = xx if self.x <= xx
  296.     else
  297.       return true if self.x >= Graphics.width
  298.       self.x += w
  299.       self.x = Graphics.width if self.x >= Graphics.width
  300.     end
  301.     return false
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # ● フレーム更新 : フェードイン
  305.   #--------------------------------------------------------------------------
  306.   def update_fadein
  307.     op = 255 / ShtMsg::SLD_FRM
  308.     wp = ShtMsg::OPACITY / ShtMsg::SLD_FRM
  309.     if ShtMsg::SKIN == 0
  310.       return true if self.opacity = 255
  311.       self.opacity += op
  312.       self.opacity = 255 if self.opacity >= 255
  313.     else
  314.       return true
  315.     end
  316.     return false
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ● フレーム更新 : フェードアウト
  320.   #--------------------------------------------------------------------------
  321.   def update_fadeout
  322.     op = 255 / ShtMsg::SLD_FRM
  323.     wp = ShtMsg::OPACITY / ShtMsg::SLD_FRM
  324.     if ShtMsg::SKIN == 0
  325.       return true if self.opacity = 0 and self.back_opacity == 0 and self.contents_opacity == 0
  326.       self.opacity -= op
  327.       self.back_opacity -= wp
  328.       self.contents_opacity -= op
  329.       self.opacity = 0 if self.opacity <= 0
  330.       self.back_opacity = 0 if self.back_opacity <= 0
  331.       self.contents_opacity = 0 if self.contents_opacity <= 0
  332.     else
  333.       return true if self.contents_opacity == 0 and @sprite.opacity == 0
  334.       self.contents_opacity -= op
  335.       @sprite.opacity -= wp
  336.       self.contents_opacity = 0 if self.contents_opacity <= 0
  337.       @sprite.opacity = 0 if @sprite.opacity <= 0
  338.     end
  339.     return false
  340.   end
  341. end
  342.  
  343. #==============================================================================
  344. # ■ ShtMsg::MsgManager
  345. #==============================================================================
  346. class ShtMsg::MsgManager
  347.   #--------------------------------------------------------------------------
  348.   # ● オブジェクト初期化
  349.   #--------------------------------------------------------------------------
  350.   def initialize
  351.     @msg = []
  352.     [url=home.php?mod=space&uid=33409]@Stk[/url] = []
  353.     [url=home.php?mod=space&uid=76426]@stop[/url] = false
  354.     create_back_bitmap
  355.   end
  356.   #--------------------------------------------------------------------------
  357.   # ● 解放
  358.   #--------------------------------------------------------------------------
  359.   def dispose
  360.     @msg.each {|m| m.dispose}
  361.     @bitmap.dispose if ShtMsg::SKIN == 1
  362.   end
  363.   #--------------------------------------------------------------------------
  364.   # ● 背景ビットマップの作成
  365.   #--------------------------------------------------------------------------
  366.   def create_back_bitmap
  367.     case ShtMsg::SKIN
  368.     when 1
  369.       width  = ShtMsg::RECT.width
  370.       height = ShtMsg::RECT.height
  371.       @bitmap = Bitmap.new(width, height)
  372.       rect1 = Rect.new(0, 0, width, 4)
  373.       rect2 = Rect.new(0, 4, width, height - 8)
  374.       rect3 = Rect.new(0, height - 4, width, 4)
  375.       @bitmap.gradient_fill_rect(rect1, back_color2, back_color1, true)
  376.       @bitmap.fill_rect(rect2, back_color1)
  377.       @bitmap.gradient_fill_rect(rect3, back_color1, back_color2, true)
  378.     when 2
  379.       @bitmap = Cache.system(ShtMsg::PICT)
  380.     end
  381.   end
  382.   #--------------------------------------------------------------------------
  383.   # ● 背景色 1 の取得
  384.   #--------------------------------------------------------------------------
  385.   def back_color1
  386.     Color.new(0, 0, 0, 160)
  387.   end
  388.   #--------------------------------------------------------------------------
  389.   # ● 背景色 2 の取得
  390.   #--------------------------------------------------------------------------
  391.   def back_color2
  392.     Color.new(0, 0, 0, 0)
  393.   end
  394.   #--------------------------------------------------------------------------
  395.   # ● 初期X位置
  396.   #--------------------------------------------------------------------------
  397.   def start_x
  398.     ShtMsg::SLD_DIR ? (0 - ShtMsg::RECT.width) : (Graphics.width)
  399.   end
  400.   #--------------------------------------------------------------------------
  401.   # ● メッセージセットアップ
  402.   #--------------------------------------------------------------------------
  403.   def setup(type, msg, num=0)
  404.     search_y(ShtMsg::Messenger.new(type, msg, num))
  405.   end
  406.   #--------------------------------------------------------------------------
  407.   # ● Y位置サーチ
  408.   #--------------------------------------------------------------------------
  409.   def search_y(msg)
  410.     y = ShtMsg::VIEW.y
  411.     loop do
  412.       break if @stop
  413.       if @msg.all? {|m| m.y != y }
  414.         push_msg(msg, y)  # 空き場所へ
  415.         return true
  416.       end
  417.       y += ShtMsg::RECT.height + ShtMsg::OFST
  418.       break if y > (ShtMsg::VIEW.y + ShtMsg::VIEW.height - ShtMsg::RECT.height)
  419.     end
  420.     @stk.push(msg)  # 空くまで保持
  421.     return false
  422.   end
  423.   #--------------------------------------------------------------------------
  424.   # ● メッセージ表示開始
  425.   #--------------------------------------------------------------------------
  426.   def push_msg(msg, y)
  427.     @msg.push(Window_ShrtMsgr.new(msg, start_x, y, @bitmap))
  428.     ShtMsg::SE.play unless ShtMsg::SE.nil?
  429.   end
  430.   #--------------------------------------------------------------------------
  431.   # ● ストックの再挿入
  432.   #--------------------------------------------------------------------------
  433.   def shift_stock
  434.     if !@stk.empty? # ストックある場合、空いたらmsg挿入
  435.       loop do
  436.         break unless search_y(@stk.shift)
  437.         break if @stk.empty?
  438.       end
  439.     end
  440.   end
  441.   #--------------------------------------------------------------------------
  442.   # ● フレーム更新
  443.   #--------------------------------------------------------------------------
  444.   def update
  445.     @msg = @msg.each {|m| m.update }.select {|m| !m.disposed? }
  446.     shift_stock unless @stop
  447.   end
  448.   #--------------------------------------------------------------------------
  449.   # ● 簡易メッセージの強制停止
  450.   #--------------------------------------------------------------------------
  451.   def stop
  452.     @msg.each {|m| m.stop }
  453.     @stop = true
  454.   end
  455.   #--------------------------------------------------------------------------
  456.   # ● 簡易メッセージの強制停止解除
  457.   #--------------------------------------------------------------------------
  458.   def restart
  459.     @stop = false
  460.     shift_stock
  461.   end
  462. end
  463.  
  464.  
  465. #==============================================================================
  466. # ■ Scene_Map
  467. #==============================================================================
  468. class Scene_Map < Scene_Base
  469.   #--------------------------------------------------------------------------
  470.   # ● 開始処理
  471.   #--------------------------------------------------------------------------
  472.   alias start_shrtmsg start
  473.   def start
  474.     start_shrtmsg
  475.     @msgr = ShtMsg::MsgManager.new
  476.   end
  477.   #--------------------------------------------------------------------------
  478.   # ● 終了処理
  479.   #--------------------------------------------------------------------------
  480.   alias terminate_msg terminate
  481.   def terminate
  482.     terminate_msg
  483.     @msgr.dispose
  484.   end
  485.   #--------------------------------------------------------------------------
  486.   # ● 簡易メッセージ表示
  487.   #--------------------------------------------------------------------------
  488.   def show_msg(type, msg, num=0)
  489.     @msgr.setup(type, msg, num)
  490.   end
  491.   #--------------------------------------------------------------------------
  492.   # ● 簡易メッセージの強制停止
  493.   #--------------------------------------------------------------------------
  494.   def stop_msg
  495.     @msgr.stop
  496.   end
  497.   #--------------------------------------------------------------------------
  498.   # ● 簡易メッセージの強制停止解除
  499.   #--------------------------------------------------------------------------
  500.   def restart
  501.     @msgr.restart
  502.   end
  503.   #--------------------------------------------------------------------------
  504.   # ● フレーム更新
  505.   #--------------------------------------------------------------------------
  506.   alias update_msg update
  507.   def update
  508.     update_msg
  509.     @msgr.update
  510.   end
  511. end

这个是在日本网站上找到的一段简易显示物品获得等信息的脚本,但是不会用,有谁能帮做个工程示范下吗?小弟感激不尽。
作者: tseyik    时间: 2013-10-11 15:33
本帖最后由 tseyik 于 2013-10-11 15:41 编辑

在事件使用脚本
show_msg(type, msg, num)
例:
show_msg(2, 15, 5)
得到戦戟5個
show_msg(8, 1000,)
得到金錢1000G


<namepop 文字列>是叧外一個脚本
作者: tseyik    时间: 2013-10-11 15:35
脚本中可指定SKIN 0(普通視窗),1(半透明視窗),2(圖案視窗)
SKIN = 1
作者: skyboy1283    时间: 2013-10-11 15:36
tseyik 发表于 2013-10-11 15:33
在事件使用脚本
show_msg(type, msg, num)
例:

好,我试试,感激
作者: tseyik    时间: 2013-10-11 15:59
脚本中設定部分
module ShtMsg
  # スキンタイプ………外形
  #    0 .. ウィンドウ
  #    1 .. 半透明ブラックボックス
  #    2 .. ピクチャ
  SKIN = 2
  # ウィンドウ背景の不透明度……背景不透明度
  OPACITY = 160
  # ピクチャファイル(Graphics/System)……背景圖象名
  PICT = "msg_skin"

  # メッセージ矩形サイズ(x,yは未参照)……文字區域大小
  RECT = Rect.new(0, 0, 160, 32)
  # 表示矩形(x,widthは未参照。yは最初のy位置, heightは表示する範囲)表示區域大小
  VIEW = Rect.new(0, Graphics.height * 2 / 3, 0, Graphics.height / 3) # 下のほう
#~   VIEW = Rect.new(0, 0, 0, Graphics.height / 3)  # 上のほう
  # 表示位置(高さ)のずらし幅
  OFST = 0
  
  # スライドイン方向(true:左端から / false:右端から)……表示區域所在(true:左端 / false:右端)
  SLD_DIR = false
  # スライド時間……表示時間1
  SLD_FRM = 8
  # 表示ウェイト時間……表示時間2
  WAIT = 100

  # 固有名の着色(色index)   0..normal_color
  COLOR = 2
  # フォントサイズ…文字大小
  FSZ = 14
  # 文字描画開始X位置…文字先頭
  STX = 4

  # SE音(鳴らさない場合はnilにする)
  SE = RPG::SE.new("Chime2")

  # メッセージ表示と同時に本処理(アイテム入手等)を実行する…true=同時入手
  EXE = true
end

作者: skyboy1283    时间: 2013-10-11 16:04
tseyik 发表于 2013-10-11 15:59
脚本中設定部分
module ShtMsg
  # スキンタイプ………外形

嗯嗯,搞定啦,多谢了!!!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1