Project1

标题: 怎样做到角色等级不低于16级时追加武器0..1次攻击? [打印本页]

作者: shengfeng    时间: 2017-3-28 17:30
标题: 怎样做到角色等级不低于16级时追加武器0..1次攻击?
等级不等于36级时追加武器1..2次攻击,等级不低于56级时追加武器2..3次攻击以此类推
作者: shengfeng    时间: 2017-3-30 18:04
写错了是不低于36级
作者: 夜狠简单    时间: 2017-3-30 19:42
行动列表里面多添加一次角色
作者: QQ蚊子湯    时间: 2017-3-31 09:42
本帖最后由 QQ蚊子湯 于 2017-3-31 09:55 编辑

看了你在水區的帖子
https://rpg.blue/forum.php?mod=v ... page%3D1&page=1
我決定把你當成一個認真求學的人來回答這一題
請你看完之後評估自己的水平或是付出的物質/精神代價是否能夠駕馭這樣的功能
(或者我純粹在浪費時間講一個你還沒有任何概念的東西)
#========

因為是追加攻擊,所以先找到掌管戰鬥行動的Game_Action類
RUBY 代码复制
  1. class Game_Action
  2.     def targets_for_opponents
  3.     if item.for_random?
  4.       Array.new(item.number_of_targets) { opponents_unit.random_target }
  5.     elsif item.for_one?
  6.       num = 1 + (attack? ? subject.atk_times_add.to_i : 0)
  7.       if @target_index < 0
  8.         [opponents_unit.random_target] * num
  9.       else
  10.         [opponents_unit.smooth_target(@target_index)] * num
  11.       end
  12.     else
  13.       opponents_unit.alive_members
  14.     end
  15.   end
  16. end


在這裡我們會看到num這個臨時變量
RUBY 代码复制
  1. num = 1 + (attack? ? subject.atk_times_add.to_i : 0)


他代表的是實行動作為敵人時套用的攻擊次數
也就是敵我不分的
這裡可以透過判斷subject是否為角色來把行動主體為怪物的因素屏除,
或是判斷是否為指定角色的實例、該行動主體是否擁有技能來做到角色特性、技能差分

atk_times_add這個值則是來自Game_BattlerBase類的定義
RUBY 代码复制
  1. class Game_BattlerBase
  2.   def atk_times_add
  3.     [features_sum_all(FEATURE_ATK_TIMES), 0].max
  4.   end
  5. end

他是行動主體的攻擊次數特性總和
因為attack? 這個判斷所以他只會在普通攻擊時發揮作用
在這裡我們知道他是什麼就可以了
我們需要改變整個num的總和,也就是照我們的條件進行追加
RUBY 代码复制
  1. num = 1 + (attack? ? subject.atk_times_add.to_i : 0) + ( subject.actor? && subject.level >= 16 ?  你要增加的攻擊次數 : 0)

(非可直接執行的代碼)
隨機部分你可以在條件達成時的函數中用rand(2)來產生0或1兩個數,再將他與基數相加
例如 2 + rand(2) 會隨機產生 2或是3的結果

以上,不知道你是否能學會呢

作者: shengfeng    时间: 2017-3-31 17:42
不过在你发了这个脚本之前我用事件解决了这个问题,就是麻烦了点,不过我对帮助过人表示感谢




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