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

Project1

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

[RMVX发布] [练手]事件执行条件扩展+独立变量

[复制链接]

Lv1.梦旅人

Mr.Gandum

梦石
0
星屑
226
在线时间
2070 小时
注册时间
2007-1-31
帖子
3039

贵宾

跳转到指定楼层
1
发表于 2011-12-4 14:56:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
嘛,前天昨天一直在和Ace的帮助文档瞪眼,看着看着对自己突然有种说不出来的不信感,所以写了这个脚本。

这个脚本的大体工作方法嘛,其实就是读取每页第一个事件指令,假如这个事件指令是注释,则按照内容来添加条件。

在注释内按照下面的格式输入,用“|”分开。大概可以用这些条件:
1,变量
  1. 变量,id,num
复制代码
id输入要判断的变量ID,num输入是几以上。

2,开关
  1. 开关,id,ft
复制代码
id输入要判断的开关ID,ft输入开启关闭状态(true为开启,false为关闭)如果省略则为true

3,独立开关
  1. 独立开关,type,tf
复制代码
type输入药判断的独立开关,用A-D的英文大写字母。tf同上。

4,角色
  1. 角色,id,tf
复制代码
ID输入要判断是否在队伍内的角色ID,tf输入要判定是在(true)还是不在(false)

5,物品
  1. 物品,id,num
复制代码
ID输入要判定的道具ID,num输入时几以上。若省略为则1

6,独立变量
  1. 独立变量,type,num
复制代码
type输入要判定的独立变量类型,用A-D的英文大写字母。num为判定几以上。

独立变量:
一个新的类,可以在保存在存档内,操作时使用一下的命令,在事件指令第三页中的脚本输入:
1,设置值
  1. self_vary_control(key,num)
复制代码
key输入独立变量类型,使用A-D的英文大写字母,用""包上。
num输入要代入的值。

2,增加值
  1. self_vary_plus(key, num)
复制代码
key同上,
num输入要增加的值。

3,减少值
  1. self_vary_minus(key, num)
复制代码
key同上,
num输入要减少的值。

4,获取值
  1. self_vary(key)
复制代码
key同上,用这个来获取该独立变量的值,用于条件分歧等。

