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

Project1

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

事件脚本扩展

[复制链接]

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

跳转到指定楼层
1
发表于 2014-11-23 16:33:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 taroxd 于 2015-2-11 18:35 编辑

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2. # ● require Taroxd基础设置
  3. #    偷懒用的事件脚本。
  4. #--------------------------------------------------------------------------
  5. #
  6. #    添加了以下方法:
  7. #
  8. #    Game_Interpreter
  9. #      this_event: 获取本事件。如果事件不在当前地图上,返回 nil。
  10. #      add_battlelog(text): 追加战斗信息。
  11. #      shake_for(power = 5, speed = 5) { block }:
  12. #        震动画面直到 block 执行完毕。没有 block 时,画面会无限震动下去。
  13. #        不要在 block 中 return。
  14. #        如果一定需要的话,记得加上 stop_shake 来停止震动。
  15. #      stop_shake: 停止画面震动。
  16. #      self_switch
  17. #      self_switch(event_id)
  18. #      self_switch(event_id, map_id):
  19. #        返回对应事件的 SelfSwitch 对象。
  20. #
  21. #    SelfSwitch
  22. #      由 Game_Interpreter#self_switch 获取。
  23. #      方法:
  24. #      self[letter]:获取对应独立开关的值。letter: 'A'、'B'、'C'、'D' 之一。
  25. #      self[letter] = value:设置对应独立开关的值。
  26. #      属性 a, b, c, d:分别代表对应的独立开关。
  27. #
  28. #    Game_Switches/Game_Variables/Game_SelfSwitches
  29. #       clear / reset: 清空数据
  30. #
  31. #    Game_CharacterBase
  32. #       zoom_x, zoom_y, angle, mirror, opacity 属性: 控制对应 Sprite 的属性。
  33. #       zoom=: 同时设置 zoom_x 与 zoom_y。
  34. #       force_pattern(pattern):
  35. #         将行走图强制更改为对应的 pattern。
  36. #         pattern 从左到右分别为 0, 1, 2。
  37. #         使用此功能时,建议勾选固定朝向,并且取消步行动画。
  38. #       force_bush_depth(depth):
  39. #         将人物的 bush_depth 属性固定为 depth,不受地形的影响。
  40. #
  41. #    Game_Player
  42. #       waiting 属性:设为真值时,禁止玩家移动
  43. #       disable_scroll 属性:设为真值时,禁止地图卷动
  44. #
  45. #    Game_Party
  46. #       +(gold), -(gold): 增加/减少金钱,并返回 self。
  47. #       <<(actor), <<(actor_id): 加入指定队员,并返回 self。
  48. #
  49. #--------------------------------------------------------------------------
  50.  
  51. module Taroxd::EventHelper
  52.  
  53.   # 定义了清除数据的方法
  54.   module ClearData
  55.  
  56.     Game_Switches.send     :include, self
  57.     Game_Variables.send    :include, self
  58.     Game_SelfSwitches.send :include, self
  59.  
  60.     def clear
  61.       @data.clear
  62.       on_change
  63.       self
  64.     end
  65.  
  66.     alias_method :reset, :clear
  67.   end
  68.  
  69.   # 代表独立开关的对象
  70.   SelfSwitch = Struct.new(:map_id, :event_id) do
  71.     def [](letter)
  72.       $game_self_switches[[map_id, event_id, letter]]
  73.     end
  74.  
  75.     def []=(letter, value)
  76.       $game_self_switches[[map_id, event_id, letter]] = value
  77.     end
  78.  
  79.     def a; self['A']; end
  80.     def b; self['B']; end
  81.     def c; self['C']; end
  82.     def d; self['D']; end
  83.  
  84.     def a=(v); self['A'] = v; end
  85.     def b=(v); self['B'] = v; end
  86.     def c=(v); self['C'] = v; end
  87.     def d=(v); self['D'] = v; end
  88.   end
  89. end
  90.  
  91.  
  92. class Game_Interpreter
  93.  
  94.   include Taroxd::EventHelper
  95.  
  96.   def this_event
  97.     $game_map.events[@event_id] if same_map?
  98.   end
  99.  
  100.   def add_battlelog(text)
  101.     if SceneManager.scene_is?(Scene_Battle)
  102.       SceneManager.scene.add_battlelog(text)
  103.     end
  104.   end
  105.  
  106.   def self_switch(event_id = @event_id, map_id = @map_id)
  107.     SelfSwitch.new(map_id, event_id)
  108.   end
  109.  
  110.   def stop_shake
  111.     screen.start_shake(0, 0, 0)
  112.   end
  113.  
  114.   # 为了在事件解释器的 fiber 中使用,因此没有 ensure。
  115.   def shake_for(power = 5, speed = 5)
  116.     screen.start_shake(power, speed, Float::INFINITY)
  117.     return unless block_given?
  118.     yield
  119.     stop_shake
  120.   end
  121. end
  122.  
  123. class Game_CharacterBase
  124.  
  125.   attr_accessor :zoom_x, :zoom_y, :angle, :mirror, :opacity
  126.  
  127.   def zoom=(zoom)
  128.     @zoom_x = @zoom_y = zoom
  129.   end
  130.  
  131.   def force_pattern(pattern)
  132.     @original_pattern = @pattern = pattern
  133.   end
  134.  
  135.   def force_bush_depth(depth)
  136.     @force_bush_depth = @bush_depth = depth
  137.   end
  138.  
  139.   def_unless(:update_bush_depth) { @force_bush_depth }
  140. end
  141.  
  142.  
  143. class Game_Player < Game_Character
  144.  
  145.   attr_accessor :waiting, :disable_scroll
  146.  
  147.   def_unless :movable?, :waiting
  148.   def_unless(:update_scroll) { |_, _| @disable_scroll }
  149. end
  150.  
  151. class Game_Party < Game_Unit
  152.  
  153.   def +(gold)
  154.     gain_gold(gold)
  155.     self
  156.   end
  157.  
  158.   def -(gold)
  159.     lose_gold(gold)
  160.     self
  161.   end
  162.  
  163.   def <<(actor)
  164.     add_actor(actor.id)
  165.     self
  166.   end
  167. end
  168.  
  169. class Sprite_Character < Sprite_Base
  170.  
  171.   # 更新对应属性
  172.   def_after :update_other do
  173.     self.zoom_x = @character.zoom_x if @character.zoom_x
  174.     self.zoom_y = @character.zoom_y if @character.zoom_y
  175.     self.angle  = @character.angle  if @character.angle
  176.     self.mirror = @character.mirror unless @character.mirror.nil?
  177.   end
  178. end
  179.  
  180. class Scene_Battle < Scene_Base
  181.  
  182.   def add_battlelog(text)
  183.     @log_window.add_text(text)
  184.   end
  185. end
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-28 17:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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