设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

关于【即时消息脚本】修改

查看数: 1787 | 评论数: 1 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-1-5 18:54

正文摘要:

回复

刺夜之枪 发表于 2016-1-6 01:58:21
RUBY 代码复制
  1. #------------------制作by bluefool,转载请保留------------------
  2. module Blue
  3.   #这个是控制显示最近的多少条信息的,当超出一屏能显示的值的话可通过先按一下shift
  4.   #然后用上下翻看内容。再按一次shift则解除激活
  5.   Blue_max = 9
  6.   #战斗画面时即时消息窗口的x坐标
  7.   BATAM_X = 0
  8.   #战斗画面时即时消息窗口的y坐标
  9.   BATAM_Y = 90
  10.   #用于清空hash表,可以不管它,但不要让Blue_max大于它,当然,它的值也可以改变
  11.   NAM_MAX = 20
  12.   #主要传递信息参数为函数$am,参见脚本内容
  13. end
  14. #-------------------------------------------
  15. class Scene_Load < Scene_File
  16.   #--------------------------------------------------------------------------
  17.   # ● 确定时的处理
  18.   #--------------------------------------------------------------------------
  19.   def on_decision(filename)
  20.     # 文件不存在的情况下
  21.     unless FileTest.exist?(filename)
  22.       # 演奏冻结 SE
  23.       $game_system.se_play($data_system.buzzer_se)
  24.       return
  25.     end
  26.     # 演奏读档 SE
  27.     $game_system.se_play($data_system.load_se)
  28.     # 写入存档数据
  29.     file = File.open(filename, "rb")
  30.     read_save_data(file)
  31.     file.close
  32.     # 还原 BGM、BGS
  33.     $game_system.bgm_play($game_system.playing_bgm)
  34.     $game_system.bgs_play($game_system.playing_bgs)
  35.     # 刷新地图 (执行并行事件)
  36.     $a = {}
  37.     $game_map.update
  38.     # 切换到地图画面
  39.     $scene = Scene_Map.new
  40.   end
  41. end  
  42. class Game_Player < Game_Character
  43.   def update
  44.     # 本地变量记录移动信息
  45.     last_moving = moving?
  46.     # 移动中、事件执行中、强制移动路线中、
  47.     # 信息窗口一个也不显示的时候
  48.     unless moving? or $game_system.map_interpreter.running? or
  49.            @move_route_forcing or $game_temp.message_window_showing or $ccc == 1
  50.       case Input.dir4
  51.       when 2
  52.         move_down
  53.       when 4
  54.         move_left
  55.       when 6
  56.         move_right
  57.       when 8
  58.         move_up
  59.       end
  60.     end
  61.     # 本地变量记忆坐标
  62.     last_real_x = @real_x
  63.     last_real_y = @real_y
  64.     super
  65.     # 角色向下移动、画面上的位置在中央下方的情况下
  66.     if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
  67.       # 画面向下卷动
  68.       $game_map.scroll_down(@real_y - last_real_y)
  69.     end
  70.     # 角色向左移动、画面上的位置在中央左方的情况下
  71.     if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
  72.       # 画面向左卷动
  73.       $game_map.scroll_left(last_real_x - @real_x)
  74.     end
  75.     # 角色向右移动、画面上的位置在中央右方的情况下
  76.     if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
  77.       # 画面向右卷动
  78.       $game_map.scroll_right(@real_x - last_real_x)
  79.     end
  80.     # 角色向上移动、画面上的位置在中央上方的情况下
  81.     if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
  82.       # 画面向上卷动
  83.       $game_map.scroll_up(last_real_y - @real_y)
  84.     end
  85.     # 不在移动中的情况下
  86.     unless moving?
  87.       # 上次主角移动中的情况
  88.       if last_moving
  89.         # 与同位置的事件接触就判定为事件启动
  90.         result = check_event_trigger_here([1,2])
  91.         # 没有可以启动的事件的情况下
  92.         if result == false
  93.           # 调试模式为 ON 并且按下 CTRL 键的情况下除外
  94.           unless $DEBUG and Input.press?(Input::CTRL)
  95.             # 遇敌计数下降
  96.             if @encounter_count > 0
  97.               @encounter_count -= 1
  98.             end
  99.           end
  100.         end
  101.       end
  102.       # 按下 C 键的情况下
  103.       if Input.trigger?(Input::C)
  104.         # 判定为同位置以及正面的事件启动
  105.         check_event_trigger_here([0])
  106.         check_event_trigger_there([0,1,2])
  107.       end
  108.     end
  109.   end
  110. end  
  111. #==============================================================================
  112. # ■ Scene_Title
  113. #------------------------------------------------------------------------------
  114. #  处理标题画面的类。
  115. #==============================================================================
  116.  
  117. class Scene_Title
  118.   #--------------------------------------------------------------------------
  119.   # ● 命令 : 新游戏
  120.   #--------------------------------------------------------------------------
  121.   def command_new_game
  122.     # 演奏确定 SE
  123.     $game_system.se_play($data_system.decision_se)
  124.     # 停止 BGM
  125.     Audio.bgm_stop
  126.     # 重置测量游戏时间用的画面计数器
  127.     Graphics.frame_count = 0
  128.     # 生成各种游戏对像
  129.     $game_temp          = Game_Temp.new
  130.     $game_system        = Game_System.new
  131.     $game_switches      = Game_Switches.new
  132.     $game_variables     = Game_Variables.new
  133.     $game_self_switches = Game_SelfSwitches.new
  134.     $game_screen        = Game_Screen.new
  135.     $game_actors        = Game_Actors.new
  136.     $game_party         = Game_Party.new
  137.     $game_troop         = Game_Troop.new
  138.     $game_map           = Game_Map.new
  139.     $game_player        = Game_Player.new
  140.     # 设置初期同伴位置
  141.     $game_party.setup_starting_members
  142.     # 设置初期位置的地图
  143.     $game_map.setup($data_system.start_map_id)
  144.     # 主角向初期位置移动
  145.     $game_player.moveto($data_system.start_x, $data_system.start_y)
  146.     # 刷新主角
  147.     $game_player.refresh
  148.     # 执行地图设置的 BGM 与 BGS 的自动切换
  149.     $game_map.autoplay
  150.     # 刷新地图 (执行并行事件)
  151.     $game_map.update
  152.     $a = {}
  153.     $ccc = 0
  154.     # 切换地图画面
  155.     $scene = Scene_Map.new
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # ● 命令 : 继续
  159.   #--------------------------------------------------------------------------
  160.   def command_continue
  161.     # 继续无效的情况下
  162.     unless @continue_enabled
  163.       # 演奏无效 SE
  164.       $game_system.se_play($data_system.buzzer_se)
  165.       return
  166.     end
  167.     # 演奏确定 SE
  168.     $game_system.se_play($data_system.decision_se)
  169.     # 切换到读档画面
  170.     $scene = Scene_Load.new
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ● 命令 : 退出
  174.   #--------------------------------------------------------------------------
  175.   def command_shutdown
  176.     # 演奏确定 SE
  177.     $game_system.se_play($data_system.decision_se)
  178.     # BGM、BGS、ME 的淡入淡出
  179.     Audio.bgm_fade(800)
  180.     Audio.bgs_fade(800)
  181.     Audio.me_fade(800)
  182.     # 退出
  183.     $scene = nil
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ● 战斗测试
  187.   #--------------------------------------------------------------------------
  188.   def battle_test
  189.     # 载入数据库 (战斗测试用)
  190.     $data_actors        = load_data("Data/BT_Actors.rxdata")
  191.     $data_classes       = load_data("Data/BT_Classes.rxdata")
  192.     $data_skills        = load_data("Data/BT_Skills.rxdata")
  193.     $data_items         = load_data("Data/BT_Items.rxdata")
  194.     $data_weapons       = load_data("Data/BT_Weapons.rxdata")
  195.     $data_armors        = load_data("Data/BT_Armors.rxdata")
  196.     $data_enemies       = load_data("Data/BT_Enemies.rxdata")
  197.     $data_troops        = load_data("Data/BT_Troops.rxdata")
  198.     $data_states        = load_data("Data/BT_States.rxdata")
  199.     $data_animations    = load_data("Data/BT_Animations.rxdata")
  200.     $data_tilesets      = load_data("Data/BT_Tilesets.rxdata")
  201.     $data_common_events = load_data("Data/BT_CommonEvents.rxdata")
  202.     $data_system        = load_data("Data/BT_System.rxdata")
  203.     # 重置测量游戏时间用的画面计数器
  204.     Graphics.frame_count = 0
  205.     # 生成各种游戏对像
  206.     $game_temp          = Game_Temp.new
  207.     $game_system        = Game_System.new
  208.     $game_switches      = Game_Switches.new
  209.     $game_variables     = Game_Variables.new
  210.     $game_self_switches = Game_SelfSwitches.new
  211.     $game_screen        = Game_Screen.new
  212.     $game_actors        = Game_Actors.new
  213.     $game_party         = Game_Party.new
  214.     $game_troop         = Game_Troop.new
  215.     $game_map           = Game_Map.new
  216.     $game_player        = Game_Player.new
  217.     # 设置战斗测试用同伴
  218.     $game_party.setup_battle_test_members
  219.     # 设置队伍 ID、可以逃走标志、战斗背景
  220.     $game_temp.battle_troop_id = $data_system.test_troop_id
  221.     $game_temp.battle_can_escape = true
  222.     $game_map.battleback_name = $data_system.battleback_name
  223.     # 演奏战斗开始 BGM
  224.     $game_system.se_play($data_system.battle_start_se)
  225.     # 演奏战斗 BGM
  226.     $game_system.bgm_play($game_system.battle_bgm)
  227.     # 切换到战斗画面
  228.     $scene = Scene_Battle.new
  229.   end
  230. end
  231. #-------------------------------------------------------
  232. class Scene_Map
  233.   #--------------------------------------------------------------------------
  234.   # ● 主处理
  235.   #--------------------------------------------------------------------------
  236.   def main
  237.     @spriteset = Spriteset_Map.new
  238.     @message_window = Window_Message.new
  239.     @down_window = Window_Down.new
  240.     Graphics.transition
  241.     # 主循环
  242.     loop do
  243.       Graphics.update
  244.       Input.update
  245.       update
  246.       if $scene != self
  247.         break
  248.       end
  249.     end
  250.     Graphics.freeze
  251.     @spriteset.dispose
  252.     @message_window.dispose
  253.     @down_window.dispose
  254.     if $scene.is_a?(Scene_Title)
  255.       Graphics.transition
  256.       Graphics.freeze
  257.     end
  258.     @am_size = $a.size
  259.   end
  260.   #---------------------
  261.   def bluefool_sort
  262.     if $am != nil
  263.        if $a.size > Blue::NAM_MAX
  264.           a_temp = {}
  265.           j = 0
  266.           for i in ($a.size - Blue::Blue_max)...$a.size
  267.             a_temp[j] = $a[i]
  268.             j += 1
  269.           end  
  270.          $a = a_temp
  271.        end  
  272.        if $am.length < 54
  273.           $a[$a.size] = $am
  274.         else
  275.           while $am.length > 53
  276.             i = 53
  277.             while (/\W/ =~ $am[i-3,3]) != nil
  278.               i -= 1
  279.             end
  280.             $a[$a.size] = $am[0,i]
  281.             $am = $am[i ,$am.length - i]
  282.           end
  283.           $a[$a.size] = $am
  284.        end
  285.        $am = nil
  286.     end
  287.   end  
  288.   #--------------------------------------------------------------------------
  289.   # ● 刷新画面
  290.   #--------------------------------------------------------------------------
  291.   def update
  292.     # 循环
  293.     loop do
  294.       # 按照地图、实例、主角的顺序刷新
  295.       # (本更新顺序不会在的满足事件的执行条件下成为给予角色瞬间移动
  296.       #  的机会的重要因素)
  297.       $game_map.update
  298.       $game_system.map_interpreter.update
  299.       $game_player.update
  300.       # 系统 (计时器)、画面刷新
  301.       $game_system.update
  302.       $game_screen.update
  303.       # 如果主角在场所移动中就中断循环
  304.       unless $game_temp.player_transferring
  305.         break
  306.       end
  307.       # 执行场所移动
  308.       transfer_player
  309.       # 处理过渡中的情况下、中断循环
  310.       if $game_temp.transition_processing
  311.         break
  312.       end
  313.     end
  314.     # 刷新活动块
  315.     @spriteset.update
  316.     # 刷新信息窗口
  317.     @message_window.update
  318.     # 游戏结束的情况下
  319.     if $game_temp.gameover
  320.       # 切换的游戏结束画面
  321.       $scene = Scene_Gameover.new
  322.       return
  323.     end
  324.     # 返回标题画面的情况下
  325.     if $game_temp.to_title
  326.       # 切换到标题画面
  327.       $scene = Scene_Title.new
  328.       return
  329.     end
  330.     # 处理过渡中的情况下
  331.     if $game_temp.transition_processing
  332.       # 清除过渡处理中标志
  333.       $game_temp.transition_processing = false
  334.       # 执行过渡
  335.       if $game_temp.transition_name == ""
  336.         Graphics.transition(20)
  337.       else
  338.         Graphics.transition(40, "Graphics/Transitions/" +
  339.           $game_temp.transition_name)
  340.       end
  341.     end
  342.     # 显示信息窗口中的情况下
  343.     if $game_temp.message_window_showing
  344.       return
  345.     end
  346.     # 遇敌计数为 0 且、且遇敌列表不为空的情况下
  347.     if $game_player.encounter_count == 0 and $game_map.encounter_list != []
  348.       # 不是在事件执行中或者禁止遇敌中
  349.       unless $game_system.map_interpreter.running? or
  350.              $game_system.encounter_disabled
  351.         # 确定队伍
  352.         n = rand($game_map.encounter_list.size)
  353.         troop_id = $game_map.encounter_list[n]
  354.         # 队伍有效的话
  355.         if $data_troops[troop_id] != nil
  356.           # 设置调用战斗标志
  357.           $game_temp.battle_calling = true
  358.           $game_temp.battle_troop_id = troop_id
  359.           $game_temp.battle_can_escape = true
  360.           $game_temp.battle_can_lose = false
  361.           $game_temp.battle_proc = nil
  362.         end
  363.       end
  364.     end
  365.     #---------------------------------------------
  366.     bluefool_sort
  367.     if @am_size != $a.size
  368.        @down_window.refresh
  369.        if $a != nil and $a.size < Blue::Blue_max + 1
  370.         @down_window.index = $a.size/2 - 1
  371.         elsif $a != nil and $a.size > Blue::Blue_max
  372.         @down_window.index = Blue::Blue_max/2 - 1
  373.        end  
  374.        @am_size = $a.size
  375.     end  
  376.     if Input.trigger?(Input::A)
  377.       if @down_window.active == false
  378.         @down_window.active = true
  379.         $ccc = 1
  380.       else
  381.         @down_window.active = false
  382.         $ccc = 0
  383.       end  
  384.     end
  385.     if Input.trigger?(Input::DOWN)#输入DOWN键的情况
  386.       if @down_window.active == true and @down_window.index < (@down_window.item_max-1)/2
  387.         @down_window.index += 1
  388.       end  
  389.     end  
  390.     if Input.trigger?(Input::UP)#输入UP键的情况
  391.       if @down_window.active == true and @down_window.index > 0
  392.         @down_window.index -= 1
  393.       end  
  394.     end  
  395.     #----------------------------------------------
  396.     # 按下 B 键的情况下
  397.     if Input.trigger?(Input::B)
  398.       # 不是在事件执行中或菜单禁止中
  399.       unless $game_system.map_interpreter.running? or
  400.              $game_system.menu_disabled
  401.         # 设置菜单调用标志以及 SE 演奏
  402.         $game_temp.menu_calling = true
  403.         $game_temp.menu_beep = true
  404.       end
  405.     end
  406.     # 调试模式为 ON 并且按下 F9 键的情况下
  407.     if $DEBUG and Input.press?(Input::F9)
  408.       # 设置调用调试标志
  409.       $game_temp.debug_calling = true
  410.     end
  411.     # 不在主角移动中的情况下
  412.     unless $game_player.moving?
  413.       # 执行各种画面的调用
  414.       if $game_temp.battle_calling
  415.         call_battle
  416.       elsif $game_temp.shop_calling
  417.         call_shop
  418.       elsif $game_temp.name_calling
  419.         call_name
  420.       elsif $game_temp.menu_calling
  421.         call_menu
  422.       elsif $game_temp.save_calling
  423.         call_save
  424.       elsif $game_temp.debug_calling
  425.         call_debug
  426.       end
  427.     end
  428.   end
  429. end
  430. #---------------------------------------------------------
  431. class Interpreter
  432.   def bluefool_sort
  433.       if $am != nil
  434.        if $a.size > Blue::NAM_MAX
  435.           a_temp = {}
  436.           j = 0
  437.           for i in ($a.size - Blue::Blue_max)...$a.size
  438.             a_temp[j] = $a[i]
  439.             j += 1
  440.           end  
  441.          $a = a_temp
  442.        end  
  443.         if $am.length < 54
  444.            $a[$a.size] = $am
  445.         else
  446.            while $am.length > 53
  447.              i = 53
  448.              while (/\W/ =~ $am[i-3,3]) != nil
  449.               i -= 1
  450.              end
  451.              $a[$a.size] = $am[0,i]
  452.              $am = $am[i ,$am.length - i]
  453.            end
  454.            $a[$a.size] = $am
  455.         end
  456.        $am = nil
  457.       end
  458.   end
  459. end
  460. #==============================================================================
  461. # ■ Window_Down
  462. #------------------------------------------------------------------------------
  463. #   信息窗口。
  464. #==============================================================================
  465.  
  466. class Window_Down < Window_Selectable
  467.   #--------------------------------------------------------------------------
  468.   # ● 初始化对像
  469.   #--------------------------------------------------------------------------
  470.   def initialize
  471.     super(0, 240, 330, 240)
  472.     @column_max = 1
  473.     self.opacity = 0
  474.     if $a != nil and $a.size < 21
  475.       self.index = $a.size/2
  476.       elsif $a != nil and $a.size > 20
  477.       self.index = 9
  478.     end  
  479.     refresh
  480.     self.active = false
  481.   end
  482.   #--------------------------------------------------------------------------
  483.   # ● 刷新
  484.   #--------------------------------------------------------------------------
  485.   def refresh
  486.     if self.contents != nil
  487.       self.contents.dispose
  488.       self.contents = nil
  489.     end
  490.     if $a != nil and $a.size < Blue::Blue_max + 1
  491.       @item_max = $a.size
  492.       elsif $a != nil and $a.size > Blue::Blue_max
  493.       @item_max = Blue::Blue_max
  494.     end  
  495.     if @item_max > 0
  496.       self.contents = Bitmap.new(width - 32, row_max * 16)
  497.       for i in 0...@item_max
  498.          draw_item(i)
  499.       end
  500.     end
  501.   end
  502.   def item_max
  503.     return @item_max
  504.   end  
  505.   #--------------------------------------------------------------------------
  506.   # ● 描绘项目
  507.   #     index : 项目编号
  508.   #--------------------------------------------------------------------------
  509.   def draw_item(index)
  510.     if $a.size < Blue::Blue_max + 1
  511.      item = $a[index]
  512.      else
  513.      item = $a[index + $a.size - Blue::Blue_max]
  514.     end
  515.     x = 0
  516.     y = index * 16
  517.     self.contents.font.size = 14
  518.     self.contents.font.color = Color.new(-170,-170,-170,255)
  519.     self.contents.draw_text(x + 6, y + 1, self.contents.text_size(item).width, 16, item, 0)
  520.     self.contents.font.color = normal_color
  521.     self.contents.draw_text(x + 5, y, self.contents.text_size(item).width, 16, item, 0)
  522.   end
  523.   #--------------------------------------
  524.   #  ● 刷新光标
  525.   #--------------------------------------
  526.   def update_cursor_rect
  527.     # 光标位置不满 0 的情况下
  528.     if @index < 0
  529.       self.cursor_rect.empty
  530.       return
  531.     end
  532.     # 获取当前的行
  533.     row = @index / @column_max
  534.     # 当前行被显示开头行前面的情况下
  535.     if row < self.top_row
  536.       # 从当前行向开头行滚动
  537.       self.top_row = row
  538.     end
  539.     # 当前行被显示末尾行之后的情况下
  540.     if row > self.top_row + (self.page_row_max - 1)
  541.       # 从当前行向末尾滚动
  542.       self.top_row = row - (self.page_row_max - 1)
  543.     end
  544.     # 计算光标的宽
  545.     cursor_width = self.width / @column_max - 32
  546.     cursor_width = 0
  547.     # 计算光标坐标
  548.     x = @index % @column_max * (cursor_width + 32)
  549.     y = @index / @column_max * 32 - self.oy
  550.     # 更新国标矩形
  551.     self.cursor_rect.set(x, y, cursor_width, 16)
  552.   end
  553. end




我就删了个大概。没有细看,但是至少现在除了手动的$am其他都删了





评分

参与人数 2星屑 +45 梦石 +1 收起 理由
RyanBern + 1 认可答案
神木大人 + 45 认可答案

查看全部评分

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-12 00:13

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表