最后上脚本:
  1. module RPG
  2.   class Event
  3.     class Page
  4.       class Condition
  5.         alias extra_condition_initialize initialize
  6.         def initialize
  7.           extra_condition_initialize
  8.           @extra_condition = []
  9.         end
  10.         attr_accessor :extra_condition
  11.       end
  12.     end
  13.   end
  14. end
  15. module RPG
  16.   class Event
  17.     class Page
  18.       def get_extra_conditions
  19.         @condition.extra_condition = []
  20.         i = 0
  21.         loop do
  22.           break if @list[i].code != 108
  23.           note = @list[i].parameters
  24.           note.each{|arr|
  25.           arr.each_line{|line|
  26.           line.split(/\|/).each{|str|
  27.           pa = str.split(/\,/)
  28.           case pa[0]
  29.           when "角色"
  30.             pa[2] = pa[2] == "false" ? false : true
  31.             @condition.extra_condition.push(["actor",pa[1].to_i, pa[2]])
  32.           when "变量"
  33.             @condition.extra_condition.push(["var",pa[1].to_i,pa[2].to_i])
  34.           when "开关"
  35.             pa[2] = pa[2] == "false" ? false : true
  36.             @condition.extra_condition.push(["swi",pa[1].to_i,pa[2]])
  37.           when "独立开关"
  38.             pa[2] = pa[2] == "false" ? false : true
  39.             @condition.extra_condition.push(["seswi",pa[1],pa[2]])
  40.           when "独立变量"
  41.             @condition.extra_condition.push(["sevar",pa[1],pa[2].to_i])
  42.           when "物品"
  43.             pa[2] = pa[2] == nil ? 1 : pa[2]
  44.             @condition.extra_condition.push(["item",pa[1].to_i,pa[2].to_i])
  45.           end
  46.           }
  47.           }
  48.           }
  49.           i += 1
  50.         end
  51.       end
  52.     end
  53.   end
  54. end
  55. #==============================================================================
  56. # ■ Game_SelfVariables
  57. #------------------------------------------------------------------------------
  58. #  处理独立开关的类。编入的是类 Hash 的外壳。本类的实例请参考 $game_self_variables
  59. #==============================================================================

  60. class Game_SelfVaribales
  61.   #--------------------------------------------------------------------------
  62.   # ● 初始化对像
  63.   #--------------------------------------------------------------------------
  64.   def initialize
  65.     @data = {}
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 获取独立变量
  69.   #     key : 键
  70.   #--------------------------------------------------------------------------
  71.   def [](key)
  72.     return @data[key] == nil ? 0 : @data[key]
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 设置独立变量
  76.   #     key   : 键
  77.   #     value : 值
  78.   #--------------------------------------------------------------------------
  79.   def []=(key, value)
  80.     @data[key] = value
  81.   end
  82. end
  83. #==============================================================================
  84. # ■ Game_Interpreter
  85. #------------------------------------------------------------------------------
  86. #  执行事件命令的解释器。本类在 Game_Map 类、Game_Troop 类、与
  87. # Game_Event 类的内部使用。
  88. #==============================================================================

  89. class Game_Interpreter
  90.   def self_vary_control(key, num)
  91.     if @original_event_id > 0
  92.       keys = [@map_id, @original_event_id, key]
  93.       $game_self_variables[keys] = num
  94.     end
  95.     $game_map.need_refresh = true
  96.     return true
  97.   end
  98.   def self_vary_plus(key, num)
  99.     if @original_event_id > 0
  100.       keys = [@map_id, @original_event_id, key]
  101.       n = $game_self_variables[keys] + num
  102.       $game_self_variables[keys] = n
  103.     end
  104.     $game_map.need_refresh = true
  105.     return true
  106.   end
  107.   def self_vary_minus(key, num)
  108.     if @original_event_id > 0
  109.       keys = [@map_id, @original_event_id, key]
  110.       n = $game_self_variables[keys] - num
  111.       $game_self_variables[keys] = n
  112.     end
  113.     $game_map.need_refresh = true
  114.     return true
  115.   end
  116.   def self_vary(key)
  117.     if @original_event_id > 0
  118.       keys = [@map_id, @original_event_id, key]
  119.       num = $game_self_variables[keys]
  120.     end
  121.     return num == nil ? 0 : num
  122.   end
  123. end
  124. #==============================================================================
  125. # ■ Scene_Title
  126. #------------------------------------------------------------------------------
  127. #  处理标题画面的类。
  128. #==============================================================================

  129. class Scene_Title < Scene_Base
  130.   alias self_variable_create_game_objects create_game_objects
  131.   #--------------------------------------------------------------------------
  132.   # ● 生成各种游戏对象
  133.   #--------------------------------------------------------------------------
  134.   def create_game_objects
  135.     $game_self_variables = Game_SelfVaribales.new
  136.     self_variable_create_game_objects
  137.   end
  138. end
  139. #==============================================================================
  140. # ■ Scene_File
  141. #------------------------------------------------------------------------------
  142. #  存档画面及读档画面的类。
  143. #==============================================================================

  144. class Scene_File < Scene_Base
  145.   alias self_variable_write_save_data write_save_data
  146.   #--------------------------------------------------------------------------
  147.   # ● 写入存档数据
  148.   #     file : 写入存档对象(已开启)
  149.   #--------------------------------------------------------------------------
  150.   def write_save_data(file)
  151.     self_variable_write_save_data(file)
  152.     Marshal.dump($game_self_variables,  file)
  153.   end
  154.   alias self_variable_read_save_data read_save_data
  155.   #--------------------------------------------------------------------------
  156.   # ● 读出存档数据
  157.   #     file : 读出存档对象(已开启)
  158.   #--------------------------------------------------------------------------
  159.   def read_save_data(file)
  160.     self_variable_read_save_data(file)
  161.     $game_self_variables  = Marshal.load(file)
  162.   end
  163. end
  164. #==============================================================================
  165. # ■ Game_Event
  166. #------------------------------------------------------------------------------
  167. #  处理事件的类。条件判断、事件页的切换、并行处理、执行事件功能
  168. # 在 Game_Map 类的内部使用。
  169. #==============================================================================

  170. class Game_Event < Game_Character
  171.   alias extra_conditions_conditions_met? conditions_met?
  172.   #--------------------------------------------------------------------------
  173.   # ● 判断事件页出现条件
  174.   #--------------------------------------------------------------------------
  175.   def conditions_met?(page)
  176.     result = extra_conditions_conditions_met?(page)
  177.     return false if result == false
  178.     page.get_extra_conditions
  179.     c = page.condition.extra_condition
  180.     for con in c
  181.       case con[0]
  182.       when "actor"
  183.         actor = $game_actors[con[1]]
  184.         if $game_party.members.include?(actor) != con[2]
  185.           result = false
  186.           break
  187.         end
  188.       when "var"
  189.         vari = $game_variables[con[1]]
  190.         if vari < con[2]
  191.           result = false
  192.           break
  193.         end
  194.       when "swi"
  195.         swi = $game_switches[con[1]]
  196.         if swi != con[2]
  197.           result = false
  198.           break
  199.         end
  200.       when "seswi"
  201.         key = [@map_id, @event.id, con[1]]
  202.         seswi = $game_self_switches[key]
  203.         if seswi != con[2]
  204.           result = false
  205.           break
  206.         end
  207.       when "item"
  208.         item = $game_party.item_number($data_items[con[1]])
  209.         if item < con[2]
  210.           result = false
  211.           break
  212.         end
  213.       when "sevar"
  214.         key = [@map_id, @event.id, con[1]]
  215.         sevar = $game_self_variables[key]
  216.         if sevar < con[2]
  217.           result = false
  218.           break
  219.         end
  220.       end
  221.     end
  222.     return result
  223.   end
  224. end
复制代码
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-11-15 20:54

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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