| 赞 | 13 |
| VIP | |
| 好人卡 | |
| 积分 | 6 |
| 经验 | |
| 最后登录 | 2017-11-28 |
| 在线时间 | 795 小时 |
无节操
- 梦石
- 0
- 星屑
- 608
- 在线时间
- 795 小时
- 注册时间
- 2009-2-6
- 回帖
- 3910
 
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 moy 于 2014-6-23 02:05 编辑
最近一直在填坑施工CustomAdventure,也经常在讨论区鬼混。
因为都是些小功能,且鉴于其中很多事件功能的冲突性不会太高同时也想找一些小白鼠帮忙测试,我决定发布这部分由我自己完成的脚本。如果在使用中出现什么问题希望能够得到回馈!如果有什么改进的建议也可以提,但是增加“定制的”功能我可能不会都响应。
更新记录
14.6.23 追加-自定义控制符变换(需脚本和RGSS3的基础知识)
14.6.9 追加-更换职业补丁
目录
- 独立变量
[fold=独立变量][pre lang="ruby" line="1"]#==============================================================================
# ★ Custom Adventure 独立变量
# -- Last Updated: 2014.6.2
# -- by Moy
# -- 转载请保留以上信息
#==============================================================================
# 本质上只是存了其他东西的独立开关,用set_selfvar(name,value)进行修改和新建,用
# selfvar(name)来访问。name可以是从E~Z的字母,也可以是其他字符串,只要在数值上比"D"
# 高就可以正常获得返回值。
#==============================================================================
# ■ Interpreter
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# ● 获取独立变量
#--------------------------------------------------------------------------
def selfvar(name)
key = [@map_id, @event_id, name]
$game_self_switches[key]
end
#--------------------------------------------------------------------------
# ● 修改/新建独立变量
#--------------------------------------------------------------------------
def set_selfvar(name, value)
key = [@map_id, @event_id, name]
$game_self_switches[key] = value
end
end
#==============================================================================
# ■ Game_SelfSwitches
#==============================================================================
class Game_SelfSwitches
#--------------------------------------------------------------------------
# ● 获取独立开关
#--------------------------------------------------------------------------
def [](key)
return @data[key] if key[2] > "D"
@data[key] == true
end
end[/pre][/fold] - 强化物品选择
[fold=强化物品选择][pre lang="ruby" line="1"]#==============================================================================
# ☆ Custom Adventure 强化物品选择
# -- Last Updated: 2014.5.23
# -- by Moy
# -- 转载请保留以上信息
#==============================================================================
# 本脚本使物品选择可以选取贵重物品以外的物品,只要给物品选择所选取的目标变量赋初值
# 为以下几个。
# 1 - 除贵重物品外的物品
# 2 - 武器
# 3 - 防具
# 4 - 贵重物品
# 5 - 装备品(武器和防具)
# 另外在默认时选择的依然是贵重物品,但如果在使用完毕该变量后没有重新置0,还是会有
# 选错成其他类型的可能,需注意。
#==============================================================================
#encoding:utf-8
#==============================================================================
# ■ Window_ItemList
#==============================================================================
class Window_ItemList < Window_Selectable
#--------------------------------------------------------------------------
# ● 查询列表中是否含有此物品
#--------------------------------------------------------------------------
alias ca_include? include?
def include?(item)
case @category
when :item
item.is_a?(RPG::Item) && !item.key_item?
when :weapon
item.is_a?(RPG::Weapon)
when :armor
item.is_a?(RPG::Armor)
when :key_item
item.is_a?(RPG::Item) && item.key_item?
when :equip # 装备品策略
item.is_a?(RPG::Weapon) || item.is_a?(RPG::Armor)
else
false
end
end
end
#==============================================================================
# ■ Window_KeyItem
#==============================================================================
class Window_KeyItem < Window_ItemList
#--------------------------------------------------------------------------
# ● 开始输入的处理
#--------------------------------------------------------------------------
alias ca_start start
def start
@item_category = $game_variables[$game_message.item_choice_variable_id]
self.category = :key_item
self.category = :item if @item_category == 1
self.category = :weapon if @item_category == 2
self.category = :armor if @item_category == 3
self.category = :key_item if @item_category == 4
self.category = :equip if @item_category == 5
update_placement
refresh
select(0)
open
activate
end
#--------------------------------------------------------------------------
# ● 查询此物品是否可用
# 重写父类方法使其始终可选
#--------------------------------------------------------------------------
alias ca_enable? enable?
def enable?(item)
true
end
end
#==============================================================================
# ■ Game_Interpreter
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# ● 设置物品选择
#--------------------------------------------------------------------------
alias ca_setup_item_choice setup_item_choice
def setup_item_choice(params)
@chosen_id = params[0]
@chosen_type = $game_variables[params[0]]
$game_message.item_choice_variable_id = params[0]
end
end[/pre][/fold] - 强化数值输入
[fold=强化数值输入][pre lang="ruby" line="1"]#==============================================================================
# ☆ Custom Adventure 强化数值输入
# -- Last Updated: 2014.5.23
# -- by Moy
# -- 转载请保留以上信息
#==============================================================================
# 本脚本使数值输入可以直接在上限处停止,并提示报错音,只要给目标变量赋初值即可。
# 这样可以避免某些因为输入的数值出错而造成的糟糕体验。
# 初值为0则和默认的数值输入一样,初值小于零则最大值为团队金钱,初值大于零则最大值
# 为设定值。
#==============================================================================
#encoding:utf-8
#==============================================================================
# ■ Window_NumberInput
#==============================================================================
class Window_NumberInput < Window_Base
#--------------------------------------------------------------------------
# ● 开始输入的处理
#--------------------------------------------------------------------------
alias ca_start start
def start
@digits_max = $game_message.num_input_digits_max
@number = $game_variables[$game_message.num_input_variable_id]
@number = $game_party.gold if @number < 0
@math_max = [[@number, 0].max, 10 ** @digits_max - 1].min
@math_max = false if @math_max == 0
@number = 0
@index = 0
update_placement
create_contents
refresh
open
activate
end
#--------------------------------------------------------------------------
# ● 处理数字的更改
#--------------------------------------------------------------------------
alias ca_process_digit_change process_digit_change
def process_digit_change
return unless active
if Input.repeat?(:UP) || Input.repeat?(:DOWN)
old_num = @number
place = 10 ** (@digits_max - 1 - @index)
n = @number / place % 10
@number -= n * place
n = (n + 1) % 10 if Input.repeat?(:UP)
n = (n + 9) % 10 if Input.repeat?(:DOWN)
@number += n * place
if @math_max ? @number <= @math_max : true
Sound.play_cursor
else
@number = @math_max
Sound.play_cancel
end
refresh
end
end
end
[/pre][/fold] - 踩踏/置物判断
[fold=踩踏/置物判断][pre lang="ruby" line="1"]#==============================================================================
# ☆ Custom Adventure 踩踏/置物判断
# -- Last Updated: 2014.6.3
# -- by Moy
# -- 转载请保留以上信息
#==============================================================================
# 本脚本判断一个在人物下层的事件是否被其他事件/角色踩踏
# 对本事件使用只需要在分歧脚本中使用get_character(0).stepped_on?即可。
# 判断别的事件请自行获取实例后使用。
#==============================================================================
# ■ Game_Event
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# ● 判断本事件是否被其他事件/角色踩踏
#--------------------------------------------------------------------------
def stepped_on?
stepped_by_events?(@x,@y) || stepped_by_player_characters?(@x, @y)
end
#--------------------------------------------------------------------------
# ● 判断某位置是否被其他事件踩踏
#--------------------------------------------------------------------------
def stepped_by_events?(x, y)
$game_map.events_xy_nt(x, y).any? do |event|
event.normal_priority?
end
end
#--------------------------------------------------------------------------
# ● 判断某位置是否被主控角色踩踏
#--------------------------------------------------------------------------
def stepped_by_player_characters?(x, y)
@priority_type == 0 && $game_player.collide?(x, y)
end
end
[/pre][/fold] - 战斗日志追加
[fold=战斗日志追加][pre lang="ruby" line="1"]#==============================================================================
# ☆ Custom Adventure 战斗日志追加
# -- Last Updated: 2014.6.6
# -- by Moy
# -- 转载请保留以上信息
#==============================================================================
# 本脚本只是简化直接追加战斗日志(BattleLog)的操作,省略一长串的书写,适用于使用
# 默认脚本,或是并未废除Window_BattleLog的制作者。
#==============================================================================
# ■ Interpreter
#==============================================================================
class Game_Interpreter
def add_battlelog(text)
return unless SceneManager.scene.is_a?(Scene_Battle)
SceneManager.scene.log_window.add_text(text)
end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
attr_reader :log_window
end[/pre][/fold] - 更换职业补丁
[fold=更换职业补丁][pre lang="ruby" line="1"]#==============================================================================
# ☆ Custom Adventure 更换职业补丁
# -- Last Updated: 2014.6.9
# -- by Moy
# -- 转载请保留以上信息
#==============================================================================
# 本脚本只是用于方便的使用更改职业的全部功能,开关开启时将进行保留经验的转职。
#==============================================================================
module CA_EVENT
CLASS_CHANGE_KEEP = 5 # 变换职业时是否保留经验值的开关
end
#==============================================================================
# ■ Interpreter
#==============================================================================
class Game_Interpreter
include CA_EVENT
#--------------------------------------------------------------------------
# ● 更改职业
#--------------------------------------------------------------------------
def command_321
actor = $game_actors[@params[0]]
keep_exp = $game_switches[CLASS_CHANGE_KEEP]
actor.change_class(@params[1],keep_exp) if actor && $data_classes[@params[1]]
end
end[/pre][/fold]
EXTRA_STAGE
EXTRA~什么的只是噱头啦。以下脚本使用需要脚本基础,这里只提供框架,不进行具体编写。
看到某提问,想要用显示昵称啥的,脑洞一开就写了这个。还是那句话,工具给你了,怎么使用是各人的艺术了~
[fold=自定义控制符变换]
[pre lang="ruby" line="1"]#==============================================================================
# ☆ Custom Adventure 自定义控制符变换
# -- Last Updated: 2014.6.23
# -- by Moy
# -- 转载请保留以上信息
#==============================================================================
# 可以很方便的进行扩展的控制符变换,现在你可以使用显示文本做任何事了(笑),前提
# 是你知道该怎么做。
#==============================================================================
module CA_EVENT
USE_CUSTOM_CONVERT = true # 是否开启自定义控制符变换
#--------------------------------------------------------------------------
# 简单变换: 左侧是操作符,右侧是脚本实现
# 以默认脚本为例就是\G
#--------------------------------------------------------------------------
SIMPLE_CONVERT = {
"nl" => "p 1"
}#SIMPLE_CONVERT
#--------------------------------------------------------------------------
# 数组形式变换: 左侧是操作符,右侧是脚本实现
# 以默认脚本为例就是\V[n]
#--------------------------------------------------------------------------
ARRAY_CONVERT = {
"nn" => "p $1.to_i"
}#ARRAY_CONVERT
# 变换的基础,勿动
SIMPLE_CONVERT_BASE = /\e%s/.to_s
ARRAY_CONVERT_BASE = /\e%s\[(\d+)\]/i.to_s
end
#==============================================================================
# ■ Window_Base
#==============================================================================
class Window_Base < Window
include CA_EVENT
#--------------------------------------------------------------------------
# ● 进行控制符的事前变换
# 在实际绘制前、将控制符替换为实际的内容。
# 为了减少歧异,文字「\」会被首先替换为转义符(\e)。
#--------------------------------------------------------------------------
alias ca_convert_escape_characters convert_escape_characters
def convert_escape_characters(text)
return ca_convert_escape_characters(text) unless USE_CUSTOM_CONVERT
#------------------------------------------------------------------------
# 默认部分
#------------------------------------------------------------------------
result = text.to_s.clone
result.gsub!(/\\/) { "\e" }
result.gsub!(/\e\e/) { "\\" }
result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
result.gsub!(/\eN\[(\d+)\]/i) { actor_name($1.to_i) }
result.gsub!(/\eP\[(\d+)\]/i) { party_member_name($1.to_i) }
result.gsub!(/\eG/i) { Vocab::currency_unit }
#------------------------------------------------------------------------
# 自定义的实现
#------------------------------------------------------------------------
SIMPLE_CONVERT.each{|key,value|
re = sprintf(SIMPLE_CONVERT_BASE,key)
result.gsub!(/#{re}/){eval(value)}
}
ARRAY_CONVERT.each{|key,value|
re = sprintf(ARRAY_CONVERT_BASE,key)
result.gsub!(/#{re}/){eval(value)}
}
#------------------------------------------------------------------------
result
end
end[/pre]
[/fold] |
评分
-
查看全部评分
|