赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 2 |
经验 | 0 |
最后登录 | 2018-4-19 |
在线时间 | 23 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 209
- 在线时间
- 23 小时
- 注册时间
- 2018-3-10
- 帖子
- 31
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
某天.我打开了 原创发布区 其中这样一个东西吸引了我.(可以先看后面再看脚本)
#==============================================================================
# 地图菜单插件 - 技能商店
#==============================================================================
# 作者:guoxiaomi
# 鸣谢:66RPG 叶子 任务界面
#==============================================================================
class Interpreter
#----------------------------------------------------------------------------
# 常量
#----------------------------------------------------------------------------
# 每个角色可以学习的技能
Skill_Shop_Actor_Data = {1=>[1,2,3], 2=>[1,2,4], 3=>[2,4,6], 4=>[1,2,3,4,5,6]}
# 每个技能的需求
# 数组里分别是[所需金钱, 所需等级, 先决技能]
# 先决技能 = 0 说明不需要先决技能
Skill_Shop_Skill_Data = {1=>[0,0,0], 2=>[0,0,0], 3=>[0,0,0], 4=>[10,0,0], 5=>[0,5,0], 6=>[0,0,1]}
#----------------------------------------------------------------------------
# 初始化方法
#----------------------------------------------------------------------------
def init_skill_shop(i = 0)
# 设置商店调用标记
$skill_shop_index = 0
# 全局变量数组 v
v = $game_variables
# 如果 v[i] 已经是 Hash,那么不操作后面的赋值
if i != 0
return if v[i].is_a?(Hash)
end
# 技能商店库存
# v[商店ID] = {技能1_ID => 技能1_库存, 技能2_ID => 技能2_库存...}
v[1] = {1=>2, 2=>2, 3=>2}
v[2] = {2=>1, 4=>1, 6=>1}
v[3] = {1=>4, 2=>4, 3=>4, 4=>4, 5=>4, 6=>4}
end
#----------------------------------------------------------------------------
# 呼叫菜单方法
#----------------------------------------------------------------------------
def call_skill_shop(i)
# 第一次调用时自动初始化
init_skill_shop(i) if !$skill_shop_index
# 将 shop 的数据记录到全局变量里
$skill_shop_index = i
# 设置 1 个 Show Window 用来展示菜单
help_window = Window_Show.new (96, 32, 448, 64)
help_window.back_opacity = 192
help_window.contents.font.size = 32
help_window.set_text('技能商店', 1)
# 设置 3 个 Show Window 用来展示框架
help_window1 = Window_Show.new (96,96,160,160)
help_window1.back_opacity = 192
help_window2 = Window_Show.new (96,256,160,160)
help_window2.back_opacity = 192
help_window3 = Window_Show.new (256,96,288,320)
help_window3.back_opacity = 192
# 读取队伍里的所有成员名
ary = []
$game_party.actors.each do |actor|
ary.push actor.name
end
# 设置窗口位置
$wmm_position = {1=>[96,96,160,160], 2=>[96,256,160,160], 3=>[256,96,288,320]}
# 设置窗口透明度为 0
$wmm_backopacity = 0
# 呼叫菜单窗口
call_mapmenu(*ary)
# 调用商店标志归零
$skill_shop_index = 0
# 释放help_window
help_window.dispose
help_window1.dispose
help_window2.dispose
help_window3.dispose
# 刷新地图
$game_map.need_refresh = true
end
end
class Game_Party
alias _Skill_Shop_set_mapwindow_task set_mapwindow_task
def set_mapwindow_task
# 继承之前的定义
_Skill_Shop_set_mapwindow_task
# 只有在 $skill_shop_index 不为 0 的时候才读取内容
if $skill_shop_index && $skill_shop_index != 0
# 队伍里的每个角色循环一遍
$game_party.actors.each do |actor|
# name 的第一部分
name_main = actor.name
# 从此角色的 id 中得到对应的可以学习的技能
skill_actor = Interpreter::Skill_Shop_Actor_Data[actor.id]
# 从 $skill_shop_index 得到该商店售卖的技能
skill_shop = $game_variables[$skill_shop_index].keys
# 交集就是所有的技能 id ,循环一遍
(skill_actor & skill_shop).sort.each do |skill_id|
# 读取技能的名称作为子菜单名
name_sub = $data_skills[skill_id].name
# 将角色 ID 和 技能 ID 记入 '@' 选项中方便后面识别
name_setting = "Refresh-Actor[#{actor.id}]-Skill[#{skill_id}]"
# name 读取完毕,添加 'refresh' 选项使得页面可以实时刷新
name = name_main + ':' + name_sub + '@' + name_setting
# 下面是 text 内容,首先初始化数组,最后会把数组拼起来
text = []
# 技能名
text.push($data_skills[skill_id].name + "\n")
# 库存余量
text.push("库存 \\c[4]" + $game_variables[$skill_shop_index][skill_id].to_s + "\\c[0] 个\n")
# 技能描述
text.push($data_skills[skill_id].description + "\n\n")
# 判断学习显示 遗忘 or 学习
text.push("按空格 ")
if actor.skill_learn?(skill_id)
text.push "\\c[2]遗忘"
else
text.push "\\c[4]学习"
end
text.push "\\c[0]\n"
# 获取学习限制是数据
limit_ary = Interpreter::Skill_Shop_Skill_Data[skill_id]
limit_gold, limit_level, limit_skill = *limit_ary
# 判断金钱
text.push("所需金钱: #{limit_gold} ")
text.push("\\c[2]金钱不足\\c[0]") if $game_party.gold < limit_gold
# 判断等级
text.push("\n所需等级: #{limit_level} ")
text.push("\\c[2]等级不足\\c[0]") if actor.level < limit_level
# 判断技能
if limit_skill != 0 && !actor.skill_learn?(limit_skill)
text.push("\n需要先学会 \\c[2]#{$data_skills[limit_skill].name}\\c[0]\n")
end
# 添加此任务到菜单
@tasks_info.push Game_Task.new(name, text.join(""))
end
end
end
end
end
class Window_MapMenu < Window_Command
alias _Skill_Shop_run_confirm run_confirm
def run_confirm(ary)
# 先进行原来的处理
_Skill_Shop_run_confirm(ary)
# 只有在 $skill_shop_index 不为 0 的时候才响应判断
if $skill_shop_index && $skill_shop_index != 0
# 从 '@' 选项中获得 actor id 和 skill id
if ary[2] =~ /Actor\[(\d+)\]/
actor_id = $1.to_i
end
if ary[2] =~ /Skill\[(\d+)\]/
skill_id = $1.to_i
end
# 获取 actor
actor = $game_party.actors.find{|actor| actor.id == actor_id}
# 获取技能学习限制
limit_ary = Interpreter::Skill_Shop_Skill_Data[skill_id]
limit_gold, limit_level, limit_skill = *limit_ary
# 如果 actor 已经学会此技能
if actor.skill_learn?(skill_id)
# 遗忘技能
actor.forget_skill(skill_id)
# 返回一半金钱
$game_party.gain_gold(limit_gold / 2)
# 播放冻结 SE
$game_system.se_play($data_system.load_se)
else
# 如果商店有存货
if $game_variables[$skill_shop_index][skill_id] > 0
# 如果金钱和等级都没有问题
if $game_party.gold >= limit_gold && actor.level >= limit_level
# 如果未设置 先决技能 或 先决技能已学习
if limit_skill == 0 || actor.skill_learn?(limit_skill)
# 学会此技能
actor.learn_skill(skill_id)
# 损失金钱
$game_party.lose_gold(limit_gold)
# 修改库存对应的全局变量
$game_variables[$skill_shop_index][skill_id] -= 1
# 播放成功 SE
$game_system.se_play($data_system.shop_se)
else
# 播放冻结 SE
$game_system.se_play($data_system.buzzer_se)
end
else
# 播放冻结 SE
$game_system.se_play($data_system.buzzer_se)
end
else
# 播放冻结 SE
$game_system.se_play($data_system.buzzer_se)
end
end
end
end
end
#==============================================================================
# 作者:guoxiaomi
# 鸣谢:66RPG 叶子 任务界面
#==============================================================================
像这样的学习技能脚本早就满大街了.不过让我吸引的是 技能数量库存 .
我就想:如果这个存 技能 的地方变为 存 物品 的地方.拿东西(学习技能)需要钱再改为需要 变量 特定物品 等级 等等.这样游戏里执行对应的脚本后就随机放入 物品 后就实现了 交换 等级奖励 刷新点等等.用途非常广泛!
所以...有脚本帝帮忙么 (本人脚本盲一枚). |
|