查看: 3916|回复: 19

[已经解决] [已解决]加血技能随着等级提升加血量跟着提升。

[复制链接]
梦石
0
星屑
15041
在线时间
2230 小时
注册时间
2019-1-24
回帖
964

R考场第七期纪念奖

发表于 2020-3-18 21:55:40 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 miantouchi 于 2020-3-19 17:10 编辑

基础加血法术:基础固定值(17) + 3*等级
就是角色1级时加血17+3=20
就是角色2级时加血17+3*2=23
就是角色2级时加血17+3*3=26
依次类推。。。。
这个应该怎么实现?
梦石
0
星屑
1576
在线时间
161 小时
注册时间
2019-7-4
回帖
204
发表于 2020-3-18 22:25:29 | 显示全部楼层
va在技能伤害公式计算里面可以用level代表等级,xp我不知道行不行。。。
回复

使用道具 举报

梦石
0
星屑
3122
在线时间
350 小时
注册时间
2020-3-17
回帖
79

超评测参与

发表于 2020-3-18 22:28:55 | 显示全部楼层
设置公共事件,设几个变量在一加就好了。可是好像我这样只能群体回复,无法选定目标。要选定目标只能靠脚本了。
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2020-3-18 23:51:08 | 显示全部楼层
本帖最后由 soulsaga 于 2020-3-19 00:04 编辑

用这个仿VA技能公式脚本..就行好像..大概
[pre lang="ruby"]#==============================================================================
# ■ 自訂技能傷害公式
#------------------------------------------------------------------------------
#     仿照VX ACE的自訂公式,公式基本上是照搬
#     只要設定好屬性(啟動用)和對應的公式就能作用

#     自訂公式只跳脫技能資料庫的【素質需求】部分,
#     屬性加乘、迴避、分散度仍照內建公式
#==============================================================================
module Skill_Custom
  #--------------------------------------------------------------------------
  # ● 使用者修改項目1:自訂公式的屬性名稱
  #--------------------------------------------------------------------------
  #      在資料庫設定同名屬性,技能只要勾選該屬性就會偵測腳本的自訂公式
  #      如果有勾選屬性沒設定公式傷害會變為 0
  #--------------------------------------------------------------------------
  CUSTOM_ELE = "自訂公式"
  #--------------------------------------------------------------------------
  # ● 使用者修改項目2:自訂公式(編輯格式:技能ID => 公式,每個公式用逗號隔開)
  #--------------------------------------------------------------------------
  # <變量說明>
  # power:在資料庫設定的技能威力
  # g:隊伍目前持有金錢
  # v[n]:使用事件n號變數的值 (ex: v[5],使用5號變數的值)
  # rand(n):亂數,最高到n-1,最小為0
  # a: 技能使用者
  # b:目標
  
=begin
==============================================================================
■ a(技能使用者)和b(目標)可用的變量,
    基本上就是Game_Battler所有的數值變量
------------------------------------------------------------------------------
使用例:(a.atk + a.int)*2 - (b.pdef/2)           (使用者atk + 使用者int)*2 - 對像物防/2
==============================================================================
  hp                   現有HP
  maxhp            最大HP
  sp                   現有sp
  maxsp            最大SP
  atk                  攻擊力
  str                   力量
  agi                  敏捷
  dex                 熟練
  int                   智力
  pdef                物防
  mdef               魔防
  eva                  迴避率
  level                等級(我方限定)
  exp                  經驗值(我方限定)
  
=end
  #--------------------------------------------------------------------------
  # ● 使用例:
  #       power + a.int*2 - b.mdef/2 + v[3]   (技能威力 + 使用者int*2 - 敵方魔防/2 + 變數3的值)
  #       power + g + a.atk                            (技能威力 + 現有金錢 + 使用者atk)
  #       power + rand(100) - 50                   (技能威力 + -50~49浮動值)
  #       a.level + v[10]                                (使用者等級 + 變數10的值)
  #--------------------------------------------------------------------------
  CUSTOM_FORMULA = {
    1 => "power * a.level",           # 1號技能   (威力*使用者等級)
    2 => "power * v[1]",              # 2號技能   (威力*1號變數)
    3 => "power + g",                   # 3號技能  (威力+隊伍持有金錢)
    4 => "power ** b.str"             # 4號技能  (威力為目標力量的平方倍)
  }
