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

Project1

 找回密码
 注册会员
搜索
查看: 1404|回复: 2
打印 上一主题 下一主题

[已经过期] 关于SEP插件中窗口分辨率的问题

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2724
在线时间
227 小时
注册时间
2016-3-27
帖子
576
跳转到指定楼层
1
发表于 2022-5-26 16:51:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 WantMy蕙 于 2022-5-26 17:36 编辑

通过使用Sailcat的SEP插件脚本来修改游戏窗口分辨率,但更改过后窗口大小没有变化,并且会使别的窗口变大脚本失效

RUBY 代码复制
  1. #==============================================================================
  2. # ■ SEP 插件公共核心 v1.1 by SailCat
  3. #------------------------------------------------------------------------------
  4. #   方法:本脚本插入Scene_Debug(默认脚本)之后使用,需为自定义脚本的第一项
  5. #   依赖:无(需要RGSS1 默认完整引擎)
  6. #   版本:v1.1 (Build 171218)
  7. #   效果:
  8. #     1. 作为其他(几乎是所有)SEP插件脚本的必要依赖项
  9. #     2. RGSS1 引擎中,各项固化的游戏用语统一设定文字内容
  10. #     3. RGSS1 引擎中,各项固化的游戏数值统一设定数值限制
  11. #     4. RGSS1 引擎中,原游戏内部类的机能扩充和优化
  12. #     5. RGSS1 引擎中,已知的bug修正
  13. #        a) 装备自动状态错误卸除 bug
  14. #        b) 失明状态下物理技能恒Miss bug
  15. #        c) 回复技能,被攻击力增幅时威力反而减小 bug
  16. #        d) 威力为0,攻击力增幅不为0的技能,伤害值显示的 bug
  17. #        e) 事件脚本执行结果为false时,有时卡死的 bug
  18. #        f) 提升最大HP/SP后重新初始化角色,角色的当前HP和SP比最大值高的 bug
  19. #     6. 为了后续插件的便利,将攻击改为执行0号特技(注意并不是$data_skills[0])
  20. #     7. 独立开关可以当作独立变量来使用(在事件和插件脚本中)
  21. #     8. 引入类似VA的Scene_Base 模块,用以简化场景的开发,并重写所有原引擎场景
  22. #     9. 调试模式下以及商店中可以按Ctrl/Alt/Shift键来快速变化数值
  23. #   配置:全部游戏用语、全部上限值、以及引擎扩充的设定值
  24. #   冲突:无,和RGSS1 默认引擎100%兼容,按正确位置插入的情况下不会引起任何冲突
  25. #   说明:
  26. #     1. 单独植入此插件,且不修改任何配置项的情况下,游戏表现与默认引擎无差别
  27. #     2. 如果修改了帧率,一定要打开平滑模式,否则显示可能有问题,切记
  28. #==============================================================================
  29. #==============================================================================
  30. # ■ SailCat's 插件公用
  31. #==============================================================================
  32. module SailCat
  33.   $sailcat_import = {}
  34.   #--------------------------------------------------------------------------
  35.   # ● 脚本配置区
  36.   #--------------------------------------------------------------------------
  37.   module Core_Config
  38.     #--------------------------------------------------------------------------
  39.     # ● 上限设定,除最后三项外均可完全开放(设置为nil即无上限)
  40.     #--------------------------------------------------------------------------
  41.     GOLD_MAX          = 9999999         # 金钱持有上限
  42.     STEPS_MAX         = 9999999         # 步数积累上限
  43.     VAR_MAX           = 99999999        # 变量取值上限
  44.     ITEM_MAX          = 99              # 道具持有上限
  45.     MAXHP_MAX_BATTLER = 999999          # 最大HP值上限(通用)
  46.     MAXHP_MAX_ACTOR   = 9999            # 最大HP值上限(角色)
  47.     MAXSP_MAX         = 9999            # 最大SP值上限
  48.     STR_MAX           = 999             # 力量值的上限
  49.     DEX_MAX           = 999             # 灵巧值的上限
  50.     AGI_MAX           = 999             # 速度值的上限
  51.     INT_MAX           = 999             # 魔力值的上限
  52.     EXP_MAX           = 9999999         # 经验值的上限
  53.     DATA_MAX          = 999             # 数据库条数上限
  54.     SWITCH_MAX        = 5000            # 开关数目上限
  55.     VARIABLE_MAX      = 5000            # 变量数目上限
  56.     #--------------------------------------------------------------------------
  57.     # ● 用语设定
  58.     #--------------------------------------------------------------------------
  59.     VOCAB_EXP         = "EXP"           # 经验值 用语
  60.     VOCAB_EXP_A       = "E"             # 经验值 用语 简写
  61.     VOCAB_LEVEL       = "LEVEL"         # 等级 用语
  62.     VOCAB_LEVEL_A     = "Lv"            # 等级 用语 简写
  63.     VOCAB_NEXT_LEVEL  = "NEXT"          # 下一级经验 用语
  64.     VOCAB_STATE_EMPTY = "[正常]"        # 空状态 用语
  65.     VOCAB_PLAYTIME    = "游戏时间"      # 游戏时间 用语
  66.     VOCAB_STEPS       = "步数"          # 步数 用语
  67.     VOCAB_HOLD_NUMBER = "所持数"        # 所持数 用语
  68.     VOCAB_FILE        = "文件"          # 文件 用语
  69.     VOCAB_EQUIPMENT   = "装备"          # 装备 用语(注:状态窗口的装备用语)
  70.     VOCAB_MISS        = "Miss"          # 未击中 用语
  71.     VOCAB_CRITICAL    = "CRITICAL"      # 会心 用语
  72.     VOCAB_LEVEL_UP    = "LEVEL UP!"     # 升级 用语
  73.     VOCAB_BUY         = "买"            # 买 用语
  74.     VOCAB_SELL        = "卖"            # 卖 用语
  75.     VOCAB_CANCEL      = "取消"          # 取消 用语
  76.     VOCAB_FIGHT       = "战斗"          # 战斗 用语
  77.     VOCAB_ESCAPE      = "逃跑"          # 逃跑 用语
  78.     VOCAB_NEW_GAME    = "新"        # 新游戏 用语
  79.     VOCAB_CONTINUE    = "继"          # 继续 用语
  80.     VOCAB_QUIT        = "退"          # 退出 用语
  81.     VOCAB_STATUS      = "状态"          # 状态 用语
  82.     VOCAB_SAVE        = "存档"          # 存档 用语
  83.     VOCAB_END_GAME    = "结束游戏"      # 结束游戏 用语
  84.     VOCAB_TO_TITLE    = "返回标题画面"  # 返回标题画面 用语
  85.     VOCAB_OK          = "确定"          # 确定 用语
  86.     #--------------------------------------------------------------------------
  87.     # ● 引擎设定
  88.     #--------------------------------------------------------------------------
  89.     SHADOW_DIRECTION  = 0               # 文字阴影方向(1-9),设为0关闭阴影
  90.     SHADOW_OPACITY    = 170             # 文字阴影的默认不透明度
  91.     FONT_SIZE_DEFAULT = 22              # 字体默认大小
  92.     BLUR_RADIUS       = 1               # 模糊位图的半径(1-4)
  93.     MOSAIC_SIZE       = 8               # 马赛克位图的色块大小(1-32)
  94.     SCREEN_W          = 640             # 屏幕分辨率的宽度
  95.     SCREEN_H          = 480             # 屏幕分辨率的高度
  96.     FRAME_RATE        = 60              # 游戏运行的帧率
  97.     INTERPRETER_RATE  = 20              # 事件解释器的帧率
  98.     START_TRANSPARENT = false           # 游戏开始时角色透明
  99.     #--------------------------------------------------------------------------
  100.     # ● 配置检查,请勿更改
  101.     #--------------------------------------------------------------------------
  102.     unless FRAME_RATE % INTERPRETER_RATE == 0
  103.       raise "游戏帧率需为事件解释器帧率的倍数"
  104.     else
  105.       FRAME_SKIP = FRAME_RATE / INTERPRETER_RATE
  106.     end
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 植入
  110.   #--------------------------------------------------------------------------
  111.   $sailcat_import[:CoreEngine] = 1.0
  112. end
  113.  
  114. #==============================================================================
  115. # ■ Vocab
  116. #------------------------------------------------------------------------------
  117. #   所有用语的整合模块。
  118. #==============================================================================
  119. module Vocab
  120.   include SailCat::Core_Config
  121.   class << self
  122.     #--------------------------------------------------------------------------
  123.     # ● 导入数据库用语
  124.     #--------------------------------------------------------------------------
  125.     [:gold, :hp, :sp, :str, :dex, :agi, :int, :atk, :pdef, :mdef,
  126.       :weapon, :armor1, :armor2, :armor3, :armor4,
  127.       :attack, :skill, :guard, :item, :equip].each do |sym|
  128.       self.send :define_method, sym do; $data_system.words.send(sym); end
  129.     end
  130.     #--------------------------------------------------------------------------
  131.     # ● 增补用语
  132.     #--------------------------------------------------------------------------
  133.     SailCat::Core_Config.constants.each do |name|
  134.       if name[0..5] == "VOCAB_"
  135.         sym = name.sub("VOCAB_") {""}.downcase.to_sym
  136.         self.send :define_method, sym do; const_get(name); end
  137.       end
  138.     end
  139.   end
  140. end
  141.  
  142. #==============================================================================
  143. # ■ Enumerable
  144. #------------------------------------------------------------------------------
  145. #   可枚举模块的增强功能。
  146. #==============================================================================
  147. module Enumerable
  148.   #--------------------------------------------------------------------------
  149.   # ● 求和
  150.   #--------------------------------------------------------------------------
  151.   def sum
  152.     if block_given?
  153.       inject(0) {|n, i| n + yield(i)}
  154.     else
  155.       inject(0) {|n, i| n + (i || 0)}
  156.     end
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 求积
  160.   #--------------------------------------------------------------------------
  161.   def product
  162.     if block_given?
  163.       inject(1) {|n, i| n * yield(i)}
  164.     else
  165.       include?(0) ? 0 : inject(1) {|n, i| n * (i || 1)}
  166.     end
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # ● 按值取大小
  170.   #--------------------------------------------------------------------------
  171.   def min_by; block_given? ? min {|a, b| yield(a) <=> yield(b)} : min;    end
  172.   def max_by; block_given? ? max {|a, b| yield(a) <=> yield(b)} : max;    end
  173. end
  174.  
  175. #==============================================================================
  176. # ■ NilClass
  177. #------------------------------------------------------------------------------
  178. #   空值的增强功能。
  179. #==============================================================================
  180. class NilClass
  181.   #--------------------------------------------------------------------------
  182.   # ● 取反,总是返回自身
  183.   #--------------------------------------------------------------------------
  184.   def -@; self; end
  185. end
  186.  
  187. #==============================================================================
  188. # ■ Array
  189. #------------------------------------------------------------------------------
  190. #   数组的增强功能。
  191. #==============================================================================
  192. class Array
  193.   #--------------------------------------------------------------------------
  194.   # ● 洗牌
  195.   #--------------------------------------------------------------------------
  196.   def shuffle
  197.     self.clone.shuffle!
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ● 破坏性洗牌
  201.   #--------------------------------------------------------------------------
  202.   def shuffle!
  203.     (size - 1).times do |i|
  204.       j = i + rand(size - i)
  205.       t = self[j]
  206.       self[j] = self[i]
  207.       self[i] = t
  208.     end
  209.   end
  210. end
  211.  
  212. #==============================================================================
  213. # ■ Numeric
  214. #------------------------------------------------------------------------------
  215. #   数值的增强功能。
  216. #==============================================================================
  217. class Numeric
  218.   #--------------------------------------------------------------------------
  219.   # ● 数值上下限定
  220.   #     min : 最小值
  221.   #     max : 最大值
  222.   #--------------------------------------------------------------------------
  223.   def limit(min, max)
  224.     return self if min.nil? and max.nil?
  225.     return [self, min].max if max.nil?
  226.     return [self, max].min if min.nil?
  227.     if min > max
  228.       min += max; max = min - max; min -= max
  229.     end
  230.     [[self, min].max, max].min
  231.   end
  232.   #--------------------------------------------------------------------------
  233.   # ● 数值分散
  234.   #     args : 分散度(0-1),可用两个参数的分数表示
  235.   #--------------------------------------------------------------------------
  236.   def variance(*args)
  237.     return self if abs == 0
  238.     var = (args[0].to_f / (args[1] || 1)).limit(0.0, 1.0)
  239.     return self if var == 0.0
  240.     amp = [(abs * var).round, 1].max
  241.     self + rand(amp + 1) + rand(amp + 1) - amp
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # ● 数值混合
  245.   #     other : 被混合的另一个数
  246.   #     args : 混合度(0-1),可用两个参数的分数表示
  247.   #--------------------------------------------------------------------------
  248.   def blend(other, *args)
  249.     var = (args[0].to_f / (args[1] || 1)).limit(0.0, 1.0)
  250.     return self if var == 0.0
  251.     return other if var == 1.0
  252.     n = self * var + other * (1 - var)
  253.     self.is_a?(Fixnum) && other.is_a?(Fixnum) ? n.round : n
  254.   end
  255. end
  256.  
  257. #==============================================================================
  258. # ■ Bitmap
  259. #------------------------------------------------------------------------------
  260. #   位图的增强功能,植入部分RGSS2的功能。
  261. #==============================================================================
  262. class Bitmap
  263.   include SailCat::Core_Config
  264.   #--------------------------------------------------------------------------
  265.   # ● 方法重定义
  266.   #--------------------------------------------------------------------------
  267.   unless method_defined?(:sailcat_sepcore_dispose)
  268.     alias sailcat_sepcore_dispose dispose
  269.     alias sailcat_sepcore_draw_text draw_text
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● 获得描绘缓存
  273.   #--------------------------------------------------------------------------
  274.   def buffer
  275.     @buffer ||= Bitmap.new(width, height)
  276.   end
  277.   #--------------------------------------------------------------------------
  278.   # ● 清除缓存
  279.   #--------------------------------------------------------------------------
  280.   def clear_buffer
  281.     self.buffer.clear
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # ● 复制当前位图到缓存
  285.   #--------------------------------------------------------------------------
  286.   def clone_to_buffer
  287.     self.buffer.blt(0, 0, self, rect)
  288.     self.buffer
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ● 复制缓存到当前位图
  292.   #--------------------------------------------------------------------------
  293.   def clone_from_buffer
  294.     self.blt(0, 0, self.buffer, rect)
  295.     self
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # ● 释放
  299.   #--------------------------------------------------------------------------
  300.   def dispose
  301.     sailcat_sepcore_dispose
  302.     @buffer.dispose if @buffer
  303.   end
  304.   #--------------------------------------------------------------------------
  305.   # ● 灰度效果
  306.   #--------------------------------------------------------------------------
  307.   def to_grayscale
  308.     for i in 0...width
  309.       for j in 0...height
  310.         color = get_pixel(i, j)
  311.         next if color.alpha == 0
  312.         gray = color.red * 0.3 + color.green * 0.59 + color.blue * 0.11
  313.         self.buffer.set_pixel(i, j, Color.new(gray, gray, gray, color.alpha))
  314.       end
  315.     end
  316.     buffer
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ● 马赛克效果
  320.   #--------------------------------------------------------------------------
  321.   def mosaic(*args)
  322.     case args.size
  323.     when 0
  324.       rect = self.rect
  325.       msize = 8
  326.     when 1
  327.       rect = self.rect
  328.       msize = args[1]
  329.     when 2
  330.       rect = args[0]
  331.       msize = args[1]
  332.     when 5
  333.       rect = Rect.new(args[0], args[1], rect[2], rect[3])
  334.       msize = args[4]
  335.     else
  336.       raise ArgumentError
  337.     end
  338.     msize = (msize || MOSAIC_SIZE).limit(1, 32)
  339.     msize = [msize, [rect.width, rect.height].max / 8].min
  340.     return clone_to_buffer if msize == 1
  341.     if rect == self.rect
  342.       start_x = -rand(msize)
  343.       start_y = -rand(msize)
  344.       clear_buffer
  345.     else
  346.       start_x = rect.x
  347.       start_y = rect.y
  348.       clone_to_buffer
  349.     end
  350.     start_x.step(rect.width - 1, msize) do |i|
  351.       start_y.step(rect.height - 1, msize) do |j|
  352.         center_x = (i + msize / 2).limit(0, rect.width - 1)
  353.         center_y = (j + msize / 2).limit(0, rect,height - 1)
  354.         buffer.fill_rect(i, j, [msize, rect.width - i].min,
  355.           [msize, rect.height - j].min, get_pixel(center_x, center_y))
  356.       end
  357.     end
  358.     buffer
  359.   end
  360.   #--------------------------------------------------------------------------
  361.   # ● 模糊效果
  362.   #--------------------------------------------------------------------------
  363.   def blur(r = BLUR_RADIUS)
  364.     r = (r || BLUR_RADIUS).limit(1, 4)
  365.     clear_buffer
  366.     diameter = 1 + r * 2
  367.     for i in 0...diameter
  368.       for j in 0...diameter
  369.         distance = Math.hypot(r - i, r - j)
  370.         str = [(128 * (r - distance + 1) / (r + 1)).round, 0].max
  371.         self.buffer.blt(i - r, j - r, @buffer, rect, str)
  372.       end
  373.     end
  374.     buffer
  375.   end
  376.   #--------------------------------------------------------------------------
  377.   # ● 更改色调
  378.   #--------------------------------------------------------------------------
  379.   def tone_change(*args)
  380.     case args.size
  381.     when 1
  382.       tone = args[0]
  383.     when 3
  384.       tone = Tone.new(args[0], args[1], args[2], 0)
  385.     when 4
  386.       tone = Tone.new(*args)
  387.     else
  388.       raise ArgumentError
  389.     end
  390.     return clone_to_buffer if tone == Tone.new(0, 0, 0, 0)
  391.     return to_grayscale if tone == Tone.new(0, 0, 0, 255)
  392.     grayscale = (255.0 - tone.gray) / 255
  393.     for i in 0...width
  394.       for j in 0...height
  395.         color = get_pixel(i, j)
  396.         next if color.alpha == 0
  397.         n = [color.red, color.green, color.blue]
  398.         gray = n[0] * 0.3 + n[1] * 0.59 + n[2] * 0.11 if tone.gray > 0
  399.         [:red, :green, :blue].each_with_index do |sym, k|
  400.           n[k] = [[n[k] + tone.send(sym), 0].max, 255].min
  401.           n[k] = n[k].blend(gray, grayscale) if tone.gray > 0
  402.         end
  403.         self.buffer.set_pixel(i, j, Color.new(n[0], n[1], n[2], color.alpha))
  404.       end
  405.     end
  406.     buffer
  407.   end
  408.   #--------------------------------------------------------------------------
  409.   # ● 上述功能的破坏性操作
  410.   #--------------------------------------------------------------------------
  411.   def to_grayscale!;      to_grayscale; clone_from_buffer;                end
  412.   def mosaic!(*args);     mosaic(*args); clone_from_buffer;               end
  413.   def blur!(r = 2);       blur(r); clone_from_buffer;                     end
  414.   def tone_change!(tone); tone_change(tone); clone_from_buffer;           end
  415.   #--------------------------------------------------------------------------
  416.   # ● 渐变填充位图
  417.   #     args : 绘制参数,写法同RGSS2
  418.   #       参数1:x, y, width, height, color1, color2[, vertical]
  419.   #       参数2:rect, color1, color2[, vertical]
  420.   #--------------------------------------------------------------------------
  421.   def gradient_fill_rect(*args)
  422.     case args[0]
  423.     when Numeric
  424.       x, y, width, height, color1, color2, vertical = args
  425.     when Rect
  426.       rect, color1, color2, vertical = args
  427.       x = args[0].x
  428.       y = args[0].y
  429.       width = args[0].width
  430.       height = args[0].height
  431.     end
  432.     color = color1.clone
  433.     increment = vertical ? height : width
  434.     step_r = (color2.red - color1.red) / increment
  435.     step_g = (color2.green - color1.green) / increment
  436.     step_b = (color2.blue - color1.blue) / increment
  437.     step_a = (color2.alpha - color1.alpha) / increment
  438.     increment.times do |i|
  439.       if vertical
  440.         fill_rect(x, y + i, width, 1, color)
  441.       else
  442.         fill_rect(x + i, y, 1, height, color)
  443.       end
  444.       color.set(color.red + step_r, color.green + step_g,
  445.         color.blue + step_b, color.alpha + step_a)
  446.     end
  447.   end
  448.   #--------------------------------------------------------------------------
  449.   # ● 清除位图
  450.   #     args : 参数,写法同RGSS2
  451.   #       参数1:x, y, width, height
  452.   #       参数2:rect
  453.   #--------------------------------------------------------------------------
  454.   def clear_rect(*args)
  455.     case args.size
  456.     when 1
  457.       fill_rect(args[0], Color.new(0, 0, 0, 0))
  458.     when 4
  459.       fill_rect(args[0], args[1], args[2], args[3], Color.new(0, 0, 0, 0))
  460.     else
  461.       raise ArgumentError
  462.     end
  463.   end
  464.   #--------------------------------------------------------------------------
  465.   # ● 绘制带有阴影或描边的文字
  466.   #     args : 参数,写法同RGSS2
  467.   #       参数1:x, y, width, height, str[, align[, shadow_direction[, color]]]
  468.   #       参数2:rect, str[, align[, shadow_direction[, color]]]
  469.   #     shadow_direction : 阴影的方向(0/1/3/5/7/9),0取消,1/3/7/9四角,5描边
  470.   #     color : 阴影的颜色,不透明度会自动调整
  471.   #--------------------------------------------------------------------------
  472.   def draw_text(*args)
  473.     case args[0]
  474.     when Numeric
  475.       x, y, width, height, text, align, shadow_direction, shadow_color = args
  476.       align ||= 0
  477.       shadow_direction ||= SHADOW_DIRECTION
  478.       shadow_color ||= Color.new(0, 0, 0)
  479.       shadow_color.alpha = font.color.alpha * SHADOW_OPACITY / 255
  480.     when Rect
  481.       rect, text, align, shadow_direction, shadow_color = args
  482.       x = args[0].x
  483.       y = args[0].y
  484.       width = args[0].width
  485.       height = args[0].height
  486.       align ||= 0
  487.       shadow_direction ||= SHADOW_DIRECTION
  488.       shadow_color ||= Color.new(0, 0, 0)
  489.       shadow_color.alpha = font.color.alpha * SHADOW_OPACITY / 255
  490.     end
  491.     text = text.to_s unless text.is_a?(String)
  492.     color_temp = font.color.clone
  493.     if shadow_direction != 0
  494.       font.color = shadow_color
  495.       if shadow_direction == 5
  496.         buffer_rect = Rect.new(0, 0, width, height)
  497.         clear_buffer
  498.         buffer.font = font.clone
  499.         buffer.font.color = shadow_color
  500.         buffer.sailcat_sepcore_draw_text(buffer_rect, text, align)
  501.         blt(x - 1,y - 1, buffer, buffer_rect)
  502.         blt(x - 1,y + 1, buffer, buffer_rect)
  503.         blt(x + 1,y - 1, buffer, buffer_rect)
  504.         blt(x + 1,y + 1, buffer, buffer_rect)
  505.       else
  506.         a = shadow_direction % 6 == 1 ? -1 : 1
  507.         b = shadow_direction / 6 == 1 ? -1 : 1
  508.         sailcat_sepcore_draw_text(x + a, y + b, width, height, text, align)
  509.       end
  510.       font.color = color_temp
  511.     end
  512.     sailcat_sepcore_draw_text(x, y, width, height, text, align)
  513.   end
  514. end
  515.  
  516. #==============================================================================
  517. # ■ Color
  518. #==============================================================================
  519. class Color
  520.   #--------------------------------------------------------------------------
  521.   # ● 从 HTML 代码获得颜色
  522.   #     string : HTML颜色字符串,为#RRGGBB或#RRGGBBAA形式
  523.   #--------------------------------------------------------------------------
  524.   def self.html(string)
  525.     raise ArgumentError unless string.size != 7 or string.size != 9
  526.     red = string[1..2].to_i(16)
  527.     green = string[3..4].to_i(16)
  528.     blue = string[5..6].to_i(16)
  529.     alpha = string[7..8] == "" ? 255 : string[7..8].to_i(16)
  530.     new(red, green, blue, alpha)
  531.   end
  532.   #--------------------------------------------------------------------------
  533.   # ● 从 ARGB 值获得颜色
  534.   #     value : 用以表示ARGB颜色值的整数
  535.   #--------------------------------------------------------------------------
  536.   def self.argb(value)
  537.     alpha = (value & 4278190080 != 0) ? (value & 4278190080) >> 24 : 255
  538.     red = (value & 16711680) >> 16
  539.     green = (value & 65280) >> 8
  540.     blue = value & 255
  541.     new(red, green, blue, alpha)
  542.   end
  543. end
  544.  
  545. #==============================================================================
  546. # ■ Rect
  547. #==============================================================================
  548. class Rect
  549.   #--------------------------------------------------------------------------
  550.   # ● 矩形的扩张
  551.   #     ox : 水平扩张度
  552.   #     oy : 垂直扩张度
  553.   #--------------------------------------------------------------------------
  554.   def inflate(ox, oy)
  555.     ox = [ox, -width / 2].max
  556.     oy = [oy, -height / 2].max
  557.     set(x - ox, y - oy, width + ox * 2, height + oy * 2)
  558.     self
  559.   end
  560.   #--------------------------------------------------------------------------
  561.   # ● 矩形的偏移
  562.   #     ox : 水平偏移量
  563.   #     oy : 垂直偏移量
  564.   #--------------------------------------------------------------------------
  565.   def offset(ox, oy)
  566.     set(x + ox, y + oy, width, height)
  567.     self
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # ● 矩形的四边定义(只读属性)
  571.   #--------------------------------------------------------------------------
  572.   def left;       x;            end     # 左边
  573.   def right;      x + width;    end     # 右边
  574.   def top;        y;            end     # 上边
  575.   def bottom;     y + height;   end     # 下边
  576. end
  577.  
  578. #==============================================================================
  579. # ■ RPG::Sprite
  580. #==============================================================================
  581. module RPG
  582.   class Sprite
  583.     S = SailCat::Core_Config::FRAME_SKIP
  584.     def damage(value, critical)
  585.       dispose_damage
  586.       if value.is_a?(Numeric)
  587.         damage_string = value.abs.to_s
  588.       else
  589.         damage_string = value.to_s
  590.       end
  591.       bitmap = Bitmap.new(160, 48)
  592.       bitmap.font.name = "Arial Black"
  593.       bitmap.font.size = 32
  594.       bitmap.font.color.set(0, 0, 0)
  595.       bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  596.       bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  597.       bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  598.       bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  599.       if value.is_a?(Numeric) and value < 0
  600.         bitmap.font.color.set(176, 255, 144)
  601.       else
  602.         bitmap.font.color.set(255, 255, 255)
  603.       end
  604.       bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  605.       if critical
  606.         bitmap.font.size = 20
  607.         bitmap.font.color.set(0, 0, 0)
  608.         bitmap.draw_text(-1, -1, 160, 20, Vocab.critical, 1)
  609.         bitmap.draw_text(+1, -1, 160, 20, Vocab.critical, 1)
  610.         bitmap.draw_text(-1, +1, 160, 20, Vocab.critical, 1)
  611.         bitmap.draw_text(+1, +1, 160, 20, Vocab.critical, 1)
  612.         bitmap.font.color.set(255, 255, 255)
  613.         bitmap.draw_text(0, 0, 160, 20, Vocab.critical, 1)
  614.       end
  615.       @_damage_sprite = ::Sprite.new(self.viewport)
  616.       @_damage_sprite.bitmap = bitmap
  617.       @_damage_sprite.ox = 80
  618.       @_damage_sprite.oy = 20
  619.       @_damage_sprite.x = self.x
  620.       @_damage_sprite.y = self.y - self.oy / 2
  621.       @_damage_sprite.z = 3000
  622.       @_damage_duration = 40
  623.     end
  624.     def update
  625.       super
  626.       if @_whiten_duration > 0
  627.         @_whiten_duration -= 1
  628.         self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  629.       end
  630.       if @_appear_duration > 0
  631.         @_appear_duration -= 1
  632.         self.opacity = (16 - @_appear_duration) * 16
  633.       end
  634.       if @_escape_duration > 0
  635.         @_escape_duration -= 1
  636.         self.opacity = 256 - (32 - @_escape_duration) * 10
  637.       end
  638.       if @_collapse_duration > 0
  639.         @_collapse_duration -= 1
  640.         self.opacity = 256 - (48 - @_collapse_duration) * 6
  641.       end
  642.       if @_damage_duration > 0
  643.         @_damage_duration -= 1
  644.         case @_damage_duration
  645.         when 38..39
  646.           @_damage_sprite.y -= 4
  647.         when 36..37
  648.           @_damage_sprite.y -= 2
  649.         when 34..35
  650.           @_damage_sprite.y += 2
  651.         when 28..33
  652.           @_damage_sprite.y += 4
  653.         end
  654.         @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
  655.         if @_damage_duration == 0
  656.           dispose_damage
  657.         end
  658.       end
  659.       if @_animation != nil and (Graphics.frame_count % S == 0)
  660.         @_animation_duration -= 1
  661.         update_animation
  662.       end
  663.       if @_loop_animation != nil and (Graphics.frame_count % S == 0)
  664.         update_loop_animation
  665.         @_loop_animation_index += 1
  666.         @_loop_animation_index %= @_loop_animation.frame_max
  667.       end
  668.       if @_blink
  669.         @_blink_count = (@_blink_count + 1) % 32
  670.         if @_blink_count < 16
  671.           alpha = (16 - @_blink_count) * 6
  672.         else
  673.           alpha = (@_blink_count - 16) * 6
  674.         end
  675.         self.color.set(255, 255, 255, alpha)
  676.       end
  677.       @@_animations.clear
  678.     end
  679.     def animation_process_timing(timing, hit)
  680.       if (timing.condition == 0) or
  681.          (timing.condition == 1 and hit == true) or
  682.          (timing.condition == 2 and hit == false)
  683.         if timing.se.name != ""
  684.           se = timing.se
  685.           Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
  686.         end
  687.         case timing.flash_scope
  688.         when 1
  689.           self.flash(timing.flash_color, timing.flash_duration * S)
  690.         when 2
  691.           if self.viewport != nil
  692.             self.viewport.flash(timing.flash_color, timing.flash_duration * S)
  693.           end
  694.         when 3
  695.           self.flash(nil, timing.flash_duration * S)
  696.         end
  697.       end
  698.     end
  699.   end
  700. end
  701.  
  702. #==============================================================================
  703. # ■ Game_Switches
  704. #==============================================================================
  705. class Game_Switches
  706.   include SailCat::Core_Config
  707.   #--------------------------------------------------------------------------
  708.   # ● 获取开关
  709.   #     switch_id : 开关 ID
  710.   #--------------------------------------------------------------------------
  711.   def [](switch_id)
  712.     switch_id <= SWITCH_MAX ? (@data[switch_id] || false) : false
  713.   end
  714.   #--------------------------------------------------------------------------
  715.   # ● 设置开关
  716.   #     switch_id : 开关 ID
  717.   #     value     : ON (true) / OFF (false)
  718.   #--------------------------------------------------------------------------
  719.   def []=(switch_id, value)
  720.     @data[switch_id] = value if switch_id <= SWITCH_MAX
  721.   end
  722. end
  723.  
  724. #==============================================================================
  725. # ■ Game_Variables
  726. #==============================================================================
  727. class Game_Variables
  728.   include SailCat::Core_Config
  729.   #--------------------------------------------------------------------------
  730.   # ● 获取变量
  731.   #     variable_id : 变量 ID
  732.   #--------------------------------------------------------------------------
  733.   def [](variable_id)
  734.     variable_id <= VARIABLE_MAX ? (@data[variable_id] || 0) : 0
  735.   end
  736.   #--------------------------------------------------------------------------
  737.   # ● 设置变量
  738.   #     variable_id : 变量 ID
  739.   #     value       : 变量的值
  740.   #--------------------------------------------------------------------------
  741.   def []=(variable_id, value)
  742.     @data[variable_id] = value if variable_id <= VARIABLE_MAX
  743.   end
  744. end
  745.  
  746. #==============================================================================
  747. # ■ Game_SelfSwitches
  748. #==============================================================================
  749. class Game_SelfSwitches
  750.   #--------------------------------------------------------------------------
  751.   # ● 获取独立开关
  752.   #     key : 键
  753.   #--------------------------------------------------------------------------
  754.   def [](key)
  755.     return @data[key] || false
  756.   end
  757. end
  758.  
  759. #==============================================================================
  760. # ■ Game_Battler
  761. #==============================================================================
  762. class Game_Battler
  763.   include SailCat::Core_Config
  764.   #--------------------------------------------------------------------------
  765.   # ● 方法重定义
  766.   #--------------------------------------------------------------------------
  767.   unless method_defined?(:sailcat_sepcore_initialize)
  768.     alias sailcat_sepcore_initialize initialize
  769.   end
  770.   #--------------------------------------------------------------------------
  771.   # ● 初始化对像
  772.   #--------------------------------------------------------------------------
  773.   def initialize
  774.     sailcat_sepcore_initialize
  775.     post_initialize
  776.   end
  777.   #--------------------------------------------------------------------------
  778.   # ● 后续处理内容
  779.   #--------------------------------------------------------------------------
  780.   def post_initialize
  781.   end
  782.   #--------------------------------------------------------------------------
  783.   # ● 获取 MaxHP
  784.   #--------------------------------------------------------------------------
  785.   def maxhp
  786.     n = (base_maxhp + @maxhp_plus).limit(1, MAXHP_MAX_BATTLER)
  787.     n *= @states.product {|i| $data_states[i].maxhp_rate / 100.0}
  788.     Integer(n).limit(1, MAXHP_MAX_BATTLER)
  789.   end
  790.   #--------------------------------------------------------------------------
  791.   # ● 获取 MaxSP
  792.   #--------------------------------------------------------------------------
  793.   def maxsp
  794.     n = (base_maxsp + @maxsp_plus).limit(0, MAXSP_MAX)
  795.     n *= @states.product {|i| $data_states[i].maxsp_rate / 100.0}
  796.     Integer(n).limit(0, MAXSP_MAX)
  797.   end
  798.   #--------------------------------------------------------------------------
  799.   # ● 获取力量
  800.   #--------------------------------------------------------------------------
  801.   def str
  802.     n = (base_str + @str_plus).limit(1, STR_MAX)
  803.     n *= @states.product {|i| $data_states[i].str_rate / 100.0}
  804.     Integer(n).limit(1, STR_MAX)
  805.   end
  806.   #--------------------------------------------------------------------------
  807.   # ● 获取灵巧
  808.   #--------------------------------------------------------------------------
  809.   def dex
  810.     n = (base_dex + @dex_plus).limit(1, STR_MAX)
  811.     n *= @states.product {|i| $data_states[i].dex_rate / 100.0}
  812.     Integer(n).limit(1, DEX_MAX)
  813.   end
  814.   #--------------------------------------------------------------------------
  815.   # ● 获取速度
  816.   #--------------------------------------------------------------------------
  817.   def agi
  818.     n = (base_agi + @agi_plus).limit(1, AGI_MAX)
  819.     n *= @states.product {|i| $data_states[i].agi_rate / 100.0}
  820.     Integer(n).limit(1, AGI_MAX)
  821.   end
  822.   #--------------------------------------------------------------------------
  823.   # ● 获取魔力
  824.   #--------------------------------------------------------------------------
  825.   def int
  826.     n = (base_int + @int_plus).limit(1, INT_MAX)
  827.     n *= @states.product {|i| $data_states[i].int_rate / 100.0}
  828.     Integer(n).limit(1, INT_MAX)
  829.   end
  830.   #--------------------------------------------------------------------------
  831.   # ● 设置 MaxHP
  832.   #     maxhp : 新的 MaxHP
  833.   #--------------------------------------------------------------------------
  834.   def maxhp=(maxhp)
  835.     @maxhp_plus += maxhp - self.maxhp
  836.     @maxhp_plus = @maxhp_plus.limit(-MAXHP_MAX_BATTLER, MAXHP_MAX_BATTLER)
  837.     @hp = [@hp, self.maxhp].min
  838.   end
  839.   #--------------------------------------------------------------------------
  840.   # ● 设置 MaxSP
  841.   #     maxsp : 新的 MaxSP
  842.   #--------------------------------------------------------------------------
  843.   def maxsp=(maxsp)
  844.     @maxsp_plus += maxsp - self.maxsp
  845.     @maxsp_plus = @maxsp_plus.limit(-MAXSP_MAX, MAXSP_MAX)
  846.     @sp = [@sp, self.maxsp].min
  847.   end
  848.   #--------------------------------------------------------------------------
  849.   # ● 设置力量
  850.   #     str : 新的力量
  851.   #--------------------------------------------------------------------------
  852.   def str=(str)
  853.     @str_plus += str - self.str
  854.     @str_plus = @str_plus.limit(-STR_MAX, STR_MAX)
  855.   end
  856.   #--------------------------------------------------------------------------
  857.   # ● 设置灵巧
  858.   #     dex : 新的灵巧
  859.   #--------------------------------------------------------------------------
  860.   def dex=(dex)
  861.     @dex_plus += dex - self.dex
  862.     @dex_plus = @dex_plus.limit(-DEX_MAX, DEX_MAX)
  863.   end
  864.   #--------------------------------------------------------------------------
  865.   # ● 设置速度
  866.   #     agi : 新的速度
  867.   #--------------------------------------------------------------------------
  868.   def agi=(agi)
  869.     @agi_plus += agi - self.agi
  870.     @agi_plus = @agi_plus.limit(-AGI_MAX, AGI_MAX)
  871.   end
  872.   #--------------------------------------------------------------------------
  873.   # ● 设置魔力
  874.   #     int : 新的魔力
  875.   #--------------------------------------------------------------------------
  876.   def int=(int)
  877.     @int_plus += int - self.int
  878.     @int_plus = @int_plus.limit(-INT_MAX, INT_MAX)
  879.   end
  880.   #--------------------------------------------------------------------------
  881.   # ● HP和SP的比例
  882.   #--------------------------------------------------------------------------
  883.   def hp_rate;  self.hp.to_f / self.maxhp;                          end
  884.   def sp_rate;  self.maxsp == 0 ? 1.0 : self.sp.to_f / self.maxsp;  end
  885.   #--------------------------------------------------------------------------
  886.   # ● 预设的RGSS基本默认值,用于计算通常攻击伤害
  887.   #--------------------------------------------------------------------------
  888.   def variance;       15;                                 end   # 分散度
  889.   def atk_f;          100;                                end   # 攻击力F
  890.   def pdef_f;         100;                                end   # 防御力F
  891.   def mdef_f;         0;                                  end   # 魔防力F
  892.   def str_f;          100;                                end   # 力量F
  893.   def dex_f;          0;                                  end   # 灵巧F
  894.   def agi_f;          0;                                  end   # 速度F
  895.   def int_f;          0;                                  end   # 魔力F
  896.   def eva_f;          100;                                end   # 回避F
  897.   def common_event_id;0;                                  end   # 公共事件ID
  898.   #--------------------------------------------------------------------------
  899.   # ● 预设的RGSS战斗系统的其他系数默认值
  900.   #--------------------------------------------------------------------------
  901.   def critical_rate;  4;                                  end   # 基础会心率
  902.   def eva_rate;       8;                                  end   # 基础回避率
  903.   def critical_fold;  200;                                end   # 基础会心倍率
  904.   def guarding_fold;  200;                                end   # 基础防御倍率
  905.   def damage_rate;    20;                                 end   # 基础伤害倍率
  906.   def pdef_rate;      50;                                 end   # 物防力折算率
  907.   def mdef_rate;      50;                                 end   # 魔防力折算率
  908.   def slip_rate;      10;                                 end   # 连续伤害倍率
  909.   def slip_variance;  15;                                 end   # 连续伤害分散
  910.   #--------------------------------------------------------------------------
  911.   # ● 战斗者的阵营判定
  912.   #--------------------------------------------------------------------------
  913.   def actor?;           self.is_a?(Game_Actor);           end   # 角色判定
  914.   def enemy?;           self.is_a?(Game_Enemy);           end   # 敌人判定
  915.   def friendly?(other); self.actor? ^ other.enemy?;       end   # 友好判定
  916.   def hostile?(other);  not friendly?(other);             end   # 敌对判定
  917.   #--------------------------------------------------------------------------
  918.   # ● 用于攻击动作的零号特技
  919.   #--------------------------------------------------------------------------
  920.   def attack_skill
  921.     skill = RPG::Skill.new
  922.     skill.id = 0
  923.     skill.scope = 1
  924.     skill.animation1_id = self.animation1_id
  925.     skill.animation2_id = self.animation2_id
  926.     skill.common_event_id = self.common_event_id
  927.     skill.atk_f = self.atk_f
  928.     skill.eva_f = self.eva_f
  929.     skill.str_f = self.str_f
  930.     skill.dex_f = self.dex_f
  931.     skill.agi_f = self.agi_f
  932.     skill.int_f = self.int_f
  933.     skill.hit = 100
  934.     skill.pdef_f = self.pdef_f
  935.     skill.mdef_f = self.mdef_f
  936.     skill.variance = self.variance
  937.     skill.element_set = self.element_set
  938.     skill.plus_state_set = self.plus_state_set
  939.     skill.minus_state_set = self.minus_state_set
  940.     skill
  941.   end
  942.   #--------------------------------------------------------------------------
  943.   # ● 应用通常攻击效果
  944.   #     attacker : 攻击者 (battler)
  945.   #--------------------------------------------------------------------------
  946.   def attack_effect(attacker)
  947.     # 攻击准备
  948.     pre_attack(attacker)
  949.     # 应用零号特技效果
  950.     perform_skill(attacker, attacker.attack_skill)
  951.     # 攻击收尾
  952.     post_attack(attacker)
  953.     return true
  954.   end
  955.   #--------------------------------------------------------------------------
  956.   # ● 攻击准备
  957.   #--------------------------------------------------------------------------
  958.   def pre_attack(attacker)
  959.     # 清除会心一击标志
  960.     self.critical = false
  961.   end
  962.   #--------------------------------------------------------------------------
  963.   # ● 攻击收尾
  964.   #--------------------------------------------------------------------------
  965.   def post_attack(attacker)
  966.   end
  967.   #--------------------------------------------------------------------------
  968.   # ● 应用特技效果
  969.   #     user  : 特技的使用者 (battler)
  970.   #     skill : 特技
  971.   #--------------------------------------------------------------------------
  972.   def skill_effect(user, skill)
  973.     # 特技判定
  974.     return false unless skill_can_apply?(user, skill) or skill.id == 0
  975.     # 有效标志
  976.     @effective = false
  977.     # 特技准备
  978.     pre_skill(user, skill)
  979.     # 特技动作
  980.     perform_skill(user, skill)
  981.     # 特技收尾
  982.     post_skill(user, skill)
  983.     return @effective
  984.   end
  985.   #--------------------------------------------------------------------------
  986.   # ● 特技应用判定
  987.   #--------------------------------------------------------------------------
  988.   def skill_can_apply?(user, skill)
  989.     # 特技的效果范围不符的情况下
  990.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  991.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  992.       # 判定失败
  993.       return false
  994.     end
  995.     # 判定成功
  996.     return true
  997.   end
  998.   #--------------------------------------------------------------------------
  999.   # ● 特技准备
  1000.   #--------------------------------------------------------------------------
  1001.   def pre_skill(user, skill)
  1002.     # 清除会心一击标志
  1003.     self.critical = false
  1004.     # 公共事件 ID 是有效的情况下,设置为有效标志
  1005.     @effective |= skill.common_event_id > 0
  1006.   end
  1007.   #--------------------------------------------------------------------------
  1008.   # ● 特技动作
  1009.   #--------------------------------------------------------------------------
  1010.   def perform_skill(user, skill)
  1011.     # 命中判定
  1012.     if judge_skill_hit(user, skill)
  1013.       # 计算伤害
  1014.       calculate_skill_damage(user, skill)
  1015.       # 应用击中效果
  1016.       apply_hit(user, skill)
  1017.     else
  1018.       # 应用未击中效果
  1019.       apply_miss(user, skill)
  1020.     end
  1021.   end
  1022.   #--------------------------------------------------------------------------
  1023.   # ● 特技收尾
  1024.   #--------------------------------------------------------------------------
  1025.   def post_skill(user, skill)
  1026.   end
  1027.   #--------------------------------------------------------------------------
  1028.   # ● 特技命中判定
  1029.   #--------------------------------------------------------------------------
  1030.   def judge_skill_hit(user, skill)
  1031.     judge_skill_hit1(user, skill) and judge_skill_hit2(user, skill)
  1032.   end
  1033.   #--------------------------------------------------------------------------
  1034.   # ● 第一命中判定
  1035.   #--------------------------------------------------------------------------
  1036.   def judge_skill_hit1(user, skill)
  1037.     hit = skill.hit
  1038.     hit = hit * user.hit / 100 if skill.atk_f > 0
  1039.     @effective |= hit < 100
  1040.     rand(100) < hit
  1041.   end
  1042.   #--------------------------------------------------------------------------
  1043.   # ● 第二命中判定
  1044.   #--------------------------------------------------------------------------
  1045.   def judge_skill_hit2(user, skill)
  1046.     if skill_can_heal?(user, skill) or cant_evade?
  1047.       hit = 100
  1048.     else
  1049.       eva = self.eva_rate * self.agi / user.dex + self.eva
  1050.       hit = 100 - eva * skill.eva_f / 100
  1051.     end
  1052.     @effective |= hit < 100
  1053.     rand(100) < hit
  1054.   end
  1055.   #--------------------------------------------------------------------------
  1056.   # ● 技能回复判定
  1057.   #--------------------------------------------------------------------------
  1058.   def skill_can_heal?(user, skill)
  1059.     a = (skill.id == 0 ? user.atk : skill.power) <=> 0
  1060.     a * elements_correct(skill.element_set) < 0
  1061.   end
  1062.   #--------------------------------------------------------------------------
  1063.   # ● 计算伤害
  1064.   #--------------------------------------------------------------------------
  1065.   def calculate_skill_damage(user, skill)
  1066.     # 计算基本威力
  1067.     calculate_basic(user, skill)
  1068.     # 计算倍率
  1069.     calculate_rate(user, skill)
  1070.     # 计算伤害修正
  1071.     calculate_modifier(user, skill)
  1072.   end
  1073.   #--------------------------------------------------------------------------
  1074.   # ● 计算基本威力
  1075.   #--------------------------------------------------------------------------
  1076.   def calculate_basic(user, skill)
  1077.     # 技能的威力
  1078.     calculate_basic_atk(user, skill)
  1079.     # 技能对象的防御力
  1080.     calculate_basic_def(user, skill)
  1081.   end
  1082.   #--------------------------------------------------------------------------
  1083.   # ● 攻击者的攻击力
  1084.   #--------------------------------------------------------------------------
  1085.   def calculate_basic_atk(user, skill)
  1086.     self.damage = skill.power
  1087.     if self.damage >= 0
  1088.       self.damage += user.atk * skill.atk_f / 100
  1089.     else
  1090.       self.damage -= user.atk * skill.atk_f / 100
  1091.     end
  1092.   end
  1093.   #--------------------------------------------------------------------------
  1094.   # ● 对象的防御力
  1095.   #--------------------------------------------------------------------------
  1096.   def calculate_basic_def(user, skill)
  1097.     if self.damage > 0
  1098.       self.damage -= self.pdef * skill.pdef_f * self.pdef_rate / 10000
  1099.       self.damage -= self.mdef * skill.mdef_f * self.mdef_rate / 10000
  1100.       self.damage = [self.damage, 0].max
  1101.     end
  1102.   end
  1103.   #--------------------------------------------------------------------------
  1104.   # ● 计算伤害倍率
  1105.   #--------------------------------------------------------------------------
  1106.   def calculate_rate(user, skill)
  1107.     rate = self.damage_rate
  1108.     rate += user.str * skill.str_f / 100
  1109.     rate += user.dex * skill.dex_f / 100
  1110.     rate += user.agi * skill.agi_f / 100
  1111.     rate += user.int * skill.int_f / 100
  1112.     self.damage = self.damage * rate / self.damage_rate
  1113.   end
  1114.   #--------------------------------------------------------------------------
  1115.   # ● 计算伤害修正
  1116.   #--------------------------------------------------------------------------
  1117.   def calculate_modifier(user, skill)
  1118.     # 计算属性修正
  1119.     calculate_element(skill.element_set)
  1120.     # 计算会心修正
  1121.     calculate_critical(user, skill)
  1122.     # 计算防御修正
  1123.     calculate_guarding(user, skill)
  1124.     # 计算分散修正
  1125.     calculate_variance(skill.variance)
  1126.   end
  1127.   #--------------------------------------------------------------------------
  1128.   # ● 计算属性修正
  1129.   #--------------------------------------------------------------------------
  1130.   def calculate_element(element_set)
  1131.     case self.damage
  1132.     when Numeric
  1133.       self.damage = self.damage * elements_correct(element_set) / 100
  1134.     when Array
  1135.       self.damage.each_index do |i|
  1136.         self.damage[i] = self.damage[i] * elements_correct(element_set) / 100
  1137.       end
  1138.     end
  1139.   end
  1140.   #--------------------------------------------------------------------------
  1141.   # ● 计算会心修正
  1142.   #--------------------------------------------------------------------------
  1143.   def calculate_critical(user, skill)
  1144.     if self.damage > 0 and judge_critical(user, skill)
  1145.       self.damage = self.damage * user.critical_fold / 100
  1146.       self.critical = true
  1147.     end
  1148.   end
  1149.   #--------------------------------------------------------------------------
  1150.   # ● 计算防御修正
  1151.   #--------------------------------------------------------------------------
  1152.   def calculate_guarding(user, skill)
  1153.     if self.damage > 0 and self.guarding?
  1154.       self.damage = self.damage * 100 / self.guarding_fold
  1155.     end
  1156.   end
  1157.   #--------------------------------------------------------------------------
  1158.   # ● 计算分散修正
  1159.   #--------------------------------------------------------------------------
  1160.   def calculate_variance(variance)
  1161.     case self.damage
  1162.     when Numeric
  1163.       self.damage = self.damage.variance(variance, 100)
  1164.     when Array
  1165.       self.damage.each_index do |i|
  1166.         self.damage[i] = self.damage[i].variance(variance, 100)
  1167.       end
  1168.     end
  1169.   end
  1170.   #--------------------------------------------------------------------------
  1171.   # ● 会心一击判定
  1172.   #--------------------------------------------------------------------------
  1173.   def judge_critical(user, skill)
  1174.     rand(100) < (skill.id == 0 ? user.critical_rate * user.dex / self.agi : 0)
  1175.   end
  1176.   #--------------------------------------------------------------------------
  1177.   # ● 应用击中结果
  1178.   #--------------------------------------------------------------------------
  1179.   def apply_hit(user, skill)
  1180.     # 状态冲击解除
  1181.     if skill.id == 0 or skill.atk_f > 0
  1182.       remove_states_shock
  1183.       @effective = true
  1184.     end
  1185.     # HP 的伤害计算
  1186.     last_hp = self.hp
  1187.     self.hp -= self.damage
  1188.     @effective |= last_hp != self.hp
  1189.     # 状态变化
  1190.     @states_changed = false
  1191.     @effective |= states_plus(user.plus_state_set)
  1192.     @effective |= states_minus(user.minus_state_set)
  1193.     # 不是普通攻击,技能也没有伤害设定的情况下
  1194.     if skill.id > 0 and skill.power == 0 and skill.atk_f == 0
  1195.       # 伤害值设为空或 Miss
  1196.       self.damage = @states_changed ? "" : Vocab.miss
  1197.     end
  1198.     # 不在战斗中的情况下,伤害值设为nil
  1199.     self.damage = nil unless $game_temp.in_battle
  1200.   end
  1201.   #--------------------------------------------------------------------------
  1202.   # ● 应用未击中结果
  1203.   #--------------------------------------------------------------------------
  1204.   def apply_miss(user, skill)
  1205.     # 伤害设置为Miss
  1206.     self.damage = $game_temp.in_battle ? Vocab.miss : nil
  1207.     # 清除会心一击标志
  1208.     self.critical = false
  1209.   end
  1210.   #--------------------------------------------------------------------------
  1211.   # ● 应用物品效果
  1212.   #     item : 物品
  1213.   #--------------------------------------------------------------------------
  1214.   def item_effect(item)
  1215.     # 物品判定
  1216.     return false unless item_can_apply?(item)
  1217.     # 有效标志
  1218.     @effective = false
  1219.     # 物品准备
  1220.     pre_item(item)
  1221.     # 物品动作
  1222.     perform_item(item)
  1223.     # 物品收尾
  1224.     post_item(item)
  1225.     return @effective
  1226.   end
  1227.   #--------------------------------------------------------------------------
  1228.   # ● 物品应用判定
  1229.   #--------------------------------------------------------------------------
  1230.   def item_can_apply?(item)
  1231.     # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  1232.     # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  1233.     if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
  1234.        ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
  1235.       # 过程结束
  1236.       return false
  1237.     end
  1238.     return true
  1239.   end
  1240.   #--------------------------------------------------------------------------
  1241.   # ● 物品准备
  1242.   #--------------------------------------------------------------------------
  1243.   def pre_item(item)
  1244.     # 清除会心一击标志
  1245.     self.critical = false
  1246.     # 公共事件 ID 是有效的情况下,设置为有效标志
  1247.     @effective |= item.common_event_id > 0
  1248.   end
  1249.   #--------------------------------------------------------------------------
  1250.   # ● 物品动作
  1251.   #--------------------------------------------------------------------------
  1252.   def perform_item(item)
  1253.     # 命中判定
  1254.     if judge_item_hit(item)
  1255.       # 计算伤害
  1256.       calculate_item_damage(item)
  1257.       # 应用击中效果
  1258.       apply_item_hit(item)
  1259.     else
  1260.       # 应用未击中效果
  1261.       apply_item_miss(item)
  1262.     end
  1263.   end
  1264.   #--------------------------------------------------------------------------
  1265.   # ● 使用物品后续处理
  1266.   #--------------------------------------------------------------------------
  1267.   def post_item(item)
  1268.   end
  1269.   #--------------------------------------------------------------------------
  1270.   # ● 物品击中判定
  1271.   #--------------------------------------------------------------------------
  1272.   def judge_item_hit(item)
  1273.     @effective |= item.hit < 100
  1274.     rand(100) < item.hit
  1275.   end
  1276.   #--------------------------------------------------------------------------
  1277.   # ● 计算伤害
  1278.   #--------------------------------------------------------------------------
  1279.   def calculate_item_damage(item)
  1280.     # 计算回复量
  1281.     calculate_recovery(item)
  1282.     # 属性修正
  1283.     calculate_element(item.element_set)
  1284.     # 会心修正
  1285.     calculate_item_critical(item)
  1286.     # 分散修正
  1287.     calculate_variance(item.variance)
  1288.     # 防御修正
  1289.     calculate_item_guarding(item)
  1290.   end
  1291.   #--------------------------------------------------------------------------
  1292.   # ● 计算回复量
  1293.   #--------------------------------------------------------------------------
  1294.   def calculate_recovery(item)
  1295.     recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
  1296.     recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
  1297.     if recover_hp < 0
  1298.       recover_hp += self.pdef * item.pdef_f * self.pdef_rate / 1000
  1299.       recover_hp += self.mdef * item.mdef_f * self.pdef_rate / 1000
  1300.       recover_hp = [recover_hp, 0].min
  1301.     end
  1302.     self.damage = [-recover_hp, -recover_sp]
  1303.   end
  1304.   #--------------------------------------------------------------------------
  1305.   # ● 会心修正
  1306.   #--------------------------------------------------------------------------
  1307.   def calculate_item_critical(item)
  1308.   end
  1309.   #--------------------------------------------------------------------------
  1310.   # ● 防御修正
  1311.   #--------------------------------------------------------------------------
  1312.   def calculate_item_guarding(item)
  1313.     if self.damage[0] > 0 and self.guarding?
  1314.       self.damage[0] = self.damage[0] * 100 / self.guarding_fold
  1315.     end
  1316.   end
  1317.   #--------------------------------------------------------------------------
  1318.   # ● 应用物品击中
  1319.   #--------------------------------------------------------------------------
  1320.   def apply_item_hit(item)
  1321.     # 伤害处理
  1322.     apply_item_damage(item)
  1323.     # 能力值处理
  1324.     apply_item_plus(item)
  1325.     # 伤害显示处理
  1326.     apply_item_display(item)
  1327.   end
  1328.   #--------------------------------------------------------------------------
  1329.   # ● 伤害处理
  1330.   #--------------------------------------------------------------------------
  1331.   def apply_item_damage(item)
  1332.     # HP 以及 SP 的回复
  1333.     last_hp = self.hp
  1334.     last_sp = self.sp
  1335.     self.hp -= self.damage[0]
  1336.     self.sp -= self.damage[1]
  1337.     @effective |= self.hp != last_hp
  1338.     @effective |= self.sp != last_sp
  1339.     # 状态变化
  1340.     @state_changed = false
  1341.     @effective |= states_plus(item.plus_state_set)
  1342.     @effective |= states_minus(item.minus_state_set)
  1343.   end
  1344.   #--------------------------------------------------------------------------
  1345.   # ● 能力值处理
  1346.   #--------------------------------------------------------------------------
  1347.   def apply_item_plus(item)
  1348.     if item.parameter_type > 0 and item.parameter_points != 0
  1349.       parameter_name = [:@maxhp_plus, :@maxsp_plus, :@str_plus, :@dex_plus,
  1350.         :@agi_plus, :@int_plus][item.parameter_type - 1]
  1351.       value = instance_variable_get(parameter_name) + item.parameter_points
  1352.       instance_variable_set(parameter_name, item.parameter_points)
  1353.       @effective = true
  1354.     end
  1355.   end
  1356.   #--------------------------------------------------------------------------
  1357.   # ● 伤害显示处理
  1358.   #--------------------------------------------------------------------------
  1359.   def apply_item_display(item)
  1360.     # HP 回复率与回复量为 0 的情况下
  1361.     if item.recover_hp_rate == 0 and item.recover_hp == 0
  1362.       # 设置伤害显示为SP伤害
  1363.       self.damage = self.damage[1]
  1364.       # SP 回复率与回复量为 0 的情况下
  1365.       if item.recover_sp_rate == 0 and item.recover_sp == 0
  1366.         # 设置伤害显示为能力上升量
  1367.         self.damage = -item.parameter_points if item.parameter_type != 0
  1368.         # 伤害仍然为0的情况下,设置为空或Miss
  1369.         self.damage = @state_changed ? "" : Vocab.miss if self.damage == 0
  1370.       end
  1371.     else
  1372.       # 设置伤害显示为HP伤害
  1373.       self.damage = self.damage[0]
  1374.     end
  1375.     # 不在战斗中的情况下,伤害值设为nil
  1376.     self.damage = nil unless $game_temp.in_battle
  1377.   end
  1378.   #--------------------------------------------------------------------------
  1379.   # ● 应用物品未击中
  1380.   #--------------------------------------------------------------------------
  1381.   def apply_item_miss(item)
  1382.     self.damage = $game_temp.in_battle ? Vocab.miss : nil
  1383.   end
  1384.   #--------------------------------------------------------------------------
  1385.   # ● 应用连续伤害效果
  1386.   #--------------------------------------------------------------------------
  1387.   def slip_damage_effect
  1388.     # 设置伤害
  1389.     self.damage = self.maxhp / self.slip_rate
  1390.     # 分散
  1391.     self.damage = self.damage.variance(self.slip_variance, 100)
  1392.     # HP 的伤害减法运算
  1393.     self.hp -= self.damage
  1394.     # 过程结束
  1395.     return true
  1396.   end
  1397. end
  1398.  
  1399. #==============================================================================
  1400. # ■ Game_Actor
  1401. #==============================================================================
  1402. class Game_Actor
  1403.   #--------------------------------------------------------------------------
  1404.   # ● 方法重定义
  1405.   #--------------------------------------------------------------------------
  1406.   unless method_defined?(:sailcat_sepcore_setup)
  1407.     alias sailcat_sepcore_setup setup
  1408.   end
  1409.   #--------------------------------------------------------------------------
  1410.   # ● 后续处理内容
  1411.   #--------------------------------------------------------------------------
  1412.   def post_initialize
  1413.     super
  1414.     @forced_states = {}
  1415.   end
  1416.   #--------------------------------------------------------------------------
  1417.   # ● 设置角色
  1418.   #--------------------------------------------------------------------------
  1419.   def setup(actor_id)
  1420.     sailcat_sepcore_setup(actor_id)
  1421.     post_setup
  1422.   end
  1423.   #--------------------------------------------------------------------------
  1424.   # ● 后续设置
  1425.   #--------------------------------------------------------------------------
  1426.   def post_setup
  1427.     @hp = maxhp
  1428.     @sp = maxsp
  1429.   end
  1430.   #--------------------------------------------------------------------------
  1431.   # ● 原型角色数据
  1432.   #--------------------------------------------------------------------------
  1433.   def data
  1434.     $data_actors[@actor_id]
  1435.   end
  1436.   #--------------------------------------------------------------------------
  1437.   # ● 当前职业数据
  1438.   #--------------------------------------------------------------------------
  1439.   def class
  1440.     $data_classes[@class_id]
  1441.   end
  1442.   #--------------------------------------------------------------------------
  1443.   # ● 装备的武器(RPG::Weapon)
  1444.   #--------------------------------------------------------------------------
  1445.   def weapon
  1446.     $data_weapons[@weapon_id]
  1447.   end
  1448.   #--------------------------------------------------------------------------
  1449.   # ● 装备的所有防具(RPG::Armor的集合)
  1450.   #--------------------------------------------------------------------------
  1451.   def all_armors
  1452.     [@armor1_id, @armor2_id, @armor3_id, @armor4_id].map {|a| $data_armors[a]}
  1453.   end
  1454.   #--------------------------------------------------------------------------
  1455.   # ● 装备的有效防具(RPG::Armor的非空集合)
  1456.   #--------------------------------------------------------------------------
  1457.   def armors
  1458.     all_armors.compact
  1459.   end
  1460.   #--------------------------------------------------------------------------
  1461.   # ● 有效装备集
  1462.   #--------------------------------------------------------------------------
  1463.   def equipment
  1464.     weapon ? [weapon] + armors : armors
  1465.   end
  1466.   #--------------------------------------------------------------------------
  1467.   # ● 获取 MaxHP
  1468.   #--------------------------------------------------------------------------
  1469.   def maxhp
  1470.     n = (base_maxhp + @maxhp_plus).limit(1, MAXHP_MAX_ACTOR)
  1471.     n *= @states.product {|i| $data_states[i].maxhp_rate / 100.0}
  1472.     Integer(n).limit(1, MAXHP_MAX_ACTOR)
  1473.   end
  1474.   #--------------------------------------------------------------------------
  1475.   # ● 设置 MaxHP
  1476.   #     maxhp : 新的 MaxHP
  1477.   #--------------------------------------------------------------------------
  1478.   def maxhp=(maxhp)
  1479.     @maxhp_plus += maxhp - self.maxhp
  1480.     @maxhp_plus = @maxhp_plus.limit(-MAXHP_MAX_ACTOR, MAXHP_MAX_ACTOR)
  1481.     @hp = [@hp, self.maxhp].min
  1482.   end
  1483.   #--------------------------------------------------------------------------
  1484.   # ● 获取基本力量
  1485.   #--------------------------------------------------------------------------
  1486.   def base_str
  1487.     n = $data_actors[@actor_id].parameters[2, @level]
  1488.     (n + equipment.sum {|e| e.str_plus}).limit(1, STR_MAX)
  1489.   end
  1490.   #--------------------------------------------------------------------------
  1491.   # ● 获取基本灵巧
  1492.   #--------------------------------------------------------------------------
  1493.   def base_dex
  1494.     n = $data_actors[@actor_id].parameters[3, @level]
  1495.     (n + equipment.sum {|e| e.dex_plus}).limit(1, DEX_MAX)
  1496.   end
  1497.   #--------------------------------------------------------------------------
  1498.   # ● 获取基本速度
  1499.   #--------------------------------------------------------------------------
  1500.   def base_agi
  1501.     n = $data_actors[@actor_id].parameters[4, @level]
  1502.     (n + equipment.sum {|e| e.agi_plus}).limit(1, AGI_MAX)
  1503.   end
  1504.   #--------------------------------------------------------------------------
  1505.   # ● 获取基本魔力
  1506.   #--------------------------------------------------------------------------
  1507.   def base_int
  1508.     n = $data_actors[@actor_id].parameters[5, @level]
  1509.     (n + equipment.sum {|e| e.int_plus}).limit(1, INT_MAX)
  1510.   end
  1511.   #--------------------------------------------------------------------------
  1512.   # ● 获取基本攻击力
  1513.   #--------------------------------------------------------------------------
  1514.   def base_atk
  1515.     weapon ? weapon.atk : 0
  1516.   end
  1517.   #--------------------------------------------------------------------------
  1518.   # ● 获取基本物理防御
  1519.   #--------------------------------------------------------------------------
  1520.   def base_pdef
  1521.     equipment.sum {|e| e.pdef}
  1522.   end
  1523.   #--------------------------------------------------------------------------
  1524.   # ● 获取基本魔法防御
  1525.   #--------------------------------------------------------------------------
  1526.   def base_mdef
  1527.     equipment.sum {|e| e.mdef}
  1528.   end
  1529.   #--------------------------------------------------------------------------
  1530.   # ● 获取基本回避修正
  1531.   #--------------------------------------------------------------------------
  1532.   def base_eva
  1533.     armors.sum {|a| a.eva}
  1534.   end
  1535.   #--------------------------------------------------------------------------
  1536.   # ● 普通攻击 获取攻击方动画 ID
  1537.   #--------------------------------------------------------------------------
  1538.   def animation1_id
  1539.     weapon ? weapon.animation1_id : 0
  1540.   end
  1541.   #--------------------------------------------------------------------------
  1542.   # ● 普通攻击 获取对像方动画 ID
  1543.   #--------------------------------------------------------------------------
  1544.   def animation2_id
  1545.     weapon ? weapon.animation2_id : 0
  1546.   end
  1547.   #--------------------------------------------------------------------------
  1548.   # ● 获取职业名称
  1549.   #--------------------------------------------------------------------------
  1550.   def class_name
  1551.     self.class.name
  1552.   end
  1553.   #--------------------------------------------------------------------------
  1554.   # ● 等级的比例
  1555.   #--------------------------------------------------------------------------
  1556.   def level_rate
  1557.     initial_level = $data_actors[@actor_id].initial_level
  1558.     final_level = $data_actors[@actor_id].final_level
  1559.     return 1.0 if initial_level == final_level
  1560.     return (@level - initial_level).to_f / (final_level - initial_level)
  1561.   end
  1562.   #--------------------------------------------------------------------------
  1563.   # ● 经验的比例
  1564.   #--------------------------------------------------------------------------
  1565.   def exp_rate
  1566.     next_level = @exp_list[@level + 1]
  1567.     return 1.0 if next_level == 0
  1568.     this_level = @exp_list[@level]
  1569.     return (@exp - this_level).to_f / (next_level - this_level)
  1570.   end
  1571.   #--------------------------------------------------------------------------
  1572.   # ● 更改 EXP
  1573.   #     exp : 新的 EXP
  1574.   #--------------------------------------------------------------------------
  1575.   def exp=(exp)
  1576.     @exp = exp.limit(0, EXP_MAX)
  1577.     # 升级
  1578.     while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
  1579.       @level += 1
  1580.       # 学会特技
  1581.       for j in $data_classes[@class_id].learnings
  1582.         if j.level == @level
  1583.           learn_skill(j.skill_id)
  1584.         end
  1585.       end
  1586.     end
  1587.     # 降级
  1588.     while @exp < @exp_list[@level]
  1589.       @level -= 1
  1590.     end
  1591.     # 修正当前的 HP 与 SP 超过最大值
  1592.     @hp = [@hp, self.maxhp].min
  1593.     @sp = [@sp, self.maxsp].min
  1594.   end
  1595.   #--------------------------------------------------------------------------
  1596.   # ● 更新自动状态
  1597.   #     old_equip : 卸下防具
  1598.   #     new_equip : 装备防具
  1599.   #--------------------------------------------------------------------------
  1600.   def update_auto_state(old_equip, new_equip)
  1601.     # 强制解除卸下防具的自动状态
  1602.     deprive_state(old_equip.auto_state_id) if old_equip
  1603.     # 强制附加装备防具的自动状态
  1604.     enforce_state(new_equip.auto_state_id) if new_equip
  1605.   end
  1606.   #--------------------------------------------------------------------------
  1607.   # ● 强制附加自动状态
  1608.   #     state : 被附加的状态
  1609.   #--------------------------------------------------------------------------
  1610.   def enforce_state(s)
  1611.     return if $data_states[s] == nil
  1612.     # 对附加该状态的装备计数加1
  1613.     @forced_states[s] = (@forced_states[s] || 0) + 1
  1614.     # 第一件装备的状态,强制附加
  1615.     add_state(s, true) if @forced_states[s] == 1
  1616.   end
  1617.   #--------------------------------------------------------------------------
  1618.   # ● 强制解除自动状态
  1619.   #     state : 被附加的状态
  1620.   #--------------------------------------------------------------------------
  1621.   def deprive_state(s)
  1622.     return if $data_states[s] == nil
  1623.     # 对附加该状态的装备计数减1
  1624.     @forced_states[s] = (@forced_states[s] || 1) - 1
  1625.     # 计数已归0的情况下,强制解除
  1626.     remove_state(s, true) if @forced_states[s] == 0
  1627.   end
  1628.   #--------------------------------------------------------------------------
  1629.   # ● 学会的技能(按ID排序)
  1630.   #--------------------------------------------------------------------------
  1631.   def learned_skills
  1632.     self.skills.map {|n| $data_skills[n]}
  1633.   end
  1634. end
  1635.  
  1636. #==============================================================================
  1637. # ■ Game_Actors
  1638. #==============================================================================
  1639. class Game_Actors
  1640.   include SailCat::Core_Config
  1641.   #--------------------------------------------------------------------------
  1642.   # ● 获取角色
  1643.   #     actor_id : 角色 ID
  1644.   #--------------------------------------------------------------------------
  1645.   def [](actor_id)
  1646.     return nil if actor_id > DATA_MAX or $data_actors[actor_id].nil?
  1647.     @data[actor_id] ||= Game_Actor.new(actor_id)
  1648.   end
  1649. end
  1650.  
  1651. #==============================================================================
  1652. # ■ Game_Party
  1653. #==============================================================================
  1654. class Game_Party
  1655.   include SailCat::Core_Config
  1656.   #--------------------------------------------------------------------------
  1657.   # ● 方法重定义
  1658.   #--------------------------------------------------------------------------
  1659.   unless method_defined?(:sailcat_sepcore_setup_starting_members)
  1660.     alias sailcat_sepcore_setup_starting_members setup_starting_members
  1661.     alias sailcat_sepcore_setup_battle_test_members setup_battle_test_members
  1662.   end
  1663.   #--------------------------------------------------------------------------
  1664.   # ● 设置初期同伴
  1665.   #--------------------------------------------------------------------------
  1666.   def setup_starting_members
  1667.     sailcat_sepcore_setup_starting_members
  1668.     $game_player.transparent = START_TRANSPARENT
  1669.   end
  1670.   #--------------------------------------------------------------------------
  1671.   # ● 设置战斗测试用同伴
  1672.   #--------------------------------------------------------------------------
  1673.   def setup_battle_test_members
  1674.     sailcat_sepcore_setup_battle_test_members
  1675.     @items.each_key {|k| @items[k] = ITEM_MAX}
  1676.   end
  1677.   #--------------------------------------------------------------------------
  1678.   # ● 增加金钱 (减少)
  1679.   #     n : 金额
  1680.   #--------------------------------------------------------------------------
  1681.   def gain_gold(n)
  1682.     @gold = (@gold + n).limit(0, GOLD_MAX)
  1683.   end
  1684.   #--------------------------------------------------------------------------
  1685.   # ● 增加步数
  1686.   #--------------------------------------------------------------------------
  1687.   def increase_steps
  1688.     @steps = (@steps + 1).limit(nil, STEPS_MAX)
  1689.   end
  1690.   #--------------------------------------------------------------------------
  1691.   # ● 增加物品 (减少)
  1692.   #     item_id : 物品 ID
  1693.   #     n       : 个数
  1694.   #--------------------------------------------------------------------------
  1695.   def gain_item(item_id, n)
  1696.     # 更新 hash 的个数数据
  1697.     if item_id > 0
  1698.       @items[item_id] = (item_number(item_id) + n).limit(0, ITEM_MAX)
  1699.     end
  1700.   end
  1701.   #--------------------------------------------------------------------------
  1702.   # ● 增加武器 (减少)
  1703.   #     weapon_id : 武器 ID
  1704.   #     n         : 个数
  1705.   #--------------------------------------------------------------------------
  1706.   def gain_weapon(weapon_id, n)
  1707.     # 更新 hash 的个数数据
  1708.     if weapon_id > 0
  1709.       @weapons[weapon_id] = (weapon_number(weapon_id) + n).limit(0, ITEM_MAX)
  1710.     end
  1711.   end
  1712.   #--------------------------------------------------------------------------
  1713.   # ● 增加防具 (减少)
  1714.   #     armor_id : 防具 ID
  1715.   #     n        : 个数
  1716.   #--------------------------------------------------------------------------
  1717.   def gain_armor(armor_id, n)
  1718.     # 更新 hash 的个数数据
  1719.     if armor_id > 0
  1720.       @armors[armor_id] = (armor_number(armor_id) + n).limit(0, ITEM_MAX)
  1721.     end
  1722.   end
  1723.   #--------------------------------------------------------------------------
  1724.   # ● 队伍持有的物品
  1725.   #--------------------------------------------------------------------------
  1726.   def items
  1727.     @items.select {|k, v| v > 0}.map {|k| $data_items[k[0]]}.compact
  1728.   end
  1729.   #--------------------------------------------------------------------------
  1730.   # ● 队伍持有的物品(按ID排序)
  1731.   #--------------------------------------------------------------------------
  1732.   def sorted_items
  1733.     items.sort_by {|item| item.id}
  1734.   end
  1735.   #--------------------------------------------------------------------------
  1736.   # ● 队伍持有的武器
  1737.   #--------------------------------------------------------------------------
  1738.   def weapons
  1739.     @weapons.select {|k, v| v > 0}.map {|k| $data_weapons[k[0]]}.compact
  1740.   end
  1741.   #--------------------------------------------------------------------------
  1742.   # ● 队伍持有的武器(按ID排序)
  1743.   #--------------------------------------------------------------------------
  1744.   def sorted_weapons
  1745.     weapons.sort_by {|item| item.id}
  1746.   end
  1747.   #--------------------------------------------------------------------------
  1748.   # ● 队伍持有的防具
  1749.   #     kind : 装备的类型(0..3,-1为不限制)
  1750.   #--------------------------------------------------------------------------
  1751.   def armors(kind = -1)
  1752.     a = @armors.select {|k, v| v > 0}.map {|k| $data_armors[k[0]]}.compact
  1753.     kind == -1 ? a : a.select {|armor| armor.kind == kind}
  1754.   end
  1755.   #--------------------------------------------------------------------------
  1756.   # ● 队伍持有的防具(按ID排序)
  1757.   #--------------------------------------------------------------------------
  1758.   def sorted_armors
  1759.     armors.sort_by {|item| item.id}
  1760.   end
  1761.   #--------------------------------------------------------------------------
  1762.   # ● 获得任意物品的所持数
  1763.   #--------------------------------------------------------------------------
  1764.   def any_number(item)
  1765.     case item
  1766.     when RPG::Item
  1767.       item_number(item.id)
  1768.     when RPG::Weapon
  1769.       weapon_number(item.id)
  1770.     when RPG::Armor
  1771.       armor_number(item.id)
  1772.     else
  1773.       0
  1774.     end
  1775.   end
  1776. end
  1777.  
  1778. #==============================================================================
  1779. # ■ Game_Character
  1780. #==============================================================================
  1781. class Game_Character
  1782.   include SailCat::Core_Config
  1783.   #--------------------------------------------------------------------------
  1784.   # ● 方法重定义
  1785.   #--------------------------------------------------------------------------
  1786.   unless method_defined?(:sailcat_sepcore_move_type_custom)
  1787.     alias sailcat_sepcore_move_type_custom move_type_custom
  1788.   end
  1789.   #--------------------------------------------------------------------------
  1790.   # ● 移动类型 : 自定义
  1791.   #--------------------------------------------------------------------------
  1792.   def move_type_custom
  1793.     sailcat_sepcore_move_type_custom
  1794.     # 如果设置了等待帧数
  1795.     if @wait_count > 0
  1796.       # 按新的帧率修订帧数
  1797.       wait = (@wait_count + 1) >> 1
  1798.       @wait_count = wait * FRAME_SKIP - 1
  1799.     end
  1800.   end
  1801. end
  1802.  
  1803. #==============================================================================
  1804. # ■ Game_Map
  1805. #==============================================================================
  1806. class Game_Map
  1807.   #--------------------------------------------------------------------------
  1808.   # ● 方法重定义
  1809.   #--------------------------------------------------------------------------
  1810.   unless method_defined?(:sailcat_sepcore_setup)
  1811.     alias sailcat_sepcore_setup setup
  1812.   end
  1813.   #--------------------------------------------------------------------------
  1814.   # ● 设置
  1815.   #     map_id : 地图 ID
  1816.   #--------------------------------------------------------------------------
  1817.   def setup(map_id)
  1818.     sailcat_sepcore_setup(map_id)
  1819.     post_setup
  1820.   end
  1821.   #--------------------------------------------------------------------------
  1822.   # ● 后续设置处理
  1823.   #--------------------------------------------------------------------------
  1824.   def post_setup
  1825.     @common_events.reject! {|k, v| $data_common_events[k].trigger == 0}
  1826.   end
  1827. end
  1828.  
  1829. #==============================================================================
  1830. # ■ Spriteset
  1831. #------------------------------------------------------------------------------
  1832. #   游戏中场景用精灵集合的公用Mix-in模块,判定用。
  1833. #==============================================================================
  1834. module Spriteset
  1835. end
  1836.  
  1837. #==============================================================================
  1838. # ■ Spriteset_Map
  1839. #==============================================================================
  1840. class Spriteset_Map
  1841.   include Spriteset
  1842. end
  1843.  
  1844. #==============================================================================
  1845. # ■ Spriteset_Battle
  1846. #==============================================================================
  1847. class Spriteset_Battle
  1848.   include Spriteset
  1849. end
  1850.  
  1851. #==============================================================================
  1852. # ■ Window_Base
  1853. #==============================================================================
  1854. class Window_Base
  1855.   include SailCat::Core_Config
  1856.   #--------------------------------------------------------------------------
  1857.   # ● 等级的描画
  1858.   #     actor : 角色
  1859.   #     x     : 描画目标 X 坐标
  1860.   #     y     : 描画目标 Y 坐标
  1861.   #--------------------------------------------------------------------------
  1862.   def draw_actor_level(actor, x, y)
  1863.     contents.font.color = system_color
  1864.     contents.draw_text(x, y, 32, 32, Vocab.level_a)
  1865.     contents.font.color = normal_color
  1866.     contents.draw_text(x + 32, y, 24, 32, actor.level.to_s, 2)
  1867.   end
  1868.   #--------------------------------------------------------------------------
  1869.   # ● 生成描绘用状态字符串
  1870.   #     actor       : 角色
  1871.   #     width       : 描画目标的宽度
  1872.   #     need_normal : [正常] 是否为必须 (true / false)
  1873.   #--------------------------------------------------------------------------
  1874.   def make_battler_state_text(battler, width, need_normal)
  1875.     width -= contents.text_size("[]").width - contents.text_size("/").width
  1876.     # 生成状态名字符串
  1877.     text = ""
  1878.     for i in battler.states
  1879.       next if $data_states[i].rating == 0
  1880.       new_text = text + $data_states[i].name + "/"
  1881.       break if contents.text_size(new_text).width > width
  1882.       text = new_text
  1883.     end
  1884.     text = "[" + text.chop + "]"
  1885.     # 返回完成后的文字
  1886.     return text == "[]" ? (need_normal ? Vocab.state_empty : "") : text
  1887.   end
  1888.   #--------------------------------------------------------------------------
  1889.   # ● 描画 EXP
  1890.   #     actor : 角色
  1891.   #     x     : 描画目标 X 坐标
  1892.   #     y     : 描画目标 Y 坐标
  1893.   #--------------------------------------------------------------------------
  1894.   def draw_actor_exp(actor, x, y)
  1895.     contents.font.color = system_color
  1896.     contents.draw_text(x, y, 24, 32, Vocab.exp_a)
  1897.     contents.font.color = normal_color
  1898.     contents.draw_text(x + 24, y, 84, 32, actor.exp_s, 2)
  1899.     contents.draw_text(x + 108, y, 12, 32, "/", 1)
  1900.     contents.draw_text(x + 120, y, 84, 32, actor.next_exp_s)
  1901.   end
  1902. end
  1903.  
  1904. #==============================================================================
  1905. # ■ Window_PlayTime
  1906. #==============================================================================
  1907. class Window_PlayTime
  1908.   #--------------------------------------------------------------------------
  1909.   # ● 方法重定义
  1910.   #--------------------------------------------------------------------------
  1911.   unless method_defined?(:sailcat_sepcore_refresh)
  1912.     alias sailcat_sepcore_refresh refresh
  1913.   end
  1914.   #--------------------------------------------------------------------------
  1915.   # ● 刷新
  1916.   #--------------------------------------------------------------------------
  1917.   def refresh
  1918.     sailcat_sepcore_refresh
  1919.     contents.clear_rect(4, 0, 120, 32)
  1920.     contents.font.color = system_color
  1921.     contents.draw_text(4, 0, 120, 32, Vocab.playtime)
  1922.   end
  1923. end
  1924.  
  1925. #==============================================================================
  1926. # ■ Window_Steps
  1927. #==============================================================================
  1928. class Window_Steps
  1929.   #--------------------------------------------------------------------------
  1930.   # ● 刷新
  1931.   #--------------------------------------------------------------------------
  1932.   def refresh
  1933.     contents.clear
  1934.     contents.font.color = system_color
  1935.     contents.draw_text(4, 0, 120, 32, Vocab.steps)
  1936.     contents.font.color = normal_color
  1937.     contents.draw_text(4, 32, 120, 32, $game_party.steps.to_s, 2)
  1938.   end
  1939. end
  1940.  
  1941. #==============================================================================
  1942. # ■ Window_Status
  1943. #==============================================================================
  1944. class Window_Status
  1945.   #--------------------------------------------------------------------------
  1946.   # ● 方法重定义
  1947.   #--------------------------------------------------------------------------
  1948.   unless method_defined?(:sailcat_sepcore_refresh)
  1949.     alias sailcat_sepcore_refresh refresh
  1950.   end
  1951.   #--------------------------------------------------------------------------
  1952.   # ● 刷新
  1953.   #--------------------------------------------------------------------------
  1954.   def refresh
  1955.     sailcat_sepcore_refresh
  1956.     contents.font.color = system_color
  1957.     contents.clear_rect(320, 48, 80, 32)
  1958.     contents.draw_text(320, 48, 80, 32, Vocab.exp)
  1959.     contents.clear_rect(320, 80, 80, 32)
  1960.     contents.draw_text(320, 80, 80, 32, Vocab.next_level)
  1961.     contents.clear_rect(320, 160, 96, 32)
  1962.     contents.draw_text(320, 160, 96, 32, Vocab.equipment)
  1963.   end
  1964. end
  1965.  
  1966. #==============================================================================
  1967. # ■ Window_SaveFile
  1968. #==============================================================================
  1969. class Window_SaveFile
  1970.   #--------------------------------------------------------------------------
  1971.   # ● 方法重定义
  1972.   #--------------------------------------------------------------------------
  1973.   unless method_defined?(:sailcat_sepcore_refresh)
  1974.     alias sailcat_sepcore_refresh refresh
  1975.   end
  1976.   #--------------------------------------------------------------------------
  1977.   # ● 刷新
  1978.   #--------------------------------------------------------------------------
  1979.   def refresh
  1980.     sailcat_sepcore_refresh
  1981.     contents.clear_rect(4, 0, @name_width, 32)
  1982.     name = "#{Vocab.file} #{@file_index + 1}"
  1983.     @name_width = contents.text_size(name).width
  1984.     contents.draw_text(4, 0, @name_width, 32, name)
  1985.   end
  1986. end
  1987.  
  1988. #==============================================================================
  1989. # ■ Window_ShopCommand
  1990. #==============================================================================
  1991. class Window_ShopCommand
  1992.   #--------------------------------------------------------------------------
  1993.   # ● 初始化对像
  1994.   #--------------------------------------------------------------------------
  1995.   def initialize
  1996.     super(0, 64, 480, 64)
  1997.     self.contents = Bitmap.new(width - 32, height - 32)
  1998.     @item_max = 3
  1999.     @column_max = 3
  2000.     @commands = [Vocab.buy, Vocab.sell, Vocab.cancel]
  2001.     refresh
  2002.     self.index = 0
  2003.   end
  2004. end
  2005.  
  2006. #==============================================================================
  2007. # ■ Window_ShopBuy
  2008. #==============================================================================
  2009. class Window_ShopBuy
  2010.   #--------------------------------------------------------------------------
  2011.   # ● 描绘项目
  2012.   #     index : 项目编号
  2013.   #--------------------------------------------------------------------------
  2014.   def draw_item(index)
  2015.     item = @data[index]
  2016.     # 获取物品所持数
  2017.     number = $game_party.any_number(item)
  2018.     # 价格在所持金以下、并且所持数不是上限的情况下为普通文字颜色
  2019.     # 除此之外的情况设置为无效文字色
  2020.     if item.price <= $game_party.gold and (!ITEM_MAX or number < ITEM_MAX)
  2021.       contents.font.color = normal_color
  2022.     else
  2023.       contents.font.color = disabled_color
  2024.     end
  2025.     x = 4
  2026.     y = index * 32
  2027.     rect = Rect.new(x, y, self.width - 32, 32)
  2028.     contents.clear_rect(rect)
  2029.     bitmap = RPG::Cache.icon(item.icon_name)
  2030.     opacity = contents.font.color == normal_color ? 255 : 128
  2031.     contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  2032.     contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  2033.     contents.draw_text(x + 240, y, 88, 32, item.price.to_s, 2)
  2034.   end
  2035. end
  2036.  
  2037. #==============================================================================
  2038. # ■ Window_ShopNumber
  2039. #==============================================================================
  2040. class Window_ShopNumber
  2041.   #--------------------------------------------------------------------------
  2042.   # ● 刷新画面
  2043.   #--------------------------------------------------------------------------
  2044.   def update
  2045.     super
  2046.     if self.active
  2047.       change(+1) if Input.repeat?(Input::RIGHT) and (!@max or @number < @max)
  2048.       change(-1) if Input.repeat?(Input::LEFT) and @number > 1
  2049.       change(+10) if Input.repeat?(Input::UP) and (!@max or @number < @max)
  2050.       change(-10) if Input.repeat?(Input::DOWN) and @number > 1
  2051.     end
  2052.   end
  2053.   #--------------------------------------------------------------------------
  2054.   # ● 更改数值
  2055.   #--------------------------------------------------------------------------
  2056.   def change(delta)
  2057.     # 按下SHIFT键的情况下100倍变化
  2058.     if Input.press?(Input::SHIFT)
  2059.       fold = 100
  2060.     # 按下CTRL键的情况下10000倍变化
  2061.     elsif Input.press?(Input::CTRL)
  2062.       fold = 10000
  2063.     # 按下ALT键的情况下1000000倍变化
  2064.     elsif Input.press?(Input::ALT)
  2065.       fold = 1000000
  2066.     # 1倍变化
  2067.     else
  2068.       fold = 1
  2069.     end
  2070.     $game_system.se_play($data_system.cursor_se)
  2071.     @number = (@number + delta * fold).limit(1, @max)
  2072.     refresh
  2073.   end
  2074. end
  2075.  
  2076. #==============================================================================
  2077. # ■ Window_ShopStatus
  2078. #==============================================================================
  2079. class Window_ShopStatus
  2080.   #--------------------------------------------------------------------------
  2081.   # ● 方法重定义
  2082.   #--------------------------------------------------------------------------
  2083.   unless method_defined?(:sailcat_sepcore_refresh)
  2084.     alias sailcat_sepcore_refresh refresh
  2085.   end
  2086.   #--------------------------------------------------------------------------
  2087.   # ● 刷新
  2088.   #--------------------------------------------------------------------------
  2089.   def refresh
  2090.     sailcat_sepcore_refresh
  2091.     contents.clear_rect(4, 0, 200, 32)
  2092.     contents.font.color = system_color
  2093.     contents.draw_text(4, 0, 200, 32, Vocab.hold_number)
  2094.   end
  2095. end
  2096.  
  2097. #==============================================================================
  2098. # ■ Window_NameInput
  2099. #==============================================================================
  2100. class Window_NameInput
  2101.   CHARACTER_TABLE =
  2102.   [
  2103.     "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O",
  2104.     "P","Q","R","S","T","U","V","W","X","Y","Z",".",",","?","!",
  2105.     "`","~","@","#","$","%","^","&","-","+","1","2","3","4","5",
  2106.     "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o",
  2107.     "p","q","r","s","t","u","v","w","x","y","z",":",";","(",")",
  2108.     "=","[","]","{","}","<",">","'",'"',"_","6","7","8","9","0",
  2109.     "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O",
  2110.     "P","Q","R","S","T","U","V","W","X","Y","Z","。",",","?","!",
  2111.     "`","~","@","#","$","%","^","&","-","+","1","2","3","4","5",
  2112.     "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o",
  2113.     "p","q","r","s","t","u","v","w","x","y","z",":",";","(",")",
  2114.     "=","[","]","{","}","<",">","'",""","_","6","7","8","9","0"
  2115.   ]
  2116.   #--------------------------------------------------------------------------
  2117.   # ● 方法重定义
  2118.   #--------------------------------------------------------------------------
  2119.   unless method_defined?(:sailcat_sepcore_refresh)
  2120.     alias sailcat_sepcore_refresh refresh
  2121.   end
  2122.   #--------------------------------------------------------------------------
  2123.   # ● 刷新
  2124.   #--------------------------------------------------------------------------
  2125.   def refresh
  2126.     sailcat_sepcore_refresh
  2127.     contents.clear_rect(544, 288, 64, 32)
  2128.     contents.draw_text(544, 288, 64, 32, Vocab.ok, 1)
  2129.   end
  2130. end
  2131.  
  2132. #==============================================================================
  2133. # ■ Window_PartyCommand
  2134. #==============================================================================
  2135. class Window_PartyCommand
  2136.   #--------------------------------------------------------------------------
  2137.   # ● 初始化对像
  2138.   #--------------------------------------------------------------------------
  2139.   def initialize
  2140.     super(0, 0, 640, 64)
  2141.     self.contents = Bitmap.new(width - 32, height - 32)
  2142.     self.back_opacity = 160
  2143.     @commands = [Vocab.fight, Vocab.escape]
  2144.     @item_max = 2
  2145.     @column_max = 2
  2146.     draw_item(0, normal_color)
  2147.     draw_item(1, $game_temp.battle_can_escape ? normal_color : disabled_color)
  2148.     self.active = false
  2149.     self.visible = false
  2150.     self.index = 0
  2151.   end
  2152. end
  2153.  
  2154. #==============================================================================
  2155. # ■ Window_BattleResult
  2156. #==============================================================================
  2157. class Window_BattleResult
  2158.   #--------------------------------------------------------------------------
  2159.   # ● 刷新
  2160.   #--------------------------------------------------------------------------
  2161.   def refresh
  2162.     contents.clear
  2163.     x = 4
  2164.     contents.font.color = normal_color
  2165.     cx = contents.text_size(@exp.to_s).width
  2166.     contents.draw_text(x, 0, cx, 32, @exp.to_s)
  2167.     x += cx + 4
  2168.     contents.font.color = system_color
  2169.     cx = contents.text_size(Vocab.exp).width
  2170.     contents.draw_text(x, 0, 64, 32, Vocab.exp)
  2171.     x += cx + 16
  2172.     contents.font.color = normal_color
  2173.     cx = contents.text_size(@gold.to_s).width
  2174.     contents.draw_text(x, 0, cx, 32, @gold.to_s)
  2175.     x += cx + 4
  2176.     contents.font.color = system_color
  2177.     contents.draw_text(x, 0, 128, 32, $data_system.words.gold)
  2178.     y = 32
  2179.     for item in @treasures
  2180.       draw_item_name(item, 4, y)
  2181.       y += 32
  2182.     end
  2183.   end
  2184. end
  2185.  
  2186. #==============================================================================
  2187. # ■ Interpreter
  2188. #==============================================================================
  2189. class Interpreter
  2190.   include SailCat::Core_Config
  2191.   #--------------------------------------------------------------------------
  2192.   # ● 方法重定义
  2193.   #--------------------------------------------------------------------------
  2194.   unless method_defined?(:sailcat_sepcore_command_355)
  2195.     alias sailcat_sepcore_command_355 command_355
  2196.   end
  2197.   #--------------------------------------------------------------------------
  2198.   # ● 转换帧数
  2199.   #--------------------------------------------------------------------------
  2200.   def frames(value)
  2201.     value * FRAME_SKIP
  2202.   end
  2203.   #--------------------------------------------------------------------------
  2204.   # ● 等待
  2205.   #--------------------------------------------------------------------------
  2206.   def command_106
  2207.     # 设置等待计数
  2208.     @wait_count = frames(@parameters[0])
  2209.     # 继续
  2210.     return true
  2211.   end
  2212.   #--------------------------------------------------------------------------
  2213.   # ● 变量操作
  2214.   #--------------------------------------------------------------------------
  2215.   def command_122
  2216.     # 初始化值
  2217.     value = 0
  2218.     # 操作数的分支
  2219.     case @parameters[3]
  2220.     when 0  # 恒量
  2221.       value = @parameters[4]
  2222.     when 1  # 变量
  2223.       value = $game_variables[@parameters[4]]
  2224.     when 2  # 随机数
  2225.       value = @parameters[4] + rand(@parameters[5] - @parameters[4] + 1)
  2226.     when 3  # 物品
  2227.       value = $game_party.item_number(@parameters[4])
  2228.     when 4  # 角色
  2229.       actor = $game_actors[@parameters[4]]
  2230.       if actor != nil
  2231.         case @parameters[5]
  2232.         when 0  # 等级
  2233.           value = actor.level
  2234.         when 1  # EXP
  2235.           value = actor.exp
  2236.         when 2  # HP
  2237.           value = actor.hp
  2238.         when 3  # SP
  2239.           value = actor.sp
  2240.         when 4  # MaxHP
  2241.           value = actor.maxhp
  2242.         when 5  # MaxSP
  2243.           value = actor.maxsp
  2244.         when 6  # 力量
  2245.           value = actor.str
  2246.         when 7  # 灵巧
  2247.           value = actor.dex
  2248.         when 8  # 速度
  2249.           value = actor.agi
  2250.         when 9  # 魔力
  2251.           value = actor.int
  2252.         when 10  # 攻击力
  2253.           value = actor.atk
  2254.         when 11  # 物理防御
  2255.           value = actor.pdef
  2256.         when 12  # 魔法防御
  2257.           value = actor.mdef
  2258.         when 13  # 回避修正
  2259.           value = actor.eva
  2260.         end
  2261.       end
  2262.     when 5  # 敌人
  2263.       enemy = $game_troop.enemies[@parameters[4]]
  2264.       if enemy != nil
  2265.         case @parameters[5]
  2266.         when 0  # HP
  2267.           value = enemy.hp
  2268.         when 1  # SP
  2269.           value = enemy.sp
  2270.         when 2  # MaxHP
  2271.           value = enemy.maxhp
  2272.         when 3  # MaxSP
  2273.           value = enemy.maxsp
  2274.         when 4  # 力量
  2275.           value = enemy.str
  2276.         when 5  # 灵巧
  2277.           value = enemy.dex
  2278.         when 6  # 速度
  2279.           value = enemy.agi
  2280.         when 7  # 魔力
  2281.           value = enemy.int
  2282.         when 8  # 攻击力
  2283.           value = enemy.atk
  2284.         when 9  # 物理防御
  2285.           value = enemy.pdef
  2286.         when 10  # 魔法防御
  2287.           value = enemy.mdef
  2288.         when 11  # 回避修正
  2289.           value = enemy.eva
  2290.         end
  2291.       end
  2292.     when 6  # 角色
  2293.       character = get_character(@parameters[4])
  2294.       if character != nil
  2295.         case @parameters[5]
  2296.         when 0  # X 坐标
  2297.           value = character.x
  2298.         when 1  # Y 坐标
  2299.           value = character.y
  2300.         when 2  # 朝向
  2301.           value = character.direction
  2302.         when 3  # 画面 X 坐标
  2303.           value = character.screen_x
  2304.         when 4  # 画面 Y 坐标
  2305.           value = character.screen_y
  2306.         when 5  # 地形标记
  2307.           value = character.terrain_tag
  2308.         end
  2309.       end
  2310.     when 7  # 其它
  2311.       case @parameters[4]
  2312.       when 0  # 地图 ID
  2313.         value = $game_map.map_id
  2314.       when 1  # 同伴人数
  2315.         value = $game_party.actors.size
  2316.       when 2  # 金钱
  2317.         value = $game_party.gold
  2318.       when 3  # 步数
  2319.         value = $game_party.steps
  2320.       when 4  # 游戏时间
  2321.         value = Graphics.frame_count / Graphics.frame_rate
  2322.       when 5  # 计时器
  2323.         value = $game_system.timer / Graphics.frame_rate
  2324.       when 6  # 存档次数
  2325.         value = $game_system.save_count
  2326.       end
  2327.     end
  2328.     # 循环全部操作
  2329.     for i in @parameters[0] .. @parameters[1]
  2330.       # 操作分支
  2331.       case @parameters[2]
  2332.       when 0  # 代入
  2333.         $game_variables[i] = value
  2334.       when 1  # 加法
  2335.         $game_variables[i] += value
  2336.       when 2  # 减法
  2337.         $game_variables[i] -= value
  2338.       when 3  # 乘法
  2339.         $game_variables[i] *= value
  2340.       when 4  # 除法
  2341.         if value != 0
  2342.           $game_variables[i] /= value
  2343.         end
  2344.       when 5  # 剩余
  2345.         if value != 0
  2346.           $game_variables[i] %= value
  2347.         end
  2348.       end
  2349.       # 检查上下限
  2350.       $game_variables[i] = $game_variables[i].limit(-VAR_MAX, VAR_MAX)
  2351.     end
  2352.     # 刷新地图
  2353.     $game_map.need_refresh = true
  2354.     # 继续
  2355.     return true
  2356.   end
  2357.   #--------------------------------------------------------------------------
  2358.   # ● 更改雾的色调
  2359.   #--------------------------------------------------------------------------
  2360.   def command_205
  2361.     # 开始更改色调
  2362.     $game_map.start_fog_tone_change(@parameters[0], frames(@parameters[1]))
  2363.     # 继续
  2364.     return true
  2365.   end
  2366.   #--------------------------------------------------------------------------
  2367.   # ● 更改雾的不透明度
  2368.   #--------------------------------------------------------------------------
  2369.   def command_206
  2370.     # 开始更改不透明度
  2371.     $game_map.start_fog_opacity_change(@parameters[0], frames(@parameters[1]))
  2372.     # 继续
  2373.     return true
  2374.   end
  2375.   #--------------------------------------------------------------------------
  2376.   # ● 更改画面色调
  2377.   #--------------------------------------------------------------------------
  2378.   def command_223
  2379.     # 开始更改色调
  2380.     $game_screen.start_tone_change(@parameters[0], frames(@parameters[1]))
  2381.     # 继续
  2382.     return true
  2383.   end
  2384.   #--------------------------------------------------------------------------
  2385.   # ● 画面闪烁
  2386.   #--------------------------------------------------------------------------
  2387.   def command_224
  2388.     # 开始闪烁
  2389.     $game_screen.start_flash(@parameters[0], frames(@parameters[1]))
  2390.     # 继续
  2391.     return true
  2392.   end
  2393.   #--------------------------------------------------------------------------
  2394.   # ● 脚本
  2395.   #--------------------------------------------------------------------------
  2396.   def command_355
  2397.     result = sailcat_sepcore_command_355
  2398.     @index += 1 if result == false
  2399.     return result
  2400.   end
  2401. end
  2402.  
  2403. #==============================================================================
  2404. # ■ Scene_Base
  2405. #------------------------------------------------------------------------------
  2406. #   游戏中全部场景的公用模块。
  2407. #==============================================================================
  2408. module Scene_Base
  2409.   include SailCat::Core_Config
  2410.   #--------------------------------------------------------------------------
  2411.   # ● 主处理
  2412.   #--------------------------------------------------------------------------
  2413.   def main
  2414.     return unless need_create?
  2415.     create
  2416.     post_create
  2417.     Graphics.transition unless @custom_transition
  2418.     update_scene until $scene != self
  2419.     Graphics.freeze
  2420.     pre_terminate
  2421.     terminate
  2422.   end
  2423.   #--------------------------------------------------------------------------
  2424.   # ● 建立预判
  2425.   #--------------------------------------------------------------------------
  2426.   def need_create?
  2427.     true
  2428.   end
  2429.   #--------------------------------------------------------------------------
  2430.   # ● 建立场景
  2431.   #--------------------------------------------------------------------------
  2432.   def create
  2433.     prepare_data
  2434.     create_spriteset
  2435.     create_all_sprites
  2436.     create_all_windows
  2437.   end
  2438.   #--------------------------------------------------------------------------
  2439.   # ● 设置场景
  2440.   #--------------------------------------------------------------------------
  2441.   def post_create
  2442.   end
  2443.   #--------------------------------------------------------------------------
  2444.   # ● 更新场景
  2445.   #--------------------------------------------------------------------------
  2446.   def update_scene
  2447.     Graphics.update
  2448.     Input.update
  2449.     update
  2450.   end
  2451.   #--------------------------------------------------------------------------
  2452.   # ● 终止场景
  2453.   #--------------------------------------------------------------------------
  2454.   def pre_terminate
  2455.   end
  2456.   #--------------------------------------------------------------------------
  2457.   # ● 结束场景
  2458.   #--------------------------------------------------------------------------
  2459.   def terminate
  2460.     dispose_spriteset
  2461.     dispose_all_sprites
  2462.     dispose_all_windows
  2463.     after_effect
  2464.   end
  2465.   #--------------------------------------------------------------------------
  2466.   # ● 加载数据
  2467.   #--------------------------------------------------------------------------
  2468.   def prepare_data
  2469.   end
  2470.   #--------------------------------------------------------------------------
  2471.   # ● 建立精灵组
  2472.   #--------------------------------------------------------------------------
  2473.   def create_spriteset
  2474.   end
  2475.   #--------------------------------------------------------------------------
  2476.   # ● 建立精灵
  2477.   #--------------------------------------------------------------------------
  2478.   def create_all_sprites
  2479.   end
  2480.   #--------------------------------------------------------------------------
  2481.   # ● 建立窗口
  2482.   #--------------------------------------------------------------------------
  2483.   def create_all_windows
  2484.   end
  2485.   #--------------------------------------------------------------------------
  2486.   # ● 更新窗口
  2487.   #--------------------------------------------------------------------------
  2488.   def update_all_windows
  2489.     ivar = instance_variables.map {|i| instance_variable_get(i)}.flatten
  2490.     ivar.each {|i| i.update if i.is_a?(Window) and not i.disposed?}
  2491.   end
  2492.   #--------------------------------------------------------------------------
  2493.   # ● 释放精灵组
  2494.   #--------------------------------------------------------------------------
  2495.   def dispose_spriteset
  2496.     ivar = instance_variables.map {|i| instance_variable_get(i)}.flatten
  2497.     ivar.each {|i| i.dispose if i.is_a?(Spriteset)}
  2498.   end
  2499.   #--------------------------------------------------------------------------
  2500.   # ● 释放精灵
  2501.   #--------------------------------------------------------------------------
  2502.   def dispose_all_sprites
  2503.     ivar = instance_variables.map {|i| instance_variable_get(i)}.flatten
  2504.     ivar.each do |i|
  2505.       if i.is_a?(Sprite) and not i.disposed?
  2506.         i.bitmap.dispose unless i.bitmap.disposed?
  2507.         i.dispose
  2508.       end
  2509.     end
  2510.   end
  2511.   #--------------------------------------------------------------------------
  2512.   # ● 释放窗口
  2513.   #--------------------------------------------------------------------------
  2514.   def dispose_all_windows
  2515.     ivar = instance_variables.map {|i| instance_variable_get(i)}.flatten
  2516.     ivar.each {|i| i.dispose if i.is_a?(Window) and not i.disposed?}
  2517.   end
  2518.   #--------------------------------------------------------------------------
  2519.   # ● 结束效果
  2520.   #--------------------------------------------------------------------------
  2521.   def after_effect
  2522.   end
  2523. end
  2524.  
  2525. #==============================================================================
  2526. # ■ Scene_Title
  2527. #==============================================================================
  2528. class Scene_Title
  2529.   remove_method :main
  2530.   include Scene_Base
  2531.   #--------------------------------------------------------------------------
  2532.   # ● 建立预判
  2533.   #--------------------------------------------------------------------------
  2534.   def need_create?
  2535.     # 战斗测试的情况下
  2536.     if $BTEST
  2537.       battle_test
  2538.       return false
  2539.     end
  2540.     return true
  2541.   end
  2542.   #--------------------------------------------------------------------------
  2543.   # ● 准备场景数据
  2544.   #--------------------------------------------------------------------------
  2545.   def prepare_data
  2546.     # 载入数据库
  2547.     $data_actors        = load_data("Data/Actors.rxdata")
  2548.     $data_classes       = load_data("Data/Classes.rxdata")
  2549.     $data_skills        = load_data("Data/Skills.rxdata")
  2550.     $data_items         = load_data("Data/Items.rxdata")
  2551.     $data_weapons       = load_data("Data/Weapons.rxdata")
  2552.     $data_armors        = load_data("Data/Armors.rxdata")
  2553.     $data_enemies       = load_data("Data/Enemies.rxdata")
  2554.     $data_troops        = load_data("Data/Troops.rxdata")
  2555.     $data_states        = load_data("Data/States.rxdata")
  2556.     $data_animations    = load_data("Data/Animations.rxdata")
  2557.     $data_tilesets      = load_data("Data/Tilesets.rxdata")
  2558.     $data_common_events = load_data("Data/CommonEvents.rxdata")
  2559.     $data_system        = load_data("Data/System.rxdata")
  2560.     # 生成系统对像
  2561.     $game_system = Game_System.new
  2562.   end
  2563.   #--------------------------------------------------------------------------
  2564.   # ● 建立精灵
  2565.   #--------------------------------------------------------------------------
  2566.   def create_all_sprites
  2567.     @sprite = Sprite.new
  2568.     @sprite.bitmap = RPG::Cache.title($data_system.title_name)
  2569.   end
  2570.   #--------------------------------------------------------------------------
  2571.   # ● 建立窗口
  2572.   #--------------------------------------------------------------------------
  2573.   def create_all_windows
  2574.     s1 = Vocab.new_game
  2575.     s2 = Vocab.continue
  2576.     s3 = Vocab.quit
  2577.     @command_window = Window_Command.new(192, [s1, s2, s3])
  2578.   end
  2579.   #--------------------------------------------------------------------------
  2580.   # ● 设置场景
  2581.   #--------------------------------------------------------------------------
  2582.   def post_create
  2583.     @command_window.back_opacity = 160
  2584.     @command_window.x = 320 - @command_window.width / 2
  2585.     @command_window.y = 288
  2586.     # 判定继续的有效性
  2587.     # 存档文件一个也不存在的时候也调查
  2588.     # 有効为 @continue_enabled 为 true、無効为 false
  2589.     @continue_enabled = false
  2590.     for i in 0..3
  2591.       if FileTest.exist?("Save#{i+1}.rxdata")
  2592.         @continue_enabled = true
  2593.       end
  2594.     end
  2595.     # 继续为有效的情况下、光标停止在继续上
  2596.     # 无效的情况下、继续的文字显示为灰色
  2597.     if @continue_enabled
  2598.       @command_window.index = 1
  2599.     else
  2600.       @command_window.disable_item(1)
  2601.     end
  2602.     # 演奏标题 BGM
  2603.     $game_system.bgm_play($data_system.title_bgm)
  2604.     # 停止演奏 ME、BGS
  2605.     Audio.me_stop
  2606.     Audio.bgs_stop
  2607.   end
  2608. end
  2609.  
  2610. #==============================================================================
  2611. # ■ Scene_Map
  2612. #==============================================================================
  2613. class Scene_Map
  2614.   remove_method :main
  2615.   include Scene_Base
  2616.   #--------------------------------------------------------------------------
  2617.   # ● 建立精灵组
  2618.   #--------------------------------------------------------------------------
  2619.   def create_spriteset
  2620.     @spriteset = Spriteset_Map.new
  2621.   end
  2622.   #--------------------------------------------------------------------------
  2623.   # ● 建立窗口
  2624.   #--------------------------------------------------------------------------
  2625.   def create_all_windows
  2626.     @message_window = Window_Message.new
  2627.   end
  2628.   #--------------------------------------------------------------------------
  2629.   # ● 结束效果
  2630.   #--------------------------------------------------------------------------
  2631.   def after_effect
  2632.     # 标题画面切换中的情况下
  2633.     if $scene.is_a?(Scene_Title)
  2634.       # 淡入淡出画面
  2635.       Graphics.transition
  2636.       Graphics.freeze
  2637.     end
  2638.   end
  2639. end
  2640.  
  2641. #==============================================================================
  2642. # ■ Scene_Menu
  2643. #==============================================================================
  2644. class Scene_Menu
  2645.   remove_method :main
  2646.   include Scene_Base
  2647.   #--------------------------------------------------------------------------
  2648.   # ● 建立窗口
  2649.   #--------------------------------------------------------------------------
  2650.   def create_all_windows
  2651.     # 生成命令窗口
  2652.     s1 = Vocab.item
  2653.     s2 = Vocab.skill
  2654.     s3 = Vocab.equip
  2655.     s4 = Vocab.status
  2656.     s5 = Vocab.save
  2657.     s6 = Vocab.end_game
  2658.     @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
  2659.     # 生成游戏时间窗口
  2660.     @playtime_window = Window_PlayTime.new
  2661.     # 生成步数窗口
  2662.     @steps_window = Window_Steps.new
  2663.     # 生成金钱窗口
  2664.     @gold_window = Window_Gold.new
  2665.     # 生成状态窗口
  2666.     @status_window = Window_MenuStatus.new
  2667.   end
  2668.   #--------------------------------------------------------------------------
  2669.   # ● 设置场景
  2670.   #--------------------------------------------------------------------------
  2671.   def post_create
  2672.     @command_window.index = @menu_index
  2673.     # 同伴人数为 0 的情况下
  2674.     if $game_party.actors.size == 0
  2675.       # 物品、特技、装备、状态无效化
  2676.       @command_window.disable_item(0)
  2677.       @command_window.disable_item(1)
  2678.       @command_window.disable_item(2)
  2679.       @command_window.disable_item(3)
  2680.     end
  2681.     # 禁止存档的情况下
  2682.     if $game_system.save_disabled
  2683.       # 存档无效
  2684.       @command_window.disable_item(4)
  2685.     end
  2686.     @playtime_window.x = 0
  2687.     @playtime_window.y = 224
  2688.     @steps_window.x = 0
  2689.     @steps_window.y = 320
  2690.     @gold_window.x = 0
  2691.     @gold_window.y = 416
  2692.     @status_window.x = 160
  2693.     @status_window.y = 0
  2694.   end
  2695. end
  2696.  
  2697. #==============================================================================
  2698. # ■ Scene_Item
  2699. #==============================================================================
  2700. class Scene_Item
  2701.   remove_method :main
  2702.   include Scene_Base
  2703.   #--------------------------------------------------------------------------
  2704.   # ● 建立窗口
  2705.   #--------------------------------------------------------------------------
  2706.   def create_all_windows
  2707.     @help_window = Window_Help.new
  2708.     @item_window = Window_Item.new
  2709.     @target_window = Window_Target.new
  2710.   end
  2711.   #--------------------------------------------------------------------------
  2712.   # ● 设置场景
  2713.   #--------------------------------------------------------------------------
  2714.   def post_create
  2715.     # 关联帮助窗口
  2716.     @item_window.help_window = @help_window
  2717.     @target_window.visible = false
  2718.     @target_window.active = false
  2719.   end
  2720. end
  2721.  
  2722. #==============================================================================
  2723. # ■ Scene_Skill
  2724. #==============================================================================
  2725. class Scene_Skill
  2726.   remove_method :main
  2727.   include Scene_Base
  2728.   #--------------------------------------------------------------------------
  2729.   # ● 加载数据
  2730.   #--------------------------------------------------------------------------
  2731.   def prepare_data
  2732.     @actor = $game_party.actors[@actor_index]
  2733.   end
  2734.   #--------------------------------------------------------------------------
  2735.   # ● 建立窗口
  2736.   #--------------------------------------------------------------------------
  2737.   def create_all_windows
  2738.     @help_window = Window_Help.new
  2739.     @status_window = Window_SkillStatus.new(@actor)
  2740.     @skill_window = Window_Skill.new(@actor)
  2741.     @target_window = Window_Target.new
  2742.   end
  2743.   #--------------------------------------------------------------------------
  2744.   # ● 设置场景
  2745.   #--------------------------------------------------------------------------
  2746.   def post_create
  2747.     # 关联帮助窗口
  2748.     @skill_window.help_window = @help_window
  2749.     @target_window.visible = false
  2750.     @target_window.active = false
  2751.   end
  2752. end
  2753.  
  2754. #==============================================================================
  2755. # ■ Scene_Equip
  2756. #==============================================================================
  2757. class Scene_Equip
  2758.   remove_method :main
  2759.   include Scene_Base
  2760.   #--------------------------------------------------------------------------
  2761.   # ● 加载数据
  2762.   #--------------------------------------------------------------------------
  2763.   def prepare_data
  2764.     @actor = $game_party.actors[@actor_index]
  2765.   end
  2766.   #--------------------------------------------------------------------------
  2767.   # ● 生成窗口
  2768.   #--------------------------------------------------------------------------
  2769.   def create_all_windows
  2770.     @help_window = Window_Help.new
  2771.     @left_window = Window_EquipLeft.new(@actor)
  2772.     @right_window = Window_EquipRight.new(@actor)
  2773.     @item_window1 = Window_EquipItem.new(@actor, 0)
  2774.     @item_window2 = Window_EquipItem.new(@actor, 1)
  2775.     @item_window3 = Window_EquipItem.new(@actor, 2)
  2776.     @item_window4 = Window_EquipItem.new(@actor, 3)
  2777.     @item_window5 = Window_EquipItem.new(@actor, 4)
  2778.   end
  2779.   #--------------------------------------------------------------------------
  2780.   # ● 设置场景
  2781.   #--------------------------------------------------------------------------
  2782.   def post_create
  2783.     # 关联帮助窗口
  2784.     @right_window.help_window = @help_window
  2785.     @item_window1.help_window = @help_window
  2786.     @item_window2.help_window = @help_window
  2787.     @item_window3.help_window = @help_window
  2788.     @item_window4.help_window = @help_window
  2789.     @item_window5.help_window = @help_window
  2790.     # 设置光标位置
  2791.     @right_window.index = @equip_index
  2792.     refresh
  2793.   end
  2794. end
  2795.  
  2796. #==============================================================================
  2797. # ■ Scene_Status
  2798. #==============================================================================
  2799. class Scene_Status
  2800.   remove_method :main
  2801.   include Scene_Base
  2802.   #--------------------------------------------------------------------------
  2803.   # ● 加载数据
  2804.   #--------------------------------------------------------------------------
  2805.   def prepare_data
  2806.     @actor = $game_party.actors[@actor_index]
  2807.   end
  2808.   #--------------------------------------------------------------------------
  2809.   # ● 建立窗口
  2810.   #--------------------------------------------------------------------------
  2811.   def create_all_windows
  2812.     @status_window = Window_Status.new(@actor)
  2813.   end
  2814. end
  2815.  
  2816. #==============================================================================
  2817. # ■ Scene_File
  2818. #==============================================================================
  2819. class Scene_File
  2820.   remove_method :main
  2821.   include Scene_Base
  2822.   #--------------------------------------------------------------------------
  2823.   # ● 建立窗口
  2824.   #--------------------------------------------------------------------------
  2825.   def create_all_windows
  2826.     # 生成帮助窗口
  2827.     @help_window = Window_Help.new
  2828.     # 生成存档文件窗口
  2829.     @savefile_windows = []
  2830.     for i in 0..3
  2831.       @savefile_windows.push(Window_SaveFile.new(i, make_filename(i)))
  2832.     end
  2833.   end
  2834.   #--------------------------------------------------------------------------
  2835.   # ● 设置场景
  2836.   #--------------------------------------------------------------------------
  2837.   def post_create
  2838.     @help_window.set_text(@help_text)
  2839.     # 选择最后操作的文件
  2840.     @file_index = $game_temp.last_file_index
  2841.     @savefile_windows[@file_index].selected = true
  2842.   end
  2843. end
  2844.  
  2845. #==============================================================================
  2846. # ■ Scene_End
  2847. #==============================================================================
  2848. class Scene_End
  2849.   remove_method :main
  2850.   include Scene_Base
  2851.   #--------------------------------------------------------------------------
  2852.   # ● 建立窗口
  2853.   #--------------------------------------------------------------------------
  2854.   def create_all_windows
  2855.     # 生成命令窗口
  2856.     s1 = Vocab.to_title
  2857.     s2 = Vocab.quit
  2858.     s3 = Vocab.cancel
  2859.     @command_window = Window_Command.new(192, [s1, s2, s3])
  2860.   end
  2861.   #--------------------------------------------------------------------------
  2862.   # ● 设置场景
  2863.   #--------------------------------------------------------------------------
  2864.   def post_create
  2865.     @command_window.x = 320 - @command_window.width / 2
  2866.     @command_window.y = 240 - @command_window.height / 2
  2867.   end
  2868.   #--------------------------------------------------------------------------
  2869.   # ● 结束效果
  2870.   #--------------------------------------------------------------------------
  2871.   def after_effect
  2872.     # 如果在标题画面切换中的情况下
  2873.     if $scene.is_a?(Scene_Title)
  2874.       # 淡入淡出画面
  2875.       Graphics.transition
  2876.       Graphics.freeze
  2877.     end
  2878.   end
  2879. end
  2880.  
  2881. #==============================================================================
  2882. # ■ Scene_Battle
  2883. #==============================================================================
  2884. class Scene_Battle
  2885.   remove_method :main
  2886.   include Scene_Base
  2887.   #--------------------------------------------------------------------------
  2888.   # ● 加载数据
  2889.   #--------------------------------------------------------------------------
  2890.   def prepare_data
  2891.     # 初始化战斗用的各种暂时数据
  2892.     $game_temp.in_battle = true
  2893.     $game_temp.battle_turn = 0
  2894.     $game_temp.battle_event_flags.clear
  2895.     $game_temp.battle_abort = false
  2896.     $game_temp.battle_main_phase = false
  2897.     $game_temp.battleback_name = $game_map.battleback_name
  2898.     $game_temp.forcing_battler = nil
  2899.     # 初始化战斗用事件解释器
  2900.     $game_system.battle_interpreter.setup(nil, 0)
  2901.     # 准备队伍
  2902.     @troop_id = $game_temp.battle_troop_id
  2903.     $game_troop.setup(@troop_id)
  2904.   end
  2905.   #--------------------------------------------------------------------------
  2906.   # ● 建立窗口
  2907.   #--------------------------------------------------------------------------
  2908.   def create_all_windows
  2909.     # 生成角色命令窗口
  2910.     s1 = Vocab.attack
  2911.     s2 = Vocab.skill
  2912.     s3 = Vocab.guard
  2913.     s4 = Vocab.item
  2914.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
  2915.     # 生成其它窗口
  2916.     @party_command_window = Window_PartyCommand.new
  2917.     @help_window = Window_Help.new
  2918.     @status_window = Window_BattleStatus.new
  2919.     @message_window = Window_Message.new
  2920.   end
  2921.   #--------------------------------------------------------------------------
  2922.   # ● 建立精灵组
  2923.   #--------------------------------------------------------------------------
  2924.   def create_spriteset
  2925.     # 生成活动块
  2926.     @spriteset = Spriteset_Battle.new
  2927.   end
  2928.   #--------------------------------------------------------------------------
  2929.   # ● 设置场景
  2930.   #--------------------------------------------------------------------------
  2931.   def post_create
  2932.     @actor_command_window.y = 160
  2933.     @actor_command_window.back_opacity = 160
  2934.     @actor_command_window.active = false
  2935.     @actor_command_window.visible = false
  2936.     @help_window.back_opacity = 160
  2937.     @help_window.visible = false
  2938.     # 初始化等待计数
  2939.     @wait_count = 0
  2940.     # 执行过渡
  2941.     @custom_transition = true
  2942.     if $data_system.battle_transition == ""
  2943.       Graphics.transition(20)
  2944.     else
  2945.       Graphics.transition(40, "Graphics/Transitions/" +
  2946.         $data_system.battle_transition)
  2947.     end
  2948.     # 开始自由战斗回合
  2949.     start_phase1
  2950.   end
  2951.   #--------------------------------------------------------------------------
  2952.   # ● 终止场景
  2953.   #--------------------------------------------------------------------------
  2954.   def pre_terminate
  2955.     # 刷新地图
  2956.     $game_map.refresh
  2957.   end
  2958.   #--------------------------------------------------------------------------
  2959.   # ● 结束效果
  2960.   #--------------------------------------------------------------------------
  2961.   def after_effect
  2962.     # 标题画面切换中的情况
  2963.     if $scene.is_a?(Scene_Title)
  2964.       # 淡入淡出画面
  2965.       Graphics.transition
  2966.       Graphics.freeze
  2967.     end
  2968.     # 战斗测试或者游戏结束以外的画面切换中的情况
  2969.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  2970.       $scene = nil
  2971.     end
  2972.   end
  2973.   #--------------------------------------------------------------------------
  2974.   # ● 刷新画面 (主回合步骤 4 : 对像方动画)
  2975.   #--------------------------------------------------------------------------
  2976.   def update_phase4_step4
  2977.     # 对像方动画
  2978.     for target in @target_battlers
  2979.       target.animation_id = @animation2_id
  2980.       target.animation_hit = (target.damage != Vocab.miss)
  2981.     end
  2982.     # 限制动画长度、最低 8 帧
  2983.     @wait_count = 8
  2984.     # 移至步骤 5
  2985.     @phase4_step = 5
  2986.   end
  2987. end
  2988.  
  2989. #==============================================================================
  2990. # ■ Scene_Shop
  2991. #==============================================================================
  2992. class Scene_Shop
  2993.   remove_method :main
  2994.   include Scene_Base
  2995.   #--------------------------------------------------------------------------
  2996.   # ● 建立窗口
  2997.   #--------------------------------------------------------------------------
  2998.   def create_all_windows
  2999.     @help_window = Window_Help.new
  3000.     @command_window = Window_ShopCommand.new
  3001.     @gold_window = Window_Gold.new
  3002.     @dummy_window = Window_Base.new(0, 128, 640, 352)
  3003.     @buy_window = Window_ShopBuy.new($game_temp.shop_goods)
  3004.     @sell_window = Window_ShopSell.new
  3005.     @number_window = Window_ShopNumber.new
  3006.     @status_window = Window_ShopStatus.new
  3007.   end
  3008.   #--------------------------------------------------------------------------
  3009.   # ● 设置场景
  3010.   #--------------------------------------------------------------------------
  3011.   def post_create
  3012.     @gold_window.x = 480
  3013.     @gold_window.y = 64
  3014.     @buy_window.active = false
  3015.     @buy_window.visible = false
  3016.     @buy_window.help_window = @help_window
  3017.     @sell_window.active = false
  3018.     @sell_window.visible = false
  3019.     @sell_window.help_window = @help_window
  3020.     @number_window.active = false
  3021.     @number_window.visible = false
  3022.     @status_window.visible = false
  3023.   end
  3024.   #--------------------------------------------------------------------------
  3025.   # ● 刷新画面 (购买窗口激活的情况下)
  3026.   #--------------------------------------------------------------------------
  3027.   def update_buy
  3028.     # 设置状态窗口的物品
  3029.     @status_window.item = @buy_window.item
  3030.     # 按下 B 键的情况下
  3031.     if Input.trigger?(Input::B)
  3032.       # 演奏取消 SE
  3033.       $game_system.se_play($data_system.cancel_se)
  3034.       # 窗口状态转向初期模式
  3035.       @command_window.active = true
  3036.       @dummy_window.visible = true
  3037.       @buy_window.active = false
  3038.       @buy_window.visible = false
  3039.       @status_window.visible = false
  3040.       @status_window.item = nil
  3041.       # 删除帮助文本
  3042.       @help_window.set_text("")
  3043.       return
  3044.     end
  3045.     # 按下 C 键的情况下
  3046.     if Input.trigger?(Input::C)
  3047.       # 获取物品
  3048.       @item = @buy_window.item
  3049.       # 物品无效的情况下、或者价格在所持金以上的情况下
  3050.       if @item == nil or @item.price > $game_party.gold
  3051.         # 演奏冻结 SE
  3052.         $game_system.se_play($data_system.buzzer_se)
  3053.         return
  3054.       end
  3055.       # 获取物品所持数
  3056.       number = $game_party.any_number(@item)
  3057.       # 如果拥有个数已达上限
  3058.       if number == ITEM_MAX
  3059.         # 演奏冻结 SE
  3060.         $game_system.se_play($data_system.buzzer_se)
  3061.         return
  3062.       end
  3063.       # 演奏确定 SE
  3064.       $game_system.se_play($data_system.decision_se)
  3065.       # 计算可以最多购买的数量
  3066.       max = @item.price == 0 ? ITEM_MAX : $game_party.gold / @item.price
  3067.       max = [max, ITEM_MAX - number].min if ITEM_MAX
  3068.       # 窗口状态转向数值输入模式
  3069.       @buy_window.active = false
  3070.       @buy_window.visible = false
  3071.       @number_window.set(@item, max, @item.price)
  3072.       @number_window.active = true
  3073.       @number_window.visible = true
  3074.     end
  3075.   end
  3076. end
  3077.  
  3078. #==============================================================================
  3079. # ■ Scene_Name
  3080. #==============================================================================
  3081. class Scene_Name
  3082.   remove_method :main
  3083.   include Scene_Base
  3084.   #--------------------------------------------------------------------------
  3085.   # ● 加载数据
  3086.   #--------------------------------------------------------------------------
  3087.   def prepare_data
  3088.     # 获取角色
  3089.     @actor = $game_actors[$game_temp.name_actor_id]
  3090.   end
  3091.   #--------------------------------------------------------------------------
  3092.   # ● 生成窗口
  3093.   #--------------------------------------------------------------------------
  3094.   def create_all_windows
  3095.     @edit_window = Window_NameEdit.new(@actor, $game_temp.name_max_char)
  3096.     @input_window = Window_NameInput.new
  3097.   end
  3098. end
  3099.  
  3100. #==============================================================================
  3101. # ■ Scene_Gameover
  3102. #==============================================================================
  3103. class Scene_Gameover
  3104.   remove_method :main
  3105.   include Scene_Base
  3106.   #--------------------------------------------------------------------------
  3107.   # ● 建立精灵
  3108.   #--------------------------------------------------------------------------
  3109.   def create_all_sprites
  3110.     # 生成游戏结束图形
  3111.     @sprite = Sprite.new
  3112.     @sprite.bitmap = RPG::Cache.gameover($data_system.gameover_name)
  3113.   end
  3114.   #--------------------------------------------------------------------------
  3115.   # ● 设置场景
  3116.   #--------------------------------------------------------------------------
  3117.   def post_create
  3118.     # 停止 BGM、BGS
  3119.     $game_system.bgm_play(nil)
  3120.     $game_system.bgs_play(nil)
  3121.     # 演奏游戏结束 ME
  3122.     $game_system.me_play($data_system.gameover_me)
  3123.     # 执行过渡
  3124.     @custom_transition = true
  3125.     Graphics.transition(120)
  3126.   end
  3127.   #--------------------------------------------------------------------------
  3128.   # ● 结束效果
  3129.   #--------------------------------------------------------------------------
  3130.   def after_effect
  3131.     # 执行过渡
  3132.     Graphics.transition(40)
  3133.     # 准备过渡
  3134.     Graphics.freeze
  3135.     # 战斗测试的情况下
  3136.     $scene = nil if $BTEST
  3137.   end
  3138. end
  3139.  
  3140. #==============================================================================
  3141. # ■ Scene_Debug
  3142. #==============================================================================
  3143. class Scene_Debug
  3144.   remove_method :main
  3145.   include Scene_Base
  3146.   #--------------------------------------------------------------------------
  3147.   # ● 建立窗口
  3148.   #--------------------------------------------------------------------------
  3149.   def create_all_windows
  3150.     @left_window = Window_DebugLeft.new
  3151.     @right_window = Window_DebugRight.new
  3152.     @help_window = Window_Base.new(192, 352, 448, 128)
  3153.     @help_window.contents = Bitmap.new(406, 96)
  3154.   end
  3155.   #--------------------------------------------------------------------------
  3156.   # ● 设置场景
  3157.   #--------------------------------------------------------------------------
  3158.   def post_create
  3159.     # 还原为上次选择的项目
  3160.     @left_window.top_row = $game_temp.debug_top_row
  3161.     @left_window.index = $game_temp.debug_index
  3162.     @right_window.mode = @left_window.mode
  3163.     @right_window.top_id = @left_window.top_id
  3164.   end
  3165.   #--------------------------------------------------------------------------
  3166.   # ● 终止场景
  3167.   #--------------------------------------------------------------------------
  3168.   def pre_terminate
  3169.     $game_map.refresh
  3170.   end
  3171.   #--------------------------------------------------------------------------
  3172.   # ● 刷新画面 (右侧窗口被激活的情况下)
  3173.   #--------------------------------------------------------------------------
  3174.   def update_right
  3175.     # 按下 B 键的情况下
  3176.     if Input.trigger?(Input::B)
  3177.       # 演奏取消 SE
  3178.       $game_system.se_play($data_system.cancel_se)
  3179.       # 激活左侧窗口
  3180.       @left_window.active = true
  3181.       @right_window.active = false
  3182.       @right_window.index = -1
  3183.       # 删除帮助
  3184.       @help_window.contents.clear
  3185.       return
  3186.     end
  3187.     # 获取被选择的开关 / 变量的 ID
  3188.     current_id = @right_window.top_id + @right_window.index
  3189.     # 开关的情况下
  3190.     if @right_window.mode == 0
  3191.       # 按下 C 键的情况下
  3192.       if Input.trigger?(Input::C)
  3193.         # 演奏确定 SE
  3194.         $game_system.se_play($data_system.decision_se)
  3195.         # 逆转 ON / OFF 状态
  3196.         $game_switches[current_id] = (not $game_switches[current_id])
  3197.         @right_window.refresh
  3198.         return
  3199.       end
  3200.     end
  3201.     # 变量的情况下
  3202.     if @right_window.mode == 1
  3203.       # 按下右键的情况下
  3204.       return set_variable(current_id, +1) if Input.repeat?(Input::RIGHT)
  3205.       # 按下左键的情况下
  3206.       return set_variable(current_id, -1) if Input.repeat?(Input::LEFT)
  3207.       # 按下 R 键的情况下
  3208.       return set_variable(current_id, +10) if Input.repeat?(Input::R)
  3209.       # 按下 L 键的情况下
  3210.       return set_variable(current_id, -10) if Input.repeat?(Input::L)
  3211.     end
  3212.   end
  3213.   #--------------------------------------------------------------------------
  3214.   # ● 更新变量值
  3215.   #--------------------------------------------------------------------------
  3216.   def set_variable(id, value)
  3217.     # 按下SHIFT键的情况下100倍变化
  3218.     if Input.press?(Input::SHIFT)
  3219.       fold = 100
  3220.     # 按下CTRL键的情况下10000倍变化
  3221.     elsif Input.press?(Input::CTRL)
  3222.       fold = 10000
  3223.     # 按下ALT键的情况下1000000倍变化
  3224.     elsif Input.press?(Input::ALT)
  3225.       fold = 1000000
  3226.     # 1倍变化
  3227.     else
  3228.       fold = 1
  3229.     end
  3230.     # 演奏光标 SE
  3231.     $game_system.se_play($data_system.cursor_se)
  3232.     $game_variables[id] += value * fold
  3233.     $game_variables[id] = $game_variables[id].limit(-VAR_MAX, VAR_MAX)
  3234.     @right_window.refresh
  3235.   end
  3236. end
  3237.  
  3238. Font.default_size = SailCat::Core_Config::FONT_SIZE_DEFAULT
  3239. Graphics.frame_rate = SailCat::Core_Config::FRAME_RATE
现在还能改名吗qwq

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

2
发表于 2022-5-26 21:40:36 | 只看该作者
这个脚本不能改变分辨率吧……

点评

我后来也发现了这个问题,变量名存实亡[扶额]  发表于 2022-5-27 12:29
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-11-22 12:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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