Project1

标题: 一件装备降低技能百分比消耗蓝量 [打印本页]

作者: 契约师Vi    时间: 2023-5-27 20:18
标题: 一件装备降低技能百分比消耗蓝量
一件装备后,角色降低技能百分之十的消耗蓝量。
作者: 939034448    时间: 2023-5-28 13:18
找扣除sp的地方做判断,有某状态减少的sp就乘0.9,装备自带这个状态
作者: 纯属小虫    时间: 2023-5-29 10:38
本帖最后由 纯属小虫 于 2023-5-29 10:40 编辑

楼上的哥们说的基本对了,不过要考虑显示、以及使用条件,总共有三处要改:
1:技能消耗的显示
2:技能使用SP需求
3:技能使用后SP消耗


1.Window_Skill 类 draw_item(index) 定义里

找到 : self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)

改成 :
        sp_cost = skill.sp_cost.to_s
        sp_cost *= 0.9 if self.is_a?(Actior) and self.weapon_id == ..............   或者是防具 self.armor1_id ==.......... 条件自己选吧
        self.contents.draw_text(x + 232, y, 48, 32, sp_cost, 2)


2. Game _Battler 类  skill_can_use?(skill_id) 定义里

    # SP 不足的情况下不能使用
    if $data_skills[skill_id].sp_cost > self.sp
      return false
    end
   
    这一行加一个条件,改成
   
    # SP 不足的情况下不能使用
    sp_cost = $data_skills[skill_id].sp_cost
    sp_cost *= 0.9 if self.is_a?(Actior) and self.weapon_id == ..............   或者是防具 self.armor1_id ==.......... 条件自己选吧
    if sp_cost > self.sp
      return false
    end

3. Scene_Battle 4 类  make_skill_action_result 定义里

    # 消耗 SP
    @active_battler.sp -= @skill.sp_cost

改成:
  
        # 消耗 SP
        sp_cost = @skill.sp_cost
        sp_cost *= 0.9 if @active_battler.is_a?(Actior) and @active_battler.weapon_id == ..............   或者是防具 @active_battler.armor1_id ==.......... 条件自己选吧
        @active_battler.sp -= sp_cost


应该是还有更简单的修改方法的.....不过脚本学艺不精,只能凑合着用了

哦 对了,最好不要用*0.9   而是用 a = a * 9 / 10   或者转换为int  不然小数点很难搞


作者: qq634488405    时间: 2023-5-30 08:50
纯属小虫 发表于 2023-5-29 10:38
楼上的哥们说的基本对了,不过要考虑显示、以及使用条件,总共有三处要改:
1:技能消耗的显示
2:技能使用 ...

这个三个地方都是相同的修改方式,应该可以直接修改sp_cost
  1. module RPG
  2.   class Skill
  3.     def sp_cost
  4.       n = @sp_cost
  5.       n = n*9/10  if self.is_a?(Actior) and self.weapon_id == ..............   或者是防具 self.armor1_id ==.......... 条件自己选吧
  6.       return n
  7.     end
  8.   end
  9. end
复制代码

作者: 纯属小虫    时间: 2023-5-30 12:50
qq634488405 发表于 2023-5-30 08:50
这个三个地方都是相同的修改方式,应该可以直接修改sp_cost

有道理。。。。
之前也是想着,直接改Skill 类里的 sp_cost就好了
不过不好引入 Battler 对象
作者: qq634488405    时间: 2023-5-31 08:44
本帖最后由 qq634488405 于 2023-5-31 08:45 编辑
纯属小虫 发表于 2023-5-30 12:50
有道理。。。。
之前也是想着,直接改Skill 类里的 sp_cost就好了
不过不好引入 Battler 对象 ...


那倒是,不过可以在Game_Battler里写个get_sp_cost方法
  1. def get_sp_cost(skill_id)
  2.   n = $data_skills[skill_id].sp_cost
  3.   n = n*9/10 if self.is_a?(Actior) and self.weapon_id == ..............   或者是防具 self.armor1_id ==.......... 条件自己选吧
  4.   return n
  5. end
复制代码

1.Window_Skill 类 draw_item(index) 定义里
找到 : self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
skill.sp_cost.to_s改成@actor.get_sp_cost(skill.id).to_s
2. Game _Battler 类  skill_can_use?(skill_id) 定义里
    # SP 不足的情况下不能使用
    if $data_skills[skill_id].sp_cost > self.sp
      return false
    end
改成if get_sp_cost(skill_id) > self.sp
3. Scene_Battle 4 类  make_skill_action_result 定义里
    # 消耗 SP
    @active_battler.sp -= @skill.sp_cost
改成@active_battler.sp -= @active_battler.get_sp_cost(@skill.id)




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1