end



#==============================================================================
# ■ Game_Battler
#------------------------------------------------------------------------------
#  處理戰鬥者的類。作為 Game_Actor 與 Game_Enemy 的父類使用。
#==============================================================================
class Game_Battler
  #--------------------------------------------------------------------------
  # ● 自訂公式傷害處理
  #    a:攻擊方 (技能使用者)
  #    b:防禦方 (目標)
  #    skill:技能
  #    recover:恢復技判定(值為1或-1,資料庫設定傷害值負的會判定為恢復技)
  #--------------------------------------------------------------------------
  def custom_result(a, b, skill, recover)
    formula = Skill_Custom::CUSTOM_FORMULA[skill.id]
    power = (skill.power).abs
    v = $game_variables
    g = $game_party.gold
    begin
      result = [eval(formula).round, 0].max * recover
      return result
    rescue
      if formula == nil
        p "錯誤:技能的自訂公式不存在"
        return 0
      end
      if skill == nil
        p "錯誤:技能本身不存在"
        return 0
      end
      p "錯誤:技能公式有誤"
      return 0
    end
  end
  #--------------------------------------------------------------------------
  # ● 套用技能效果
  #     user  : 技能的使用者 (battler)
  #     skill : 技能
  #--------------------------------------------------------------------------
  def skill_effect(user, skill)
    # 清除會心一擊標誌
    self.critical = false
    # 技能的效果範圍是 HP 1 以上的己方、自己的 HP 為 0、
    # 或者技能的效果範圍是 HP 0 的己方、自己的 HP 為 1 以上的情況下
    if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
       ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
      # 過程結束
      return false
    end
    # 清除有效標誌
    effective = false
    # 公共事件 ID 是有效的情況下,設定為有效標誌
    effective |= skill.common_event_id > 0
    # 第一命中判定
    hit = skill.hit
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)
    # 不確定技能的情況下設定為有效標誌
    effective |= hit < 100
    # 命中的情況下
    if hit_result == true
      

      # 有自訂公式的情況下
      if skill.element_set.include?($data_system.elements.index(Skill_Custom::CUSTOM_ELE))
        sign = (skill.power >= 0) ? 1 : -1
        self.damage = custom_result(user, self, skill, sign)
      # 沒有的情況,使用原本的計算方式  
      else
        # 計算威力
        power = skill.power + user.atk * skill.atk_f / 100
        if power > 0
          power -= self.pdef * skill.pdef_f / 200
          power -= self.mdef * skill.mdef_f / 200
          power = [power, 0].max
        end
        # 計算倍率
        rate = 20
        rate += (user.str * skill.str_f / 100)
        rate += (user.dex * skill.dex_f / 100)
        rate += (user.agi * skill.agi_f / 100)
        rate += (user.int * skill.int_f / 100)
        # 計算基本傷害
        self.damage = power * rate / 20
      end  # 分歧結束,以下內容維持不變
      
      
      # 屬性修正
      self.damage *= elements_correct(skill.element_set)
      self.damage /= 100
      # 傷害符號正確的情況下
      if self.damage > 0
        # 防禦修正
        if self.guarding?
          self.damage /= 2
         end
      end
      # 分散
      if skill.variance > 0 and self.damage.abs > 0
        amp = [self.damage.abs * skill.variance / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # 第二命中判定
      eva = 8 * self.agi / user.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
      # 不確定技能的情況下設定為有效標誌
      effective |= hit < 100
    end
   
    # 命中的情況下
    if hit_result == true
      # 威力 0 以外的物理攻擊的情況下
      if skill.power != 0 and skill.atk_f > 0
        # 狀態衝擊解除
        remove_states_shock
        # 設定有效標誌
        effective = true
      end
      # HP 的傷害減法運算
      last_hp = self.hp
      self.hp -= self.damage
      effective |= self.hp != last_hp
      # 狀態變化
      @state_changed = false
      effective |= states_plus(skill.plus_state_set)
      effective |= states_minus(skill.minus_state_set)
      # 威力為 0 的場合
      if skill.power == 0
        # 傷害設定為空的字串
        self.damage = ""
        # 狀態沒有變化的情況下
        unless @state_changed
          # 傷害設定為 "Miss"
          self.damage = "Miss"
        end
      end
    # Miss 的情況下
    else
      # 傷害設定為 "Miss"
      self.damage = "Miss"
    end
    # 不在戰鬥中的情況下
    unless $game_temp.in_battle
      # 傷害設定為 nil
      self.damage = nil
    end
    # 過程結束
    return effective
  end
end[/pre]

点评

没菜刀大大的那么强大..他的还可以用游戏时间..  发表于 2020-3-19 17:46
1 => 17 + 3*a.level,可以实现,不知道还可以实现啥效果,慢慢研究,再看看刀王的插件。  发表于 2020-3-19 16:37

评分

参与人数 2星屑 +50 赞 +1 收起 理由
RyanBern + 50 认可答案
miantouchi + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
42235
在线时间
6017 小时
注册时间
2006-11-10
回帖
6966
发表于 2020-3-19 00:58:04 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 2020-3-19 01:02 编辑



仿VA的自定义公式

写法 [公式]-(17 + a等 * 3)

点评

效果可以了,感觉直接在脚本里面编辑,就像上面的那个插件一样,是不是就能避免这个问题了。  发表于 2020-3-20 12:24
那就在 Scene_Skill 的 if @skill.common_event_id > 0 后面加上 and ![10086].include?(@skill.id) 让特定的ID的技能不回地图吧,反正公式只是判定也不需要运行公共事件  发表于 2020-3-20 11:03
emmm,用公共事件确实会有这个问题  发表于 2020-3-20 10:40
还有个问题,就是在菜单栏里面加血的话,加一次窗口直接关闭,还得再次打开窗口加血  发表于 2020-3-20 10:34

评分

参与人数 1赞 +1 收起 理由
miantouchi + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2020-3-19 02:03:35 | 显示全部楼层
提一下,XP里技能会被各种属性增强(通常是魔力100),如果等级上升同时提升魔力值的话,也可以达到类似的效果。

点评

我暂时还是用公式吧,技能这块脚本暂时不是太理解,如果理解了再改改。  发表于 2020-3-19 17:10
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

梦石
0
星屑
15041
在线时间
2230 小时
注册时间
2019-1-24
回帖
964

R考场第七期纪念奖

 楼主| 发表于 2020-3-19 16:25:21 | 显示全部楼层
灯笼菜刀王 发表于 2020-3-19 00:58
仿VA的自定义公式

写法 [公式]-(17 + a等 * 3)

你的脚本报错,a等,貌似是没有赋值
1.png

点评

好了  发表于 2020-3-19 17:04
额, 是 a级 =.=  发表于 2020-3-19 16:40
回复

使用道具 举报

梦石
0
星屑
15041
在线时间
2230 小时
注册时间
2019-1-24
回帖
964

R考场第七期纪念奖

 楼主| 发表于 2020-3-20 12:26:58 | 显示全部楼层
灯笼菜刀王 发表于 2020-3-19 00:58
仿VA的自定义公式

写法 [公式]-(17 + a等 * 3)

再一个就是,虽然结果达到了,不太理解的地方就是,加了你这句,我1号法术就不会执行if里面的公共事件,
但是这个插件不就是要调用这个公共事件吗?
        if @skill.common_event_id > 0  and ![1].include?(@skill.id)
          # 预约调用公共事件
          $game_temp.common_event_id = @skill.common_event_id
          # 切换到地图画面
          $scene = Scene_Map.new
          return
        end

点评

那就在 def skill_effect(user, skill) 里的 effective |= skill.common_event_id > 0 一样多个判定 effective |= (skill.common_event_id > 0 and ![10086].include?(skill.id))  发表于 2020-3-21 16:01
还发现一个无关痛痒的问题,就是用现在情况是人物即使是满血的情况,也可以加血费蓝了。  发表于 2020-3-21 12:38
本来备注就不会被执行, 只是"借地方写公式"而已,笑  发表于 2020-3-20 22:17
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部