本帖最后由 QQ蚊子湯 于 2017-3-31 09:55 编辑
看了你在水區的帖子
https://rpg.blue/forum.php?mod=v ... page%3D1&page=1
我決定把你當成一個認真求學的人來回答這一題
請你看完之後評估自己的水平或是付出的物質/精神代價是否能夠駕馭這樣的功能
(或者我純粹在浪費時間講一個你還沒有任何概念的東西)
#========
因為是追加攻擊,所以先找到掌管戰鬥行動的Game_Action類
class Game_Action def targets_for_opponents if item.for_random? Array.new(item.number_of_targets) { opponents_unit.random_target } elsif item.for_one? num = 1 + (attack? ? subject.atk_times_add.to_i : 0) if @target_index < 0 [opponents_unit.random_target] * num else [opponents_unit.smooth_target(@target_index)] * num end else opponents_unit.alive_members end end end
class Game_Action
def targets_for_opponents
if item.for_random?
Array.new(item.number_of_targets) { opponents_unit.random_target }
elsif item.for_one?
num = 1 + (attack? ? subject.atk_times_add.to_i : 0)
if @target_index < 0
[opponents_unit.random_target] * num
else
[opponents_unit.smooth_target(@target_index)] * num
end
else
opponents_unit.alive_members
end
end
end
在這裡我們會看到num這個臨時變量
num = 1 + (attack? ? subject.atk_times_add.to_i : 0)
num = 1 + (attack? ? subject.atk_times_add.to_i : 0)
他代表的是實行動作為敵人時套用的攻擊次數
也就是敵我不分的
這裡可以透過判斷subject是否為角色來把行動主體為怪物的因素屏除,
或是判斷是否為指定角色的實例、該行動主體是否擁有技能來做到角色特性、技能差分
atk_times_add這個值則是來自Game_BattlerBase類的定義
class Game_BattlerBase def atk_times_add [features_sum_all(FEATURE_ATK_TIMES), 0].max end end
class Game_BattlerBase
def atk_times_add
[features_sum_all(FEATURE_ATK_TIMES), 0].max
end
end
他是行動主體的攻擊次數特性總和
因為attack? 這個判斷所以他只會在普通攻擊時發揮作用
在這裡我們知道他是什麼就可以了
我們需要改變整個num的總和,也就是照我們的條件進行追加
num = 1 + (attack? ? subject.atk_times_add.to_i : 0) + ( subject.actor? && subject.level >= 16 ? 你要增加的攻擊次數 : 0)
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的結果
以上,不知道你是否能學會呢
|