Advertisement
Guest User

Untitled

a guest
Feb 24th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 30.57 KB | None | 0 0
  1. #encoding:utf-8
  2. #===========================================================================
  3. # RMVA 豪華型技能加點|技能被動效果: v1.05
  4. # By希憶 66rpg.com
  5. # 轉載或修改請保留此類信息
  6. #===========================================================================
  7. # 在遊戲系統類的實現
  8. #
  9. # 完工了,大概
  10. #===========================================================================
  11. #角色類,新增一堆方法。
  12. class Game_Actor < Game_Battler
  13.  
  14. #初始化角色
  15. #@skill_level:存放技能等級數據的哈希表,技能id=>技能等級
  16. #@sp:剩餘技能點
  17. alias setup_201410131453 setup
  18. def setup(actor_id)
  19. @skill_level=Hash.new(0)
  20. setup_201410131453(actor_id)
  21. @sp = (@level-1) * SkillLevel::LEVELUPSP + SkillLevel::INITIALSP
  22. auto_skill_levelup if self.class.auto_sp
  23. end
  24.  
  25. #讀取技能點的方法,如果是自動升級技能的職業,則沒必要有技能點
  26. def sp
  27. return 0 if self.class.auto_sp
  28. @sp
  29. end
  30.  
  31. #讀取技能基礎等級,
  32. #鎖定技能等級優先度最高,
  33. #鏈接技能等級次之,這個我好像在計算技能最終等級的方法裡面又來了一遍。
  34. #主要是技能基礎等級是升級技能的窗口看到的等級,最終等級是使用技能的窗口。
  35. def skill_basic_level(skill_id)
  36. return 0 if skill_id == 0
  37. lock = $data_skills[skill_id].lock_level
  38. return lock if lock != 0
  39. lnk = $data_skills[skill_id].link_skill
  40. return skill_basic_level(lnk) if lnk != 0
  41. @skill_level[skill_id]
  42. end
  43.  
  44. #獲取裝備增加技能的等級之和
  45. def skill_plus_level(skill_id)
  46. self.equips.compact.inject(0){|skl,eqp| skl+eqp.add_skill(skill_id)}
  47. end
  48.  
  49. #讀取技能最終等級,如果技能基礎等級為零,則不加裝備提升直接等於零。
  50. #最後返回基礎等級+裝備附加與技能最大等級中的小值
  51. def skill_level(skill_id)
  52. return 0 if skill_id == 0
  53. lock = $data_skills[skill_id].lock_level
  54. return lock if lock != 0
  55. lnk = $data_skills[skill_id].link_skill
  56. return skill_level(lnk) if lnk != 0
  57. return 0 unless @skills.include?(skill_id)
  58. return 0 if skill_basic_level(skill_id) == 0
  59. [skill_basic_level(skill_id) + skill_plus_level(skill_id) ,\
  60. $data_skills[skill_id].max_level].min
  61. end
  62.  
  63. #升一級技能技能能升級就升級,返回成功,否則返回失敗
  64. def level_up_skill(skill_id)
  65. skl = $data_skills[skill_id]
  66. if skill_can_levelup?(skl)
  67. @sp -= skl.sp_cost
  68. @skill_level[skill_id] += 1
  69. return true
  70. else
  71. return false
  72. end
  73. end
  74.  
  75. #初始化角色時初始化技能的方法,
  76. #這裡是不管默認的技能設定直接加載能學到的所有技能,也就是職業列表下的那些。
  77. def init_skills
  78. @skills = []
  79. self.class.learnings.each do |learning|
  80. @skills.push(learning.skill_id)
  81. end
  82. @skills.sort!
  83. end
  84.  
  85. #主要用在技能列表的窗口裡的。確保只有技能等級為1級及以上的技能才能顯示。
  86. def has_skill?(skill)
  87. skills.include?(skill) && skill_basic_level(skill.id) > 0
  88. end
  89.  
  90. #判斷是否學習了技能,同樣要確保只有技能等級為1級及以上的技能才能顯示。
  91. #和上面的區別是上面的可以有裝備附帶,狀態附帶的技能等級不為0的技能
  92. #這裡只能是職業列表下“領悟”的技能,裝備狀態附帶的都不算
  93. def skill_learn?(skill)
  94. skill.is_a?(RPG::Skill) && @skills.include?(skill.id) && skill_basic_level(skill.id) > 0
  95. end
  96.  
  97. #判斷前置技能是否都滿足
  98. def skill_former_match?(skill)
  99. skill.former.each do |former|
  100. return false unless skill_basic_level(former[0]) >= former[1]
  101. end
  102. true
  103. end
  104.  
  105. #判斷技能是否已經學到精通了
  106. def skill_max_learn?(skill)
  107. skill_basic_level(skill.id) == skill.max_learn
  108. end
  109.  
  110. #計算學習下一等級的技能所需要的人物等級
  111. #如果精通了return false【感覺好像有點奇葩。。。】
  112. def skill_next_level(skill)
  113. return false if skill_max_learn?(skill)
  114. skill.learn_level[0] + skill_basic_level(skill.id) * skill.learn_level[1]
  115. end
  116.  
  117. #技能能否升級?首先看是否鎖定,是否鏈接,是否精通,
  118. #再看等級是否符合學習下一級,sp是否足夠,前置技能是否滿足要求。
  119. def skill_can_levelup?(skill)
  120. return false if skill.lock_level != 0
  121. return false if skill.link_skill != 0
  122. return false if skill_max_learn?(skill)
  123. @level >= skill_next_level(skill) && @sp >= skill.sp_cost && skill_former_match?(skill)
  124. end
  125.  
  126. #好像沒什麼用處。。。當初修改的用意是直接設置技能等級,後來覺得不好控制。。。
  127. #反正就放著吧,不去管它好了
  128. def learn_skill(skill_id,sk_level=1)
  129. unless skill_learn?($data_skills[skill_id])
  130. @skills.push(skill_id)
  131. @skills.sort!
  132. @skill_level[skill_id]=sk_level unless @skill_level.has_key?(skill_id)
  133. end
  134. end
  135.  
  136. #自動升級技能。
  137. def auto_skill_levelup
  138. @skills.each do |skill|
  139. skl=$data_skills[skill]
  140. if self.class.auto_sp
  141. while skill_next_level(skl) && skill_next_level(skl) <= @level do
  142. @skill_level[skill] += 1
  143. end
  144. elsif skl.auto_levelup
  145. while level_up_skill(skill) do
  146. end
  147. end
  148. end
  149. end
  150.  
  151. #升級時發生的事情,等級+1,sp增加,如果是自動升級技能的職業則自動升級技能
  152. def level_up
  153. @level += 1
  154. @sp += SkillLevel::LEVELUPSP
  155. auto_skill_levelup
  156. end
  157.  
  158. #被動技能提升的基礎屬性(加法疊加的部分)
  159. #SkillLevel.formula:帶入公式計算。
  160. def skill_plus(param_id)
  161. skills.inject(0) do |plu,skl|
  162. plu + SkillLevel.formula(self.skill_level(skl.id),skl.param_add(param_id))
  163. end
  164. end
  165.  
  166. #被動技能提升的基礎屬性倍率(乘法疊加)
  167. def skill_rate(param_id)
  168. skills.inject(1.00) do |plu,skl|
  169. plu * SkillLevel.formula(self.skill_level(skl.id),skl.param_rate(param_id))
  170. end
  171. end
  172.  
  173. #被動技能影響的屬性抗性(乘法疊加)
  174. def skill_element_rate(element_id)
  175. skills.inject(1.00) do |plu,skl|
  176. plu * SkillLevel.formula(self.skill_level(skl.id),skl.element_rate(element_id))
  177. end
  178. end
  179.  
  180. #狀態提升的基礎屬性(加法疊加的部分)
  181. def state_param_plus(param_id)
  182. states.inject(0) do |plu,sta|
  183. plu + SkillLevel.formula(@state_level[sta.id],sta.param_add(param_id))
  184. end
  185. end
  186. #狀態提升的基礎屬性倍率(乘法疊加)
  187. def state_param_rate(param_id)
  188. states.inject(1.00) do |plu,sta|
  189. plu * SkillLevel.formula(@state_level[sta.id],sta.param_rate(param_id))
  190. end
  191. end
  192. #狀態額外影響的屬性抗性(乘法疊加)
  193. def state_element_rate(element_id)
  194. states.inject(1.00) do |plu,sta|
  195. plu * SkillLevel.formula(@state_level[sta.id],sta.element_rate(element_id))
  196. end
  197. end
  198.  
  199. #狀態影響的附加屬性xparam
  200. def state_xparam(xparam_id)
  201. states.inject(0.0) do |plu,sta|
  202. plu + SkillLevel.formula(@state_level[sta.id],sta.xparam(xparam_id))
  203. end
  204. end
  205.  
  206.  
  207. #狀態影響特殊屬性sparam的計算
  208. def state_sparam(sparam_id)
  209. states.inject(1.0) do |plu,sta|
  210. plu * SkillLevel.formula(@state_level[sta.id],sta.sparam(sparam_id))
  211. end
  212. end
  213. #特殊屬性sparam的計算,經驗值比率什麼的,迭代連乘計算。
  214. def sparam(sparam_id)
  215. state_sparam(sparam_id)*skills.inject(super(sparam_id)) do |plu,skl|
  216. plu * SkillLevel.formula(self.skill_level(skl.id),skl.sparam(sparam_id))
  217. end
  218. end
  219.  
  220. #技能消耗mp由於技能等級修正的倍率,
  221. #反正就是到SkillLevel.formula找對應編號的公式。
  222. def skill_mp_rate(skill)
  223. SkillLevel.formula(skill_level(skill.id),skill.mp_type)
  224. end
  225.  
  226. #計算最終技能消耗mp的量
  227. def skill_mp_cost(skill)
  228. (skill.mp_cost * mcr * skill_mp_rate(skill)).to_i
  229. end
  230.  
  231. #計算暴擊傷害倍率super:Game_Battler中的critical_rate,返回1.5
  232. #人物提升,職業提升,被動技能修正和裝備提升
  233. def critical_rate
  234. v = super
  235. v *= (1.0 + self.actor.critical_rate/100.0)
  236. v *= (1.0 + self.class.critical_rate/100.0)
  237. v *= skills.inject(1.00) do |plu,skl|
  238. plu * SkillLevel.formula(self.skill_level(skl.id),skl.critical_rate)
  239. end
  240. v*equips.compact.inject(1.00){ |rat,equip| rat*(1.00+equip.critical_rate/100.0) }
  241. end
  242.  
  243. #屬性傷害修正。
  244. def element_rate(element_id)
  245. super(element_id) * skill_element_rate(element_id) * state_element_rate(element_id)
  246. end
  247.  
  248. #被動技能影響的屬性強化效果。
  249. def skill_element_damage(element_id)
  250. skills.inject(1.00) do |plu,skl|
  251. plu * SkillLevel.formula(self.skill_level(skl.id),skl.element_damage(element_id))
  252. end
  253. end
  254.  
  255. def state_element_damage(element_id)
  256. states.inject(1.00) do |plu,sta|
  257. plu * SkillLevel.formula(@state_level[sta.id],sta.element_damage(element_id))
  258. end
  259. end
  260.  
  261. #基礎屬性強化,角色備註和職業備註修正。
  262. def basic_element_damage(element_id)
  263. (1.0 + self.actor.element_damage(element_id)/100.0) *
  264. (1.0 + self.class.element_damage(element_id)/100.0)
  265. end
  266.  
  267. #計算最終屬性強化基礎技能裝備迭代連乘
  268. def element_damage(element_id)
  269. basic_element_damage(element_id) *
  270. equips.compact.inject(skill_element_damage(element_id)) do |rat,equip|
  271. rat*(1.00+equip.element_damage(element_id)/100.0)
  272. end
  273. end
  274.  
  275. #受到hp傷害轉移給mp的比例,遍歷計算並返回最大值
  276. def damage_convert
  277. skl = skills.collect{|sk| sk = SkillLevel.formula(self.skill_level(sk.id),sk.damage_convert)}
  278. sta = states.collect{|st| st = SkillLevel.formula(@state_level[st.id],st.damage_convert)}
  279. (skl+sta).max
  280. end
  281.  
  282. #洗技能了,
  283. alias item_apply_201411181846 item_apply
  284. def item_apply(user, item)
  285. item_apply_201411181846(user, item)
  286. if item.is_a?(RPG::Item) and item.id == SkillLevel::RESETITEM
  287. if self.reset_skill
  288. self.hp = [self.hp,self.mhp].min
  289. self.mp = [self.mp,self.mmp].min
  290. end
  291. end
  292. end
  293.  
  294. #洗技能的方法
  295. def reset_skill
  296. return false if self.class.auto_sp
  297. @sp = (@level-1) * SkillLevel::LEVELUPSP + SkillLevel::INITIALSP
  298. @skills.each { |skill| @skill_level[skill]=0 }
  299. return true
  300. end
  301.  
  302. end
  303.  
  304.  
  305. class Game_Enemy
  306. #敵人屬性強化
  307. def element_damage(id)
  308. 1.0 + self.enemy.element_damage(id)/100.0
  309. end
  310. #敵人暴擊倍率 super:Game_Battler定義的critical_rate,返回1.5
  311. def critical_rate
  312. super * (1+self.enemy.element_damage/100.0)
  313. end
  314. #敵人的技能等級,要麼鎖定,要麼1
  315. def skill_level(skill_id)
  316. lock = $data_skills[skill_id].lock_level if $data_skills[skill_id]
  317. return lock if lock != 0
  318. return 1
  319. end
  320. #狀態提升的基礎屬性(加法疊加的部分)
  321. def state_param_plus(param_id)
  322. states.inject(0) do |plu,sta|
  323. plu + SkillLevel.formula(@state_level[sta.id],sta.param_add(param_id))
  324. end
  325. end
  326. #狀態提升的基礎屬性倍率(乘法疊加)
  327. def state_param_rate(param_id)
  328. states.inject(1.00) do |plu,sta|
  329. plu * SkillLevel.formula(@state_level[sta.id],sta.param_rate(param_id))
  330. end
  331. end
  332. #狀態額外影響的屬性抗性(乘法疊加)
  333. def state_element_rate(element_id)
  334. states.inject(1.00) do |plu,sta|
  335. plu * SkillLevel.formula(@state_level[sta.id],sta.element_rate(element_id))
  336. end
  337. end
  338.  
  339. #基礎屬性的計算,添加了被動技能的提升,按默認的先加後乘
  340. def param(param_id)
  341. value = param_base(param_id) + param_plus(param_id) +
  342. state_param_plus(param_id)
  343. value *= param_rate(param_id) * param_buff_rate(param_id) *
  344. state_param_rate(param_id)
  345. [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  346. end
  347.  
  348. #狀態影響的附加屬性xparam
  349. def state_xparam(xparam_id)
  350. states.inject(0.0) do |plu,sta|
  351. plu + SkillLevel.formula(@state_level[sta.id],sta.xparam(xparam_id))
  352. end
  353. end
  354. #附加屬性xparam的計算,命中暴擊什麼的,迭代加算。
  355. def xparam(xparam_id)
  356. state_xparam(xparam_id) + super(xparam_id)
  357. end
  358.  
  359. #狀態影響特殊屬性sparam的計算
  360. def state_sparam(sparam_id)
  361. states.inject(1.0) do |plu,sta|
  362. plu * SkillLevel.formula(@state_level[sta.id],sta.sparam(sparam_id))
  363. end
  364. end
  365. #特殊屬性sparam的計算,經驗值比率什麼的,迭代連乘計算。
  366. def sparam(sparam_id)
  367. super(sparam_id)*state_sparam(sparam_id)
  368. end
  369. def state_element_damage(element_id)
  370. states.inject(1.00) do |plu,sta|
  371. plu * SkillLevel.formula(@state_level[sta.id],sta.element_damage(element_id))
  372. end
  373. end
  374. def element_rate(element_id)
  375. super(element_id) * state_element_rate(element_id)
  376. end
  377. end
  378.  
  379.  
  380.  
  381. class Game_Battler < Game_BattlerBase
  382.  
  383. #attr_reader :state_level
  384. #@state_level 保存狀態等級的數組
  385. alias initialize_201410131453 initialize
  386. def initialize
  387. initialize_201410131453
  388. @state_level = Hash.new(0)
  389. end
  390.  
  391. #屬性修正的計算,將使用者屬性強化也計算在內的
  392. def item_element_rate(user, item)
  393. if item.damage.element_id < 0
  394. user.atk_elements.empty? ? 1.0 : elements_max_rate(user)
  395. else
  396. element_rate(item.damage.element_id)*user.element_damage(item.damage.element_id)
  397. end
  398. end
  399.  
  400. #將使用者屬性強化也計算在內的最有效屬性。
  401. def elements_max_rate(user)
  402. user.atk_elements.inject([0.0]) {|r, i| r.push(element_rate(i)*user.element_damage(i)) }.max
  403. end
  404.  
  405. def damage_convert #受到hp傷害轉移給mp的比例
  406. 0
  407. end
  408.  
  409. #計算傷害,SkillLevel.formula找公式算修正。
  410. def make_damage_value(user, item)
  411. value = item.damage.eval(user, self, $game_variables)
  412. if item.is_a?(RPG::Skill)
  413. #套用在全技能上
  414. if user.armors.include?($data_armors[16]) && user.state?(2) #毒疫耳環效果
  415. user.actor? && user.id == 1 ? value *= 2 : value *= 1#如果是全技能通用只要这两句就可以了 ,其它去掉。
  416. end
  417.  
  418. case item.id
  419. when 901 #吸血I
  420. value = item.magical? ? user.mat * 1.1 - self.mdf : user.atk * 1.1 - self.def ; $game_variables[100] = value * (@result.critical ? user.critical_rate : 1) * (user.atk_elements.empty? ? 1 : elements_max_rate(user)) * 0.1
  421. when 902 #吸血II
  422. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; $game_variables[100] = value * (@result.critical ? user.critical_rate : 1) * (user.atk_elements.empty? ? 1 : elements_max_rate(user)) * 0.15
  423. when 903 #吸血III
  424. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; $game_variables[100] = value * (@result.critical ? user.critical_rate : 1) * (user.atk_elements.empty? ? 1 : elements_max_rate(user)) * 0.2
  425. when 904 #吸血IV
  426. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; $game_variables[100] = value * (@result.critical ? user.critical_rate : 1) * (user.atk_elements.empty? ? 1 : elements_max_rate(user)) * 0.25
  427. when 905 #吸血V
  428. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; $game_variables[100] = value * (@result.critical ? user.critical_rate : 1) * (user.atk_elements.empty? ? 1 : elements_max_rate(user)) * 0.3
  429.  
  430. when 907 #吸魂I
  431. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; $game_variables[100] = value * (@result.critical ? user.critical_rate : 1) * (user.atk_elements.empty? ? 1 : elements_max_rate(user)) * 0.01
  432. when 908 #吸魂II
  433. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; $game_variables[100] = value * (@result.critical ? user.critical_rate : 1) * (user.atk_elements.empty? ? 1 : elements_max_rate(user)) * 0.02
  434. when 909 #吸魂III
  435. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; $game_variables[100] = value * (@result.critical ? user.critical_rate : 1) * (user.atk_elements.empty? ? 1 : elements_max_rate(user)) * 0.03
  436. when 910 #吸魂IV
  437. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; $game_variables[100] = value * (@result.critical ? user.critical_rate : 1) * (user.atk_elements.empty? ? 1 : elements_max_rate(user)) * 0.04
  438. when 911 #吸魂V
  439. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; $game_variables[100] = value * (@result.critical ? user.critical_rate : 1) * (user.atk_elements.empty? ? 1 : elements_max_rate(user)) * 0.05
  440.  
  441. when 913 #連續I
  442. value = item.magical? ? user.mat * 1.1 - self.mdf : user.atk * 1.1 - self.def
  443. when 914 #連續II
  444. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  445. when 915 #連續III
  446. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  447. when 916 #連續IV
  448. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  449. when 917 #連續V
  450. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  451.  
  452. when 919 #憤怒I
  453. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  454. when 920 #憤怒II
  455. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  456. when 921 #憤怒III
  457. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  458. when 922 #憤怒IV
  459. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  460. when 923 #憤怒V
  461. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  462.  
  463. when 925 #累積I
  464. value = item.magical? ? user.mat * 1.1 - self.mdf : user.atk * 1.1 - self.def ; user.add_state(121).to_i
  465. when 926 #累積II
  466. value = item.magical? ? user.mat * 1.1 - self.mdf : user.atk * 1.1 - self.def ; user.add_state(122).to_i
  467. when 927 #累積III
  468. value = item.magical? ? user.mat * 1.1 - self.mdf : user.atk * 1.1 - self.def ; user.add_state(123).to_i
  469. when 928 #累積IV
  470. value = item.magical? ? user.mat * 1.1 - self.mdf : user.atk * 1.1 - self.def ; user.add_state(124).to_i
  471. when 929 #累積V
  472. value = item.magical? ? user.mat * 1.1 - self.mdf : user.atk * 1.1 - self.def ; user.add_state(125).to_i
  473.  
  474. when 931 # 狂暴I
  475. value = item.magical? ? user.mat * 1.2 * (@result.critical ? user.critical_rate : 1) - self.mdf : user.atk * 1.2 * (@result.critical ? user.critical_rate : 1) - self.def
  476. when 932 # 狂暴II
  477. value = item.magical? ? user.mat * 1.2 * (@result.critical ? user.critical_rate : 1) - self.mdf : user.atk * 1.2 * (@result.critical ? user.critical_rate : 1) - self.def
  478. when 933 # 狂暴III
  479. value = item.magical? ? user.mat * 1.2 * (@result.critical ? user.critical_rate : 1) - self.mdf : user.atk * 1.2 * (@result.critical ? user.critical_rate : 1) - self.def
  480. when 934 # 狂暴IV
  481. value = item.magical? ? user.mat * 1.2 * (@result.critical ? user.critical_rate : 1) - self.mdf : user.atk * 1.2 * (@result.critical ? user.critical_rate : 1) - self.def
  482. when 935 # 狂暴V
  483. value = item.magical? ? user.mat * 1.2 * (@result.critical ? user.critical_rate : 1) - self.mdf : user.atk * 1.2 * (@result.critical ? user.critical_rate : 1) - self.def
  484.  
  485. when 937 # 傳染I
  486. value = item.magical? ? user.mat * 1.1 - self.mdf : user.atk * 1.1 - self.def ;
  487. user.state?(2) ? self.add_state(2).to_i && user.remove_state(2).to_i : nil ; user.state?(3) ? self.add_state(3).to_i && user.remove_state(3).to_i : nil ;
  488. user.state?(4) ? self.add_state(4).to_i && user.remove_state(4).to_i : nil ; user.state?(5) ? self.add_state(5).to_i && user.remove_state(5).to_i : nil ;
  489. user.state?(6) ? self.add_state(6).to_i && user.remove_state(6).to_i : nil ; user.state?(7) ? self.add_state(7).to_i && user.remove_state(7).to_i : nil ;
  490. user.state?(8) ? self.add_state(8).to_i && user.remove_state(8).to_i : nil ;
  491. user.state?(16) ? self.add_state(16).to_i && user.remove_state(16).to_i : nil ; user.state?(30) ? self.add_state(30).to_i && user.remove_state(30).to_i : nil ;
  492. user.state?(31) ? self.add_state(31).to_i && user.remove_state(31).to_i : nil ; user.state?(32) ? self.add_state(32).to_i && user.remove_state(32).to_i : nil ;
  493. user.state?(33) ? self.add_state(33).to_i && user.remove_state(33).to_i : nil ; user.state?(34) ? self.add_state(34).to_i && user.remove_state(34).to_i : nil ;
  494. user.state?(35) ? self.add_state(35).to_i && user.remove_state(35).to_i : nil ; user.state?(36) ? self.add_state(36).to_i && user.remove_state(36).to_i : nil ;
  495. user.state?(37) ? self.add_state(37).to_i && user.remove_state(37).to_i : nil ; user.state?(57) ? self.add_state(57).to_i && user.remove_state(57).to_i : nil ;
  496. user.state?(58) ? self.add_state(58).to_i && user.remove_state(58).to_i : nil ; user.state?(59) ? self.add_state(59).to_i && user.remove_state(59).to_i : nil ;
  497. user.state?(60) ? self.add_state(60).to_i && user.remove_state(60).to_i : nil ; user.state?(61) ? self.add_state(61).to_i && user.remove_state(61).to_i : nil ;
  498. user.state?(62) ? self.add_state(62).to_i && user.remove_state(62).to_i : nil ; user.state?(63) ? self.add_state(63).to_i && user.remove_state(63).to_i : nil ;
  499. user.state?(64) ? self.add_state(64).to_i && user.remove_state(64).to_i : nil ; user.state?(65) ? self.add_state(65).to_i && user.remove_state(65).to_i : nil ;
  500. user.state?(66) ? self.add_state(66).to_i && user.remove_state(66).to_i : nil ; user.state?(67) ? self.add_state(67).to_i && user.remove_state(67).to_i : nil ;
  501. user.state?(68) ? self.add_state(68).to_i && user.remove_state(68).to_i : nil ; user.state?(69) ? self.add_state(69).to_i && user.remove_state(69).to_i : nil ;
  502. when 943 # 運氣I
  503. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; rand < 0.05 ? user.tp += 100 : nil
  504. when 944 # 運氣II
  505. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; rand < 0.10 ? user.tp += 100 : nil
  506. when 945 # 運氣III
  507. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; rand < 0.15 ? user.tp += 100 : nil
  508. when 946 # 運氣IV
  509. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; rand < 0.20 ? user.tp += 100 : nil
  510. when 947 # 運氣V
  511. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; rand < 0.25 ? user.tp += 100 : nil
  512.  
  513. when 949 # 擴散I
  514. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  515. when 950 # 擴散II
  516. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  517. when 951 # 擴散III
  518. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  519. when 952 # 擴散IV
  520. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  521. when 953 # 擴散V
  522. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  523.  
  524. when 955 # 代價I
  525. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; user.add_state(101)
  526. when 956 # 代價II
  527. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; user.add_state(102)
  528. when 957 # 代價III
  529. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; user.add_state(103)
  530. when 958 # 代價IV
  531. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; user.add_state(104)
  532. when 959 # 代價V
  533. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; user.add_state(105)
  534.  
  535. when 961 # 付出I
  536. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; user.add_state(106)
  537. when 962 # 付出II
  538. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; user.add_state(107)
  539. when 963 # 付出III
  540. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; user.add_state(108)
  541. when 964 # 付出IV
  542. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; user.add_state(109)
  543. when 965 # 付出V
  544. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; user.add_state(110)
  545.  
  546. when 967 # 鏽蝕I
  547. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; self.add_state(111)
  548. when 968 # 鏽蝕II
  549. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; self.add_state(112)
  550. when 969 # 鏽蝕III
  551. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; self.add_state(113)
  552. when 970 # 鏽蝕IV
  553. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; self.add_state(114)
  554. when 971 # 鏽蝕V
  555. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; self.add_state(115)
  556.  
  557. when 973 # 侵蝕I
  558. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; self.add_state(116)
  559. when 974 # 侵蝕II
  560. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; self.add_state(117)
  561. when 975 # 侵蝕III
  562. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; self.add_state(118)
  563. when 976 # 侵蝕IV
  564. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; self.add_state(119)
  565. when 977 # 侵蝕V
  566. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def ; self.add_state(120)
  567.  
  568. when 979 # 削減I
  569. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  570. when 980 # 削減II
  571. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  572. when 981 # 削減III
  573. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  574. when 982 # 削減IV
  575. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  576. when 983 # 削減V
  577. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  578.  
  579. when 985 # 幸運I
  580. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  581. when 986 # 幸運II
  582. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  583. when 987 # 幸運III
  584. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  585. when 988 # 幸運IV
  586. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  587. when 989 # 幸運V
  588. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  589. when 990 # 幸運效果
  590. value = user.weapons.include?($data_weapons[137]) || user.weapons.include?($data_weapons[138]) ||
  591. user.weapons.include?($data_weapons[139]) || user.weapons.include?($data_weapons[140]) || user.weapons.include?($data_weapons[141]) ? 77 : 0
  592. when 991 # 竊盜I
  593. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  594. when 992 # 竊盜I
  595. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  596. when 993 # 竊盜I
  597. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  598. when 994 # 竊盜I
  599. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  600. when 995 # 竊盜I
  601. value = item.magical? ? user.mat * 1.2 - self.mdf : user.atk * 1.2 - self.def
  602.  
  603. end
  604. value *= SkillLevel.formula(user.skill_level(item.id),item.damage_increase_type)
  605. end
  606. value *= item_element_rate(user, item)
  607. value *= pdr if item.physical?
  608. value *= mdr if item.magical?
  609. value *= rec if item.damage.recover?
  610. value = apply_critical(value,user) if @result.critical
  611. value = apply_variance(value, item.damage.variance)
  612. value = apply_guard(value)
  613.  
  614. if value > 0 && damage_convert > 0
  615. valmp = [(value*damage_convert).to_i,self.mp].min
  616. self.mp -= valmp
  617. value -= valmp
  618. end
  619. @result.make_damage(value.to_i, item)
  620. end
  621.  
  622. #計算暴擊修正,添加了參數user
  623. def apply_critical(value,user)
  624. value * user.critical_rate
  625. end
  626.  
  627. #基礎暴擊修正
  628. def critical_rate
  629. 2
  630. end
  631.  
  632. #狀態附加,添加參數user,寫的有點奇怪。如果有明確的user,
  633. #就提取技能等級user.skill_level($data_states[state_id].link_skill)
  634. #然後按SkillLevel.formula公式算得到附加概率,如果隨機數比概率大(算是失敗)
  635. #就直接返回,再下去按部就班如果沒有狀態就附加新狀態,如果有明確的user,
  636. #狀態的等級就等於之前提取的技能等級,否則為1。
  637. def add_state(state_id,user = nil)
  638. if state_addable?(state_id)
  639. if user != nil
  640. lv = user.skill_level($data_states[state_id].link_skill)
  641. else
  642. lv = 1
  643. end
  644. return if rand > SkillLevel.formula(lv,$data_states[state_id].chance)
  645. add_new_state(state_id) unless state?(state_id)
  646. # LCTSENG: 狀態疊加
  647. if $data_states[state_id].accumulate_ok?
  648. if @state_accumulate.nil?
  649. @state_accumulate = {}
  650. end
  651. if @state_accumulate[state_id].nil?
  652. @state_accumulate[state_id] = 1
  653. else
  654. @state_accumulate[state_id] += 1
  655. end
  656. # Max test
  657. max_accu = $data_states[state_id].accumulate_max
  658. @state_accumulate[state_id] = [@state_accumulate[state_id], max_accu].min if max_accu > 0
  659. end
  660. # Others
  661. if user != nil
  662. @state_level[state_id] = lv
  663. else
  664. @state_level[state_id] = 1
  665. end
  666. reset_state_counts(state_id)
  667. @result.added_states.push(state_id).uniq!
  668. end
  669. end
  670.  
  671. def item_effect_add_state_attack(user, item, effect)
  672. user.atk_states.each do |state_id|
  673. chance = effect.value1
  674. chance *= state_rate(state_id)
  675. chance *= user.atk_states_rate(state_id)
  676. chance *= luk_effect_rate(user)
  677. if rand < chance
  678. add_state(state_id,user)
  679. @result.success = true
  680. end
  681. end
  682. end
  683.  
  684. def item_effect_add_state_normal(user, item, effect)
  685. chance = effect.value1
  686. chance *= state_rate(effect.data_id) if opposite?(user)
  687. chance *= luk_effect_rate(user) if opposite?(user)
  688. if rand < chance
  689. add_state(effect.data_id,user)
  690. @result.success = true
  691. end
  692. end
  693. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement