查看: 1730|回复: 6

[有事请教] 一件装备降低技能百分比消耗蓝量

[复制链接]
梦石
0
星屑
1442
在线时间
171 小时
注册时间
2019-10-4
回帖
162
发表于 2023-5-27 20:18:14 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
一件装备后,角色降低技能百分之十的消耗蓝量。
梦石
0
星屑
2876
在线时间
172 小时
注册时间
2020-8-9
回帖
100
发表于 2023-5-28 13:18:25 | 显示全部楼层
找扣除sp的地方做判断,有某状态减少的sp就乘0.9,装备自带这个状态
回复

使用道具 举报

梦石
24
星屑
8942
在线时间
248 小时
注册时间
2020-12-4
回帖
259

极短24获奖极短23获奖极短22获奖

发表于 2023-5-29 10:38:49 | 显示全部楼层
本帖最后由 纯属小虫 于 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  不然小数点很难搞

回复 1 0

使用道具 举报

梦石
0
星屑
4756
在线时间
389 小时
注册时间
2012-11-8
回帖
235
发表于 2023-5-30 08:50:44 | 显示全部楼层
纯属小虫 发表于 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
复制代码
回复

使用道具 举报

梦石
24
星屑
8942
在线时间
248 小时
注册时间
2020-12-4
回帖
259

极短24获奖极短23获奖极短22获奖

发表于 2023-5-30 12:50:05 | 显示全部楼层
qq634488405 发表于 2023-5-30 08:50
这个三个地方都是相同的修改方式,应该可以直接修改sp_cost

有道理。。。。
之前也是想着,直接改Skill 类里的 sp_cost就好了
不过不好引入 Battler 对象
回复

使用道具 举报

梦石
0
星屑
4756
在线时间
389 小时
注册时间
2012-11-8
回帖
235
发表于 2023-5-31 08:44:31 | 显示全部楼层
本帖最后由 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)

点评

可以的,十分整洁。新手推荐第一种方法。  发表于 2023-6-24 17:42

评分

参与人数 1赞 +1 收起 理由
纯属小虫 + 1 正解!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部