Project1

标题: [已解决]加血技能随着等级提升加血量跟着提升。 [打印本页]

作者: miantouchi    时间: 2020-3-18 21:55
标题: [已解决]加血技能随着等级提升加血量跟着提升。
本帖最后由 miantouchi 于 2020-3-19 17:10 编辑

基础加血法术:基础固定值(17) + 3*等级
就是角色1级时加血17+3=20
就是角色2级时加血17+3*2=23
就是角色2级时加血17+3*3=26
依次类推。。。。
这个应该怎么实现?
作者: zyzzyzzyzzyz    时间: 2020-3-18 22:25
va在技能伤害公式计算里面可以用level代表等级,xp我不知道行不行。。。
作者: 我不是朱鹏    时间: 2020-3-18 22:28
设置公共事件,设几个变量在一加就好了。可是好像我这样只能群体回复,无法选定目标。要选定目标只能靠脚本了。
作者: soulsaga    时间: 2020-3-18 23:51
本帖最后由 soulsaga 于 2020-3-19 00:04 编辑

用这个仿VA技能公式脚本..就行好像..大概
RUBY 代码复制
  1. #==============================================================================
  2. # ■ 自訂技能傷害公式
  3. #------------------------------------------------------------------------------
  4. #     仿照VX ACE的自訂公式,公式基本上是照搬
  5. #     只要設定好屬性(啟動用)和對應的公式就能作用
  6.  
  7. #     自訂公式只跳脫技能資料庫的【素質需求】部分,
  8. #     屬性加乘、迴避、分散度仍照內建公式
  9. #==============================================================================
  10. module Skill_Custom
  11.   #--------------------------------------------------------------------------
  12.   # ● 使用者修改項目1:自訂公式的屬性名稱
  13.   #--------------------------------------------------------------------------
  14.   #      在資料庫設定同名屬性,技能只要勾選該屬性就會偵測腳本的自訂公式
  15.   #      如果有勾選屬性沒設定公式傷害會變為 0
  16.   #--------------------------------------------------------------------------
  17.   CUSTOM_ELE = "自訂公式"
  18.   #--------------------------------------------------------------------------
  19.   # ● 使用者修改項目2:自訂公式(編輯格式:技能ID => 公式,每個公式用逗號隔開)
  20.   #--------------------------------------------------------------------------
  21.   # <變量說明>
  22.   # power:在資料庫設定的技能威力
  23.   # g:隊伍目前持有金錢
  24.   # v[n]:使用事件n號變數的值 (ex: v[5],使用5號變數的值)
  25.   # rand(n):亂數,最高到n-1,最小為0
  26.   # a: 技能使用者
  27.   # b:目標
  28.  
  29. =begin
  30. ==============================================================================
  31. ■ a(技能使用者)和b(目標)可用的變量,
  32.     基本上就是Game_Battler所有的數值變量
  33. ------------------------------------------------------------------------------
  34. 使用例:(a.atk + a.int)*2 - (b.pdef/2)           (使用者atk + 使用者int)*2 - 對像物防/2
  35. ==============================================================================
  36.   hp                   現有HP
  37.   maxhp            最大HP
  38.   sp                   現有sp
  39.   maxsp            最大SP
  40.   atk                  攻擊力
  41.   str                   力量
  42.   agi                  敏捷
  43.   dex                 熟練
  44.   int                   智力
  45.   pdef                物防
  46.   mdef               魔防
  47.   eva                  迴避率
  48.   level                等級(我方限定)
  49.   exp                  經驗值(我方限定)
  50.  
  51. =end
  52.   #--------------------------------------------------------------------------
  53.   # ● 使用例:
  54.   #       power + a.int*2 - b.mdef/2 + v[3]   (技能威力 + 使用者int*2 - 敵方魔防/2 + 變數3的值)
  55.   #       power + g + a.atk                            (技能威力 + 現有金錢 + 使用者atk)
  56.   #       power + rand(100) - 50                   (技能威力 + -50~49浮動值)
  57.   #       a.level + v[10]                                (使用者等級 + 變數10的值)
  58.   #--------------------------------------------------------------------------
  59.   CUSTOM_FORMULA = {
  60.     1 => "power * a.level",           # 1號技能   (威力*使用者等級)
  61.     2 => "power * v[1]",              # 2號技能   (威力*1號變數)
  62.     3 => "power + g",                   # 3號技能  (威力+隊伍持有金錢)
  63.     4 => "power ** b.str"             # 4號技能  (威力為目標力量的平方倍)
  64.   }
  65. end
  66.  
  67.  
  68.  
  69. #==============================================================================
  70. # ■ Game_Battler
  71. #------------------------------------------------------------------------------
  72. #  處理戰鬥者的類。作為 Game_Actor 與 Game_Enemy 的父類使用。
  73. #==============================================================================
  74. class Game_Battler
  75.   #--------------------------------------------------------------------------
  76.   # ● 自訂公式傷害處理
  77.   #    a:攻擊方 (技能使用者)
  78.   #    b:防禦方 (目標)
  79.   #    skill:技能
  80.   #    recover:恢復技判定(值為1或-1,資料庫設定傷害值負的會判定為恢復技)
  81.   #--------------------------------------------------------------------------
  82.   def custom_result(a, b, skill, recover)
  83.     formula = Skill_Custom::CUSTOM_FORMULA[skill.id]
  84.     power = (skill.power).abs
  85.     v = $game_variables
  86.     g = $game_party.gold
  87.     begin
  88.       result = [eval(formula).round, 0].max * recover
  89.       return result
  90.     rescue
  91.       if formula == nil
  92.         p "錯誤:技能的自訂公式不存在"
  93.         return 0
  94.       end
  95.       if skill == nil
  96.         p "錯誤:技能本身不存在"
  97.         return 0
  98.       end
  99.       p "錯誤:技能公式有誤"
  100.       return 0
  101.     end
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 套用技能效果
  105.   #     user  : 技能的使用者 (battler)
  106.   #     skill : 技能
  107.   #--------------------------------------------------------------------------
  108.   def skill_effect(user, skill)
  109.     # 清除會心一擊標誌
  110.     self.critical = false
  111.     # 技能的效果範圍是 HP 1 以上的己方、自己的 HP 為 0、
  112.     # 或者技能的效果範圍是 HP 0 的己方、自己的 HP 為 1 以上的情況下
  113.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  114.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  115.       # 過程結束
  116.       return false
  117.     end
  118.     # 清除有效標誌
  119.     effective = false
  120.     # 公共事件 ID 是有效的情況下,設定為有效標誌
  121.     effective |= skill.common_event_id > 0
  122.     # 第一命中判定
  123.     hit = skill.hit
  124.     if skill.atk_f > 0
  125.       hit *= user.hit / 100
  126.     end
  127.     hit_result = (rand(100) < hit)
  128.     # 不確定技能的情況下設定為有效標誌
  129.     effective |= hit < 100
  130.     # 命中的情況下
  131.     if hit_result == true
  132.  
  133.  
  134.       # 有自訂公式的情況下
  135.       if skill.element_set.include?($data_system.elements.index(Skill_Custom::CUSTOM_ELE))
  136.         sign = (skill.power >= 0) ? 1 : -1
  137.         self.damage = custom_result(user, self, skill, sign)
  138.       # 沒有的情況,使用原本的計算方式  
  139.       else
  140.         # 計算威力
  141.         power = skill.power + user.atk * skill.atk_f / 100
  142.         if power > 0
  143.           power -= self.pdef * skill.pdef_f / 200
  144.           power -= self.mdef * skill.mdef_f / 200
  145.           power = [power, 0].max
  146.         end
  147.         # 計算倍率
  148.         rate = 20
  149.         rate += (user.str * skill.str_f / 100)
  150.         rate += (user.dex * skill.dex_f / 100)
  151.         rate += (user.agi * skill.agi_f / 100)
  152.         rate += (user.int * skill.int_f / 100)
  153.         # 計算基本傷害
  154.         self.damage = power * rate / 20
  155.       end  # 分歧結束,以下內容維持不變
  156.  
  157.  
  158.       # 屬性修正
  159.       self.damage *= elements_correct(skill.element_set)
  160.       self.damage /= 100
  161.       # 傷害符號正確的情況下
  162.       if self.damage > 0
  163.         # 防禦修正
  164.         if self.guarding?
  165.           self.damage /= 2
  166.          end
  167.       end
  168.       # 分散
  169.       if skill.variance > 0 and self.damage.abs > 0
  170.         amp = [self.damage.abs * skill.variance / 100, 1].max
  171.         self.damage += rand(amp+1) + rand(amp+1) - amp
  172.       end
  173.       # 第二命中判定
  174.       eva = 8 * self.agi / user.dex + self.eva
  175.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  176.       hit = self.cant_evade? ? 100 : hit
  177.       hit_result = (rand(100) < hit)
  178.       # 不確定技能的情況下設定為有效標誌
  179.       effective |= hit < 100
  180.     end
  181.  
  182.     # 命中的情況下
  183.     if hit_result == true
  184.       # 威力 0 以外的物理攻擊的情況下
  185.       if skill.power != 0 and skill.atk_f > 0
  186.         # 狀態衝擊解除
  187.         remove_states_shock
  188.         # 設定有效標誌
  189.         effective = true
  190.       end
  191.       # HP 的傷害減法運算
  192.       last_hp = self.hp
  193.       self.hp -= self.damage
  194.       effective |= self.hp != last_hp
  195.       # 狀態變化
  196.       @state_changed = false
  197.       effective |= states_plus(skill.plus_state_set)
  198.       effective |= states_minus(skill.minus_state_set)
  199.       # 威力為 0 的場合
  200.       if skill.power == 0
  201.         # 傷害設定為空的字串
  202.         self.damage = ""
  203.         # 狀態沒有變化的情況下
  204.         unless @state_changed
  205.           # 傷害設定為 "Miss"
  206.           self.damage = "Miss"
  207.         end
  208.       end
  209.     # Miss 的情況下
  210.     else
  211.       # 傷害設定為 "Miss"
  212.       self.damage = "Miss"
  213.     end
  214.     # 不在戰鬥中的情況下
  215.     unless $game_temp.in_battle
  216.       # 傷害設定為 nil
  217.       self.damage = nil
  218.     end
  219.     # 過程結束
  220.     return effective
  221.   end
  222. end

作者: 灯笼菜刀王    时间: 2020-3-19 00:58
本帖最后由 灯笼菜刀王 于 2020-3-19 01:02 编辑



仿VA的自定义公式

写法 [公式]-(17 + a等 * 3)
作者: guoxiaomi    时间: 2020-3-19 02:03
提一下,XP里技能会被各种属性增强(通常是魔力100),如果等级上升同时提升魔力值的话,也可以达到类似的效果。
作者: miantouchi    时间: 2020-3-19 16:25
灯笼菜刀王 发表于 2020-3-19 00:58
仿VA的自定义公式

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

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

1.png (16.46 KB, 下载次数: 21)

1.png

作者: miantouchi    时间: 2020-3-20 12:26
灯笼菜刀王 发表于 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




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