Project1
标题:
[练手]事件执行条件扩展+独立变量
[打印本页]
作者:
feizhaodan
时间:
2011-12-4 14:56
标题:
[练手]事件执行条件扩展+独立变量
嘛,前天昨天一直在和Ace的帮助文档瞪眼,看着看着对自己突然有种说不出来的不信感,所以写了这个脚本。
这个脚本的大体工作方法嘛,其实就是读取每页第一个事件指令,假如这个事件指令是注释,则按照内容来添加条件。
在注释内按照下面的格式输入,用“|”分开。大概可以用这些条件:
1,变量
变量,id,num
复制代码
id输入要判断的变量ID,num输入是几以上。
2,开关
开关,id,ft
复制代码
id输入要判断的开关ID,ft输入开启关闭状态(true为开启,false为关闭)如果省略则为true
3,独立开关
独立开关,type,tf
复制代码
type输入药判断的独立开关,用A-D的英文大写字母。tf同上。
4,角色
角色,id,tf
复制代码
ID输入要判断是否在队伍内的角色ID,tf输入要判定是在(true)还是不在(false)
5,物品
物品,id,num
复制代码
ID输入要判定的道具ID,num输入时几以上。若省略为则1
6,独立变量
独立变量,type,num
复制代码
type输入要判定的独立变量类型,用A-D的英文大写字母。num为判定几以上。
独立变量:
一个新的类,可以在保存在存档内,操作时使用一下的命令,在事件指令第三页中的脚本输入:
1,设置值
self_vary_control(key,num)
复制代码
key输入独立变量类型,使用A-D的英文大写字母,用""包上。
num输入要代入的值。
2,增加值
self_vary_plus(key, num)
复制代码
key同上,
num输入要增加的值。
3,减少值
self_vary_minus(key, num)
复制代码
key同上,
num输入要减少的值。
4,获取值
self_vary(key)
复制代码
key同上,用这个来获取该独立变量的值,用于条件分歧等。
最后上脚本:
module RPG
class Event
class Page
class Condition
alias extra_condition_initialize initialize
def initialize
extra_condition_initialize
@extra_condition = []
end
attr_accessor :extra_condition
end
end
end
end
module RPG
class Event
class Page
def get_extra_conditions
@condition.extra_condition = []
i = 0
loop do
break if @list[i].code != 108
note = @list[i].parameters
note.each{|arr|
arr.each_line{|line|
line.split(/\|/).each{|str|
pa = str.split(/\,/)
case pa[0]
when "角色"
pa[2] = pa[2] == "false" ? false : true
@condition.extra_condition.push(["actor",pa[1].to_i, pa[2]])
when "变量"
@condition.extra_condition.push(["var",pa[1].to_i,pa[2].to_i])
when "开关"
pa[2] = pa[2] == "false" ? false : true
@condition.extra_condition.push(["swi",pa[1].to_i,pa[2]])
when "独立开关"
pa[2] = pa[2] == "false" ? false : true
@condition.extra_condition.push(["seswi",pa[1],pa[2]])
when "独立变量"
@condition.extra_condition.push(["sevar",pa[1],pa[2].to_i])
when "物品"
pa[2] = pa[2] == nil ? 1 : pa[2]
@condition.extra_condition.push(["item",pa[1].to_i,pa[2].to_i])
end
}
}
}
i += 1
end
end
end
end
end
#==============================================================================
# ■ Game_SelfVariables
#------------------------------------------------------------------------------
# 处理独立开关的类。编入的是类 Hash 的外壳。本类的实例请参考 $game_self_variables
#==============================================================================
class Game_SelfVaribales
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
@data = {}
end
#--------------------------------------------------------------------------
# ● 获取独立变量
# key : 键
#--------------------------------------------------------------------------
def [](key)
return @data[key] == nil ? 0 : @data[key]
end
#--------------------------------------------------------------------------
# ● 设置独立变量
# key : 键
# value : 值
#--------------------------------------------------------------------------
def []=(key, value)
@data[key] = value
end
end
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
# 执行事件命令的解释器。本类在 Game_Map 类、Game_Troop 类、与
# Game_Event 类的内部使用。
#==============================================================================
class Game_Interpreter
def self_vary_control(key, num)
if @original_event_id > 0
keys = [@map_id, @original_event_id, key]
$game_self_variables[keys] = num
end
$game_map.need_refresh = true
return true
end
def self_vary_plus(key, num)
if @original_event_id > 0
keys = [@map_id, @original_event_id, key]
n = $game_self_variables[keys] + num
$game_self_variables[keys] = n
end
$game_map.need_refresh = true
return true
end
def self_vary_minus(key, num)
if @original_event_id > 0
keys = [@map_id, @original_event_id, key]
n = $game_self_variables[keys] - num
$game_self_variables[keys] = n
end
$game_map.need_refresh = true
return true
end
def self_vary(key)
if @original_event_id > 0
keys = [@map_id, @original_event_id, key]
num = $game_self_variables[keys]
end
return num == nil ? 0 : num
end
end
#==============================================================================
# ■ Scene_Title
#------------------------------------------------------------------------------
# 处理标题画面的类。
#==============================================================================
class Scene_Title < Scene_Base
alias self_variable_create_game_objects create_game_objects
#--------------------------------------------------------------------------
# ● 生成各种游戏对象
#--------------------------------------------------------------------------
def create_game_objects
$game_self_variables = Game_SelfVaribales.new
self_variable_create_game_objects
end
end
#==============================================================================
# ■ Scene_File
#------------------------------------------------------------------------------
# 存档画面及读档画面的类。
#==============================================================================
class Scene_File < Scene_Base
alias self_variable_write_save_data write_save_data
#--------------------------------------------------------------------------
# ● 写入存档数据
# file : 写入存档对象(已开启)
#--------------------------------------------------------------------------
def write_save_data(file)
self_variable_write_save_data(file)
Marshal.dump($game_self_variables, file)
end
alias self_variable_read_save_data read_save_data
#--------------------------------------------------------------------------
# ● 读出存档数据
# file : 读出存档对象(已开启)
#--------------------------------------------------------------------------
def read_save_data(file)
self_variable_read_save_data(file)
$game_self_variables = Marshal.load(file)
end
end
#==============================================================================
# ■ Game_Event
#------------------------------------------------------------------------------
# 处理事件的类。条件判断、事件页的切换、并行处理、执行事件功能
# 在 Game_Map 类的内部使用。
#==============================================================================
class Game_Event < Game_Character
alias extra_conditions_conditions_met? conditions_met?
#--------------------------------------------------------------------------
# ● 判断事件页出现条件
#--------------------------------------------------------------------------
def conditions_met?(page)
result = extra_conditions_conditions_met?(page)
return false if result == false
page.get_extra_conditions
c = page.condition.extra_condition
for con in c
case con[0]
when "actor"
actor = $game_actors[con[1]]
if $game_party.members.include?(actor) != con[2]
result = false
break
end
when "var"
vari = $game_variables[con[1]]
if vari < con[2]
result = false
break
end
when "swi"
swi = $game_switches[con[1]]
if swi != con[2]
result = false
break
end
when "seswi"
key = [@map_id, @event.id, con[1]]
seswi = $game_self_switches[key]
if seswi != con[2]
result = false
break
end
when "item"
item = $game_party.item_number($data_items[con[1]])
if item < con[2]
result = false
break
end
when "sevar"
key = [@map_id, @event.id, con[1]]
sevar = $game_self_variables[key]
if sevar < con[2]
result = false
break
end
end
end
return result
end
end
复制代码
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1