class Game_Battler attr_accessor :skills_pp #卐 技能pp的数组 attr_accessor :skills #卐 特技 alias cdsssg_initialize initialize def initialize cdsssg_initialize @skills_pp = [] @skills = [] end def skill_can_use?(skill_id) #卐 PP 不足的情况下不能使用 if self.skills_pp[self.skills.index(skill_id)] < 1 return false end # 战斗不能的情况下不能使用 if dead? return false end # 沉默状态的情况下、物理特技以外的特技不能使用 if $data_skills[skill_id].atk_f == 0 and self.restriction == 1 return false end # 获取可以使用的时机 occasion = $data_skills[skill_id].occasion # 战斗中的情况下 if $game_temp.in_battle # [平时] 或者是 [战斗中] 可以使用 return (occasion == 0 or occasion == 1) # 不是战斗中的情况下 else # [平时] 或者是 [菜单中] 可以使用 return (occasion == 0 or occasion == 2) end end end class Game_Actor < Game_Battler def setup(actor_id) actor = $data_actors[actor_id] @actor_id = actor_id @name = actor.name @character_name = actor.character_name @character_hue = actor.character_hue @battler_name = actor.battler_name @battler_hue = actor.battler_hue @class_id = actor.class_id @weapon_id = actor.weapon_id @armor1_id = actor.armor1_id @armor2_id = actor.armor2_id @armor3_id = actor.armor3_id @armor4_id = actor.armor4_id @level = actor.initial_level @exp_list = Array.new(101) make_exp_list @exp = @exp_list[@level] @skills = [] @hp = maxhp @sp = maxsp @states = [] @states_turn = {} @maxhp_plus = 0 @maxsp_plus = 0 @str_plus = 0 @dex_plus = 0 @agi_plus = 0 @int_plus = 0 # 学会特技 for i in 1..@level for j in $data_classes[@class_id].learnings if j.level == i learn_skill(j.skill_id) end end end # 刷新自动状态 update_auto_state(nil, $data_armors[@armor1_id]) update_auto_state(nil, $data_armors[@armor2_id]) update_auto_state(nil, $data_armors[@armor3_id]) update_auto_state(nil, $data_armors[@armor4_id]) end def learn_skill(skill_id) if skill_id > 0 and not skill_learn?(skill_id) @skills_pp.push($data_skills[skill_id].sp_cost) @skills.push(skill_id) @skills.sort! end end def forget_skill(skill_id) @skills_pp.delete_at(@skills.index(skill_id)) @skills.delete(skill_id) end end class Game_Enemy < Game_Battler def actions for i in $data_enemies[@enemy_id].actions if i.kind == 1 and i.skill_id != 1 @skills_pp.push($data_skills[i.skill_id].sp_cost) @skills.push(i.skill_id) end end return $data_enemies[@enemy_id].actions end end class Window_Skill < Window_Selectable def draw_item(index) skill = @data[index] if @actor.skill_can_use?(skill.id) self.contents.font.color = normal_color else self.contents.font.color = disabled_color end x = 4 + index % 2 * (288 + 32) y = index / 2 * 32 rect = Rect.new(x, y, self.width / @column_max - 32, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) bitmap = RPG::Cache.icon(skill.icon_name) opacity = self.contents.font.color == normal_color ? 255 : 128 self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0) self.contents.draw_text(x + 166, y, 112, 32, "PP:" + @actor.skills_pp[@actor.skills.index(skill.id)].to_s + "/" + skill.sp_cost.to_s, 2) end end class Scene_Skill def update_skill # 按下 B 键的情况下 if Input.trigger?(Input::B) # 演奏取消 SE $game_system.se_play($data_system.cancel_se) # 切换到菜单画面 $scene = Scene_Menu.new(1) return end # 按下 C 键的情况下 if Input.trigger?(Input::C) # 获取特技窗口现在选择的特技的数据 @skill = @skill_window.skill # 不能使用的情况下 if @skill == nil or not @actor.skill_can_use?(@skill.id) # 演奏冻结 SE $game_system.se_play($data_system.buzzer_se) return end # 演奏确定 SE $game_system.se_play($data_system.decision_se) # 效果范围是我方的情况下 if @skill.scope >= 3 # 激活目标窗口 @skill_window.active = false @target_window.x = (@skill_window.index + 1) % 2 * 304 @target_window.visible = true @target_window.active = true # 设置效果范围 (单体/全体) 的对应光标位置 if @skill.scope == 4 || @skill.scope == 6 @target_window.index = -1 elsif @skill.scope == 7 @target_window.index = @actor_index - 10 else @target_window.index = 0 end # 效果在我方以外的情况下 else # 公共事件 ID 有效的情况下 if @skill.common_event_id > 0 # 预约调用公共事件 $game_temp.common_event_id = @skill.common_event_id # 演奏特技使用时的 SE $game_system.se_play(@skill.menu_se) #卐 消耗 PP @actor.skills_pp[@actor.skills.index(@skill.id)] -= 1 # 再生成各窗口的内容 @status_window.refresh @skill_window.refresh @target_window.refresh # 切换到地图画面 $scene = Scene_Map.new return end end return end # 按下 R 键的情况下 if Input.trigger?(Input::R) # 演奏光标 SE $game_system.se_play($data_system.cursor_se) # 移至下一位角色 @actor_index += 1 @actor_index %= $game_party.actors.size # 切换到别的特技画面 $scene = Scene_Skill.new(@actor_index) return end # 按下 L 键的情况下 if Input.trigger?(Input::L) # 演奏光标 SE $game_system.se_play($data_system.cursor_se) # 移至上一位角色 @actor_index += $game_party.actors.size - 1 @actor_index %= $game_party.actors.size # 切换到别的特技画面 $scene = Scene_Skill.new(@actor_index) return end end def update_target # 按下 B 键的情况下 if Input.trigger?(Input::B) # 演奏取消 SE $game_system.se_play($data_system.cancel_se) # 删除目标窗口 @skill_window.active = true @target_window.visible = false @target_window.active = false return end # 按下 C 键的情况下 if Input.trigger?(Input::C) # 因为 PP 不足而无法使用的情况下 unless @actor.skill_can_use?(@skill.id) # 演奏冻结 SE $game_system.se_play($data_system.buzzer_se) return end # 目标是全体的情况下 if @target_window.index == -1 # 对同伴全体应用特技使用效果 used = false for i in $game_party.actors used |= i.skill_effect(@actor, @skill) end end # 目标是使用者的情况下 if @target_window.index <= -2 # 对目标角色应用特技的使用效果 target = $game_party.actors[@target_window.index + 10] used = target.skill_effect(@actor, @skill) end # 目标是单体的情况下 if @target_window.index >= 0 # 对目标角色应用特技的使用效果 target = $game_party.actors[@target_window.index] used = target.skill_effect(@actor, @skill) end # 使用特技的情况下 if used # 演奏特技使用时的 SE $game_system.se_play(@skill.menu_se) # 消耗 PP @actor.skills_pp[@actor.skills.index(@skill.id)] -= 1 # 再生成各窗口内容 @status_window.refresh @skill_window.refresh @target_window.refresh # 全灭的情况下 if $game_party.all_dead? # 切换到游戏结束画面 $scene = Scene_Gameover.new return end # 公共事件 ID 有效的情况下 if @skill.common_event_id > 0 # 预约调用公共事件 $game_temp.common_event_id = @skill.common_event_id # 切换到地图画面 $scene = Scene_Map.new return end end # 无法使用特技的情况下 unless used # 演奏冻结 SE $game_system.se_play($data_system.buzzer_se) end return end end end class Scene_Battle def make_skill_action_result # 获取特技 @skill = $data_skills[@active_battler.current_action.skill_id] # 如果不是强制行动 unless @active_battler.current_action.forcing # 因为 PP 耗尽而无法使用的情况下 unless @active_battler.skill_can_use?(@skill.id) # 清除强制行动对像的战斗者 $game_temp.forcing_battler = nil # 移至步骤 1 @phase4_step = 1 return end end #卐 消耗 PP @active_battler.skills_pp[@active_battler.skills.index(@skill.id)] -= 1 # 刷新状态窗口 @status_window.refresh # 在帮助窗口显示特技名 @help_window.set_text(@skill.name, 1) # 设置动画 ID @animation1_id = @skill.animation1_id @animation2_id = @skill.animation2_id # 设置公共事件 ID @common_event_id = @skill.common_event_id # 设置对像侧战斗者 set_target_battlers(@skill.scope) # 应用特技效果 for target in @target_battlers target.skill_effect(@active_battler, @skill) end end end
陈大帅帅帅哥 发表于 2016-7-10 16:32
主站上有个xp的,不过有bug,所有同编号技能拥有统一的PP,下面是我自己修改过的
QQ截图20160710163854.png (9.27 KB, 下载次数: 11)
269155856888 发表于 2016-7-10 16:40
谢谢,不过好像有问题 脚本第143有错误
陈大帅帅帅哥 发表于 2016-7-10 16:46
论坛的锅,改成@skill = @skill_window.skill
陈大帅帅帅哥 发表于 2016-7-10 16:32
主站上有个xp的,不过有bug,所有同编号技能拥有统一的PP,下面是我自己修改过的
陈大帅帅帅哥 发表于 2016-7-10 16:32
主站上有个xp的,不过有bug,所有同编号技能拥有统一的PP,下面是我自己修改过的
269155856888 发表于 2016-7-10 17:47
效果是达到了,可.....好像不能显示技能还剩多少?
陈大帅帅帅哥 发表于 2016-7-10 20:21
我实验的时候可以,能不能发一下效果图
另:回复PP方法已完成,在我的脚本的Game_Battler下加入
QQ截图20160711105042.png (380.98 KB, 下载次数: 16)
QQ截图20160711105055.png (363.55 KB, 下载次数: 15)
QQ截图20160711105112.png (392.17 KB, 下载次数: 15)
269155856888 发表于 2016-7-11 10:53
问题↓
其他的效果是达到了,技能数量是5,用了还是5.... 能发个范例么? ...
陈大帅帅帅哥 发表于 2016-7-11 11:42
你这个好像完全没有用到我的脚本吧,能不能发一下你的工程,我看看是哪里有问题 ...
self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
self.contents.draw_text(x + 166, y, 112, 32, "PP:" + @actor.skills_pp[@actor.skills.index(skill.id)].to_s + "/" + skill.sp_cost.to_s, 2)
陈大帅帅帅哥 发表于 2016-7-11 12:59
……你根本没有用我的那个脚本,请把我发的脚本插入到main前
另外,删掉你的物品美化脚本的class Window ...
QQ图片20160711194156.png (356.44 KB, 下载次数: 26)
陈大帅帅帅哥 发表于 2016-7-11 12:59
……你根本没有用我的那个脚本,请把我发的脚本插入到main前
另外,删掉你的物品美化脚本的class Window ...
269155856888 发表于 2016-7-11 19:44
谢谢你的细心帮忙,问题解决了......Good person!
陈大帅帅帅哥 发表于 2016-7-11 21:54
毕竟大家都是做口袋的同好嘛
269155856888 发表于 2016-7-13 23:02
脚本有bug,无法在菜单使用.......用你的脚本做了很多技能后发现bug,顿时崩溃 ..... ...
陈大帅帅帅哥 发表于 2016-7-14 11:18
不好意思,我的疏忽,请把176行改成@actor.skills_pp[@actor.skills.index(@skill.id)] -= 1
还有255行改 ...
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |