Project1

标题: 人物加點和技能加點的衝突 [打印本页]

作者: liu5417    时间: 2016-12-3 18:40
标题: 人物加點和技能加點的衝突
本帖最后由 liu5417 于 2016-12-3 23:17 编辑

人物加點導致技能加點的被動技部份無效, 該怎麼解決呢?

人物加點本身沒問題, 置於技能加點腳本之下(放上面會有問題)

技能不可使用 =  被動技 (沒效果)

技能可使用 = 主動技 (沒問題)

附上範例

Project5.rar (322.02 KB, 下载次数: 58)





技能加點
RUBY 代码复制
  1. #encoding:utf-8
  2. #===========================================================================
  3. #          RMVA 豪華型技能加點|技能被動效果:   v1.05
  4. #                       By希憶 66rpg.com
  5. #                                                 轉載或修改請保留此類信息
  6. #===========================================================================
  7. #     升級獲得技能點用以學習和提升技能等級,增加技能威力和技能被動效果強度。
  8. #     狀態也可以與技能等級綁定,並根據等級不同獲得不同程度的加成效果[類dnf]
  9. #
  10. #     技能的備註:
  11. #     使用場合為"無法使用" 的技能均默認為被動技能,不在戰鬥時出現。
  12. #------------------------------------------------------------------------------------------------------------------------------------
  13. #     <param_add 0,11>
  14. #         0: 被動提升的屬性編號『0:mhp 1:mmp 2:atk 3:def 4:mat 5:mdf 6:agi 7:luk』
  15. #        11:提升量的計算公式編號,在模塊SkillLevel的self.formula方法中定義
  16. #           可根據需要擴展 when 8 when 9 什麼的
  17. #           這個是按加法提升。和下面那個一起寫就是先加後乘。
  18.  
  19. #     <param_rate 0,31>
  20. #         0:被動提升的屬性編號『0:mhp 1:mmp 2:atk 3:def 4:mat 5:mdf 6:agi 7:luk』
  21. #        31:提升量的計算公式編號,在模塊SkillLevel的self.formula方法中定義
  22. #           這個是按乘法提升。
  23.  
  24. #     <xparam 0,21>
  25. #         0:被動提升的屬性編號『0:物理命中 1:物理閃避 2:必殺機率 3:必殺閃避
  26. #               4:魔法閃避 5:魔法反射 6:物理反擊 7:體力再生8:魔力再生 9:TP再生 』
  27. #        21:提升量的計算公式編號,在模塊SkillLevel的self.formula方法中定義
  28. #           這個是按加法提升。
  29.  
  30. #     <sparam 0,31>
  31. #         0:被動提升的屬性編號『0:受擊幾率 1:防禦比率 2:恢復效果 3:藥理知識
  32. #                4:魔力消耗 5:特技補充 6:所受物理傷害 7:所受魔法傷害  8:地形傷害 9:獲得經驗值比率 』                           
  33. #        31:提升量的計算公式編號,在模塊SkillLevel的self.formula方法中定義
  34. #           這個是按乘法提升。
  35. #------------------------------------------------------------------------------------------------------------------------------------
  36. #     <critical_rate 33>
  37. #        33:被動技能提升暴擊傷害的公式,在模塊SkillLevel的self.formula方法中定義
  38. #            按照乘法疊加提升【每個角色職業都有默認的初始值為1.5】
  39. #------------------------------------------------------------------------------------------------------------------------------------
  40. #     <element_rate 3,31>
  41. #         3:被動技能屬性修正的屬性id
  42. #        31:被動技能屬性修正的公式,模塊SkillLevel的self.formula方法中定義
  43. #            按照乘法疊加減少或增加。
  44.  
  45. #     <element_damage 3,31>
  46. #        31:被動技能提升屬性傷害的公式,提升屬性傷害(就是屬性強化啦)
  47. #            模塊SkillLevel的self.formula方法中定義
  48. #            按照乘法疊加減少或增加。
  49. #------------------------------------------------------------------------------------------------------------------------------------
  50. #     <mp_type 111>
  51. #       111:主動技能的使用時的mp消耗隨著等級變化的公式編號,
  52. #            在模塊SkillLevel的self.formula方法中定義
  53.  
  54. #     <damage_convert 51>
  55. #        被動獲得hp傷害一部分轉移給mp的效果,同時有兩個以上這種技能或狀態則取最大
  56. #        51:在模塊SkillLevel的self.formula方法中定義的計算轉換比率的公式編號
  57.  
  58. #     <sp_cost 5>        
  59. #        學習升級一級此技能需要5sp
  60.  
  61. #     <max_learn 10>
  62. #        技能等級學習上限10級(加點的等級上限)
  63. #        在技能加點欄中技能的基礎等級只能加到10,
  64. #        但是可以通過裝備加技能的裝備來提升到11,12以上
  65.  
  66. #     <max_level 15>
  67. #        技能等級堆積上限15級(包括了裝備增加的堆積上限),
  68. #        就是說你裝備了一堆加技能等級的裝備,但這個技能到了15級就沒法再加上去。
  69.  
  70. #     <type 2>
  71. #        主動技能的技能威力成長類型為第二種(平均增長型)也可以在模塊中自己定義
  72. #        增長類型 self.formula 方法中添加 when 4 when 5 什麼的,然後寫一通公式
  73. #        這裡當然是乘法計算了
  74.  
  75. #     <learn 10,4>  
  76. #        從10級開始可以學習1級技能,14級可以學到2級,18級可學3級技能
  77. #------------------------------------------------------------------------------------------------------------------------------------
  78. #       前置技能的設置:『學習該技能需要先學習其它的技能到若干級』
  79. #     <former 31,5>  <former 33,1>
  80. #       需要等級5的31號技能和等級1的33號技能作為前置技能
  81. #       前置一行只能設一個,同時設多個請迴車換行
  82. #       前置技能可設可不設,同時設,無上限,搞出個複雜技能樹愉快地玩耍吧
  83. #------------------------------------------------------------------------------------------------------------------------------------
  84. #     <link_skill 24>
  85. #        這個技能鏈接上24號技能,此技能的技能等級將強制等於24號技能的技能等級
  86. #       (無視其它限制,裝備增強無效)
  87. #        小心別連著連著連成循環了,這是給一些特殊的“馬甲技能-實效技能”對應用的。
  88. #        一般情況下別用。
  89.  
  90. #      <lock_level 4>
  91. #         這個技能的技能等級將強制等於4,優先度高於link_skill
  92. #         主要用於裝備附帶的技能等特殊情況下的技能
  93. #         還有敵方使用的技能,如果需要不為1的話可以這樣設置。
  94.  
  95. #===========================================================================
  96. #     狀態的備註:
  97.  
  98. #     <param_add 0,11>
  99. #     <param_rate 0,31>
  100. #     <xparam 0,21>
  101. #     <sparam 0,31>
  102. #     <critical_rate 33>
  103. #     <element_rate 3,31>
  104. #     <element_damage 3,31>
  105. #     <damage_convert 51>
  106. #     同技能,只不過是變成狀態附加時生效並和狀態等級相關
  107.  
  108. #     <link_skill 122>如果狀態有明確的來源的話狀態的等級將等於來源的122號技能的等級。
  109.  
  110. #     <chance 43>主要用於debuff,額外的附加幾率修正的公式編號,老規矩
  111.  
  112. #===========================================================================
  113. #     裝備的備註:
  114. #     <add_skill 10,3>    10號技能等級+3
  115.  
  116. #    (以下下備註條目也可以備註在角色,職業上,可以為負數(只有以下兩個可以))
  117. #     <critical_rate 10>   必殺傷害 +10%  
  118. #       多個裝備將和職業,角色基礎等乘法疊加
  119. #       基礎暴擊傷害為1.5倍,提升10%就是1.65倍。
  120. #     <element_damage 3,30> 裝備者對敵人使用3號屬性(炎屬性)的攻擊造成的傷害+30%
  121.  
  122. #===========================================================================
  123. #     職業的備註:
  124. #     <auto_sp>  自動升級技能的職業【不設sp,啥技能都無視前置隨著等級能有多高就多高】
  125. #
  126. #===========================================================================

RUBY 代码复制
  1. #encoding:utf-8
  2. #===========================================================================
  3. #          RMVA 豪华型技能加点|技能被动效果:         v1.05
  4. #                       By希忆 66rpg.com
  5. #                                                 转载或修改请保留此类信息
  6. #===========================================================================
  7. # 模块的设定和被动技能等的实现
  8. #
  9. # 完工??
  10. #===========================================================================
  11. module SkillLevel
  12.  
  13.   MENUNAME   = "技能书"                       #菜单栏名称
  14.  
  15.   INITIALSP  = 40                             #初始技能点(lv1时的SP点)
  16.   LEVELUPSP  = 30                             #每升一级所获得的技能点
  17.  
  18.   RESETITEM = 23                             #洗点水的物品编号
  19.                                               #洗点水要求目标单个队友,仅菜单可用
  20.  
  21.   def self.formula(level,type)
  22.     case type
  23.   #=========================================================================
  24.   #  这里设定各种乱七八糟的公式,技能威力的成长公式和被动技能属性增加的公式都可以
  25.   #  在这里设定,不过由于计算方式的不同,需要注意别设定错了,数据库里诸如
  26.   #  <param_add 0,11> <type 1> 等都会根据编号(这里分别是11、1)跳转到对应的
  27.   #  when 进行计算,你也可以自己添加分歧,when 65536 什么的。
  28.   #  注意,看清分清乘算加算哦。我写了简单的几个例子。
  29.   #=========================================================================
  30.     when 111
  31.       return 1.00+0.2*level
  32.              #这里写的是默认的技能mp消耗随着等级增加而变化的公式(当然也可以自己写)
  33.     when 0      
  34.       return 0     #加法结算的默认
  35.     when -1
  36.       return 1     #乘法结算的默认
  37.     when 1
  38.       return 1.1**(level-1)                     
  39.                       #可怕的晚成后期神技能  lv5:1.46 lv10:2.358 lv15:3.7975
  40.     when 2
  41.       return 1.00 + 0.15*(level-1)               
  42.                       #普通的平均增长型技能  lv5:1.60 lv10:2.350 lv15:3.1000
  43.     when 3
  44.       return 1.00 + 3.5*(level-1)/(13.7+level)   
  45.                       #早熟的后期低成长技能  lv5:1.75 lv10:2.329 lv15:2.7073
  46.     when 4
  47.       return 1.00 + 0.2*(level-1)   
  48.  
  49.     when 11
  50.       return 20*level                           
  51.       #比较适用于param_add,
  52.       # <param_add 1,11> 每升一级技能等级,MP上限+20
  53.     when 12
  54.       return 4*level
  55.     when 13
  56.       return 3*level
  57.  
  58.     when 21
  59.       return 0.01*level                          
  60.       #比较适用于xparam
  61.       # <xparam 2,21>   每升一级技能等级,必杀机率+1%
  62.     when 22
  63.       return 0.05+0.03*level  
  64.  
  65.     when 23
  66.       return 0 if level == 0
  67.       return 0.005*(level+1)
  68.  
  69.     when 24
  70.       return 0.024*level
  71.  
  72.     when 31
  73.       return 1+0.01*level                        
  74.       #比较适用于param_rate或sparam
  75.       # <param_rate 0,31> 每升一级技能等级,maxhp+1%
  76.       # <sparam :9,31>      每升一级技能等级,所得经验值+1%
  77.     when 32
  78.       return 1-0.01*level   
  79.     when 33
  80.       return 1+0.04*level
  81.     when 34
  82.       return 1-0.02*level
  83.     when 41
  84.       return 0.02*level
  85.     when 43
  86.       return 0 if level == 0
  87.       return 0.07+0.03*level
  88.     when 51
  89.       return 0 if level == 0
  90.       return [1,0.06+level*0.04].min
  91.     when 52
  92.       return level*0.05
  93.     end
  94.  
  95.     return 1                                   
  96.  
  97.   end
  98.  
  99. end
  100.  
  101.  
  102. #有关技能的各种正则匹配,注意未匹配时的返回值
  103. class RPG::Skill < RPG::UsableItem
  104.  
  105.   def sp_cost
  106.     return 0 if auto_levelup
  107.     @note =~ /\<(?:sp_cost) (\d+)\>/ ? $1.to_i : 0
  108.   end
  109.  
  110.   def mp_type
  111.     @note =~ /\<(?:mp_type) (\d+)\>/ ? $1.to_i : 111
  112.   end
  113.  
  114.   def max_learn
  115.     @note =~ /\<(?:max_learn) (\d+)\>/ ? $1.to_i : 0
  116.   end
  117.  
  118.   def max_level
  119.     @note =~ /\<(?:max_level) (\d+)\>/ ? $1.to_i : 1
  120.   end
  121.  
  122.   def damage_increase_type
  123.     @note =~ /\<(?:type) (\d+)\>/ ? $1.to_i : 2
  124.   end
  125.  
  126.   def learn_level
  127.     @note =~ /\<(?:learn) (\d+),(\d+)\>/ ? [$1.to_i,$2.to_i] : [1,1]
  128.   end
  129.  
  130.   def param_add(param_id)
  131.     @note =~ /\<(?:param_add) #{param_id},(\d+)\>/ ? $1.to_i : 0
  132.   end
  133.  
  134.   def param_rate(param_id)
  135.     @note =~ /\<(?:param_rate) #{param_id},(\d+)\>/ ? $1.to_i : -1
  136.   end
  137.  
  138.   def xparam(xp_id)
  139.      @note =~ /\<(?:xparam) #{xp_id},(\d+)\>/ ? $1.to_i : 0
  140.   end
  141.  
  142.   def sparam(sparam_id)
  143.     @note =~ /\<(?:sparam) #{sparam_id},(\d+)\>/ ? $1.to_i : -1
  144.   end
  145.  
  146.   def critical_rate
  147.     @note =~ /\<(?:critical_rate) (\d+)\>/ ? $1.to_i : -1
  148.   end
  149.  
  150.   def element_rate(element_id)
  151.     @note =~ /\<(?:element_rate) #{element_id},(\d+)\>/ ? $1.to_i : -1
  152.   end
  153.  
  154.   def element_damage(element_id)
  155.     @note =~ /\<(?:element_damage) #{element_id},(\d+)\>/ ? $1.to_i : -1
  156.   end
  157.  
  158.   def damage_convert
  159.     @note =~ /\<(?:damage_convert) (\d+)\>/ ? $1.to_i : 0
  160.   end
  161.  
  162.   def link_skill
  163.     @note =~ /\<(?:link_skill) (\d+)\>/ ? $1.to_i : 0
  164.   end
  165.  
  166.   def lock_level
  167.     @note =~ /\<(?:lock_level) (\d+)\>/ ? $1.to_i : 0
  168.   end
  169.  
  170.   def auto_levelup
  171.     @note =~ /\<auto_levelup\>/
  172.   end
  173.  
  174.   def former
  175.     val = []
  176.     insert = false
  177.     @note.each_line do |line|
  178.       case line
  179.       when /\<(?:former[1-9]?) (\d+),(\d+)\>/
  180.         val.push([$1.to_i,$2.to_i])
  181.         insert = true
  182.       end
  183.     end
  184.     insert ? val : [[0,0]]
  185.   end
  186.  
  187.   #是否被动技能的标准,使用场合:无法使用
  188.   def passive
  189.     @occasion == 3
  190.   end
  191.  
  192. end
  193.  
  194. #暴击伤害和属性强化(可以写在数据库的角色备注和职业备注里,也可以写在敌人打到备注里)
  195. class RPG::BaseItem
  196.  
  197.   def critical_rate
  198.     @note =~ /\<(?:critical_rate) (-?[0-9]*)\>/ ? $1.to_i : 0
  199.   end
  200.  
  201.   def element_damage(element_id)
  202.     @note =~ /\<(?:element_rate) #{element_id},(-?[0-9]*)\>/ ? $1.to_i : 0
  203.   end
  204.  
  205. end
  206.  
  207. #装备技能等级+x
  208. class RPG::EquipItem
  209.  
  210.   def add_skill(skill_id)
  211.     @note =~ /\<(?:add_skill) #{skill_id},(\d+)\>/ ? $1.to_i : 0
  212.   end
  213.  
  214. end
  215.  
  216. #自动升级技能
  217. class RPG::Class < RPG::BaseItem
  218.   def auto_sp
  219.     @note =~ /\<auto_sp\>/
  220.   end
  221. end
  222.  
  223.  
  224.  
  225. class RPG::State < RPG::BaseItem
  226.  
  227.   #这里的link_skill是指状态的对应技能,
  228.   #如果状态有明确的技能来源的话状态的等级将等于
  229.   #来源技能使用者的该id技能的等级。
  230.   def link_skill
  231.     @note =~ /\<(?:link_skill) (\d+)\>/ ? $1.to_i : 0
  232.   end
  233.  
  234.   #额外的几率修正的公式
  235.   #老规矩SkillLevel 的 formula
  236.   def chance
  237.     @note =~ /\<(?:chance) (\d+)\>/ ? $1.to_i : -1
  238.   end
  239.  
  240.   #和技能类似
  241.   def param_add(param_id)
  242.     @note =~ /\<(?:param_add) #{param_id},(\d+)\>/ ? $1.to_i : 0
  243.   end
  244.  
  245.   def param_rate(param_id)
  246.     @note =~ /\<(?:param_rate) #{param_id},(\d+)\>/ ? $1.to_i : -1
  247.   end
  248.  
  249.   def xparam(xp_id)
  250.      @note =~ /\<(?:xparam) #{xp_id},(\d+)\>/ ? $1.to_i : 0
  251.   end
  252.  
  253.   def sparam(sparam_id)
  254.     @note =~ /\<(?:sparam) #{sparam_id},(\d+)\>/ ? $1.to_i : -1
  255.   end
  256.  
  257.   def critical_rate
  258.     @note =~ /\<(?:critical_rate) (\d+)\>/ ? $1.to_i : -1
  259.   end
  260.  
  261.   def element_rate(element_id)
  262.     @note =~ /\<(?:element_rate) #{element_id},(\d+)\>/ ? $1.to_i : -1
  263.   end
  264.  
  265.   def element_damage(element_id)
  266.     @note =~ /\<(?:element_damage) #{element_id},(\d+)\>/ ? $1.to_i : -1
  267.   end
  268.  
  269.   def damage_convert
  270.     @note =~ /\<(?:damage_convert) (\d+)\>/ ? $1.to_i : 0
  271.   end
  272.  
  273. end
  274. #正则匹配篇结束
  275. #=======================================================================

RUBY 代码复制
  1. #encoding:utf-8
  2.  
  3. #===========================================================================
  4. #          RMVA 豪华型技能加点|技能被动效果:        v1.05
  5. #                       By希忆 66rpg.com
  6. #                                                 转载或修改请保留此类信息
  7. #===========================================================================
  8. # 在游戏系统类的实现
  9. #
  10. # 完工了,大概
  11. #===========================================================================
  12. #角色类,新增一堆方法。
  13. class Game_Actor < Game_Battler
  14.  
  15.   #初始化角色
  16.   #@skill_level:存放技能等级数据的哈希表,技能id=>技能等级
  17.   #@sp:剩余技能点
  18.   alias setup_201410131453 setup
  19.   def setup(actor_id)
  20.     @skill_level=Hash.new(0)
  21.     setup_201410131453(actor_id)
  22.     @sp = (@level-1) * SkillLevel::LEVELUPSP + SkillLevel::INITIALSP
  23.     auto_skill_levelup if self.class.auto_sp
  24.   end
  25.  
  26.   #读取技能点的方法,如果是自动升级技能的职业,则没必要有技能点
  27.   def sp
  28.     return 0 if self.class.auto_sp
  29.     @sp
  30.   end
  31.  
  32.   #读取技能基础等级,
  33.   #锁定技能等级优先度最高,
  34.   #链接技能等级次之,这个我好像在计算技能最终等级的方法里面又来了一遍。
  35.   #主要是技能基础等级是升级技能的窗口看到的等级,最终等级是使用技能的窗口。
  36.   def skill_basic_level(skill_id)
  37.     return 0 if skill_id == 0
  38.     lock = $data_skills[skill_id].lock_level
  39.     return lock if lock != 0
  40.     lnk = $data_skills[skill_id].link_skill
  41.     return skill_basic_level(lnk) if lnk != 0
  42.     @skill_level[skill_id]
  43.   end
  44.  
  45.   #获取装备增加技能的等级之和
  46.   def skill_plus_level(skill_id)
  47.     self.equips.compact.inject(0){|skl,eqp| skl+eqp.add_skill(skill_id)}
  48.   end
  49.  
  50.   #读取技能最终等级,如果技能基础等级为零,则不加装备提升直接等于零。
  51.   #最后返回基础等级+装备附加与技能最大等级中的小值
  52.   def skill_level(skill_id)
  53.     return 0 if skill_id == 0
  54.     lock = $data_skills[skill_id].lock_level
  55.     return lock if lock != 0
  56.     lnk = $data_skills[skill_id].link_skill
  57.     return skill_level(lnk) if lnk != 0
  58.     return 0 unless @skills.include?(skill_id)
  59.     return 0 if skill_basic_level(skill_id) == 0
  60.     [skill_basic_level(skill_id) + skill_plus_level(skill_id) ,\
  61.     $data_skills[skill_id].max_level].min
  62.   end
  63.  
  64.   #升一级技能技能能升级就升级,返回成功,否则返回失败
  65.   def level_up_skill(skill_id)
  66.     skl = $data_skills[skill_id]
  67.     if skill_can_levelup?(skl)
  68.       @sp -= skl.sp_cost
  69.       @skill_level[skill_id] += 1
  70.       return true
  71.     else
  72.       return false
  73.     end
  74.   end
  75.  
  76.   #初始化角色时初始化技能的方法,
  77.   #这里是不管默认的技能设定直接加载能学到的所有技能,也就是职业列表下的那些。
  78.   def init_skills
  79.     @skills = []
  80.     self.class.learnings.each do |learning|
  81.       @skills.push(learning.skill_id)
  82.     end
  83.     @skills.sort!
  84.   end
  85.  
  86.   #主要用在技能列表的窗口里的。确保只有技能等级为1级及以上的技能才能显示。
  87.   def has_skill?(skill)
  88.     skills.include?(skill) && skill_basic_level(skill.id) > 0
  89.   end
  90.  
  91.   #判断是否学习了技能,同样要确保只有技能等级为1级及以上的技能才能显示。
  92.   #和上面的区别是上面的可以有装备附带,状态附带的技能等级不为0的技能
  93.   #这里只能是职业列表下“领悟”的技能,装备状态附带的都不算
  94.   def skill_learn?(skill)
  95.     skill.is_a?(RPG::Skill) && @skills.include?(skill.id) && skill_basic_level(skill.id) > 0
  96.   end
  97.  
  98.   #判断前置技能是否都满足
  99.   def skill_former_match?(skill)
  100.     skill.former.each do |former|
  101.       return false unless skill_basic_level(former[0]) >= former[1]
  102.     end
  103.     true
  104.   end
  105.  
  106.   #判断技能是否已经学到精通了、
  107.   def skill_max_learn?(skill)
  108.     skill_basic_level(skill.id) == skill.max_learn
  109.   end
  110.  
  111.   #计算学习下一等级的技能所需要的人物等级
  112.   #如果精通了return false【感觉好像有点奇葩。。。】
  113.   def skill_next_level(skill)
  114.     return false if skill_max_learn?(skill)
  115.     skill.learn_level[0] + skill_basic_level(skill.id) * skill.learn_level[1]
  116.   end
  117.  
  118.   #技能能否升级?首先看是否锁定,是否链接,是否精通,
  119.   #再看等级是否符合学习下一级,sp是否足够,前置技能是否满足要求。
  120.   def skill_can_levelup?(skill)
  121.     return false if skill.lock_level != 0
  122.     return false if skill.link_skill != 0
  123.     return false if skill_max_learn?(skill)
  124.     @level >= skill_next_level(skill) && @sp >= skill.sp_cost && skill_former_match?(skill)
  125.   end
  126.  
  127.   #好像没什么用处。。。当初修改的用意是直接设置技能等级,后来觉得不好控制。。。
  128.   #反正就放着吧,不去管它好了
  129.   def learn_skill(skill_id,sk_level=0)
  130.     unless skill_learn?($data_skills[skill_id])
  131.       @skills.push(skill_id)
  132.       @skills.sort!
  133.       @skill_level[skill_id]=sk_level unless @skill_level.has_key?(skill_id)
  134.     end
  135.   end
  136.  
  137.   #自动升级技能。
  138.   def auto_skill_levelup
  139.     @skills.each do |skill|
  140.       skl=$data_skills[skill]
  141.       if self.class.auto_sp
  142.         while skill_next_level(skl) && skill_next_level(skl) <= @level do
  143.           @skill_level[skill] += 1
  144.         end
  145.       elsif skl.auto_levelup
  146.         while level_up_skill(skill) do
  147.         end
  148.       end
  149.     end
  150.   end
  151.  
  152.   #升级时发生的事情,等级+1,sp增加,如果是自动升级技能的职业则自动升级技能
  153.   def level_up
  154.     @level += 1
  155.     @sp += SkillLevel::LEVELUPSP
  156.     auto_skill_levelup
  157.   end
  158.  
  159.   #被动技能提升的基础属性(加法叠加的部分)
  160.   #SkillLevel.formula:带入公式计算。
  161.   def skill_plus(param_id)
  162.     skills.inject(0) do |plu,skl|
  163.       plu + SkillLevel.formula(self.skill_level(skl.id),skl.param_add(param_id))
  164.     end
  165.   end
  166.  
  167.   #被动技能提升的基础属性倍率(乘法叠加)
  168.   def skill_rate(param_id)
  169.     skills.inject(1.00) do |plu,skl|
  170.       plu * SkillLevel.formula(self.skill_level(skl.id),skl.param_rate(param_id))
  171.     end
  172.   end
  173.  
  174.   #被动技能影响的属性抗性(乘法叠加)
  175.   def skill_element_rate(element_id)
  176.     skills.inject(1.00) do |plu,skl|
  177.       plu * SkillLevel.formula(self.skill_level(skl.id),skl.element_rate(element_id))
  178.     end
  179.   end
  180.  
  181.   #状态提升的基础属性(加法叠加的部分)
  182.   def state_param_plus(param_id)
  183.     states.inject(0) do |plu,sta|
  184.       plu + SkillLevel.formula(@state_level[sta.id],sta.param_add(param_id))
  185.     end
  186.   end
  187.   #状态提升的基础属性倍率(乘法叠加)
  188.   def state_param_rate(param_id)
  189.     states.inject(1.00) do |plu,sta|
  190.       plu * SkillLevel.formula(@state_level[sta.id],sta.param_rate(param_id))
  191.     end
  192.   end
  193.   #状态额外影响的属性抗性(乘法叠加)
  194.   def state_element_rate(element_id)
  195.     states.inject(1.00) do |plu,sta|
  196.       plu * SkillLevel.formula(@state_level[sta.id],sta.element_rate(element_id))
  197.     end
  198.   end
  199.  
  200.   #基础属性的计算,添加了被动技能的提升,按默认的先加后乘
  201.   def param(param_id)
  202.     value = param_base(param_id) + param_plus(param_id) +
  203.             skill_plus(param_id) + state_param_plus(param_id)
  204.     value *= param_rate(param_id) * param_buff_rate(param_id) *
  205.              skill_rate(param_id) * state_param_rate(param_id)
  206.     [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  207.   end
  208.  
  209.   #状态影响的附加属性xparam
  210.   def state_xparam(xparam_id)
  211.     states.inject(0.0) do |plu,sta|
  212.       plu + SkillLevel.formula(@state_level[sta.id],sta.xparam(xparam_id))
  213.     end
  214.   end
  215.   #附加属性xparam的计算,命中暴击什么的,迭代加算。
  216.   def xparam(xparam_id)
  217.     state_xparam(xparam_id) + @skills.inject(super(xparam_id)) do |plu,skl|
  218.       plu + SkillLevel.formula(self.skill_level(skl),$data_skills[skl].xparam(xparam_id))
  219.     end
  220.   end
  221.  
  222.   #状态影响特殊属性sparam的计算
  223.   def state_sparam(sparam_id)
  224.     states.inject(1.0) do |plu,sta|
  225.       plu * SkillLevel.formula(@state_level[sta.id],sta.sparam(sparam_id))
  226.     end
  227.   end
  228.   #特殊属性sparam的计算,经验值比率什么的,迭代连乘计算。
  229.   def sparam(sparam_id)
  230.     state_sparam(sparam_id)*skills.inject(super(sparam_id)) do |plu,skl|
  231.       plu * SkillLevel.formula(self.skill_level(skl.id),skl.sparam(sparam_id))
  232.     end
  233.   end
  234.  
  235.   #技能消耗mp由于技能等级修正的倍率,
  236.   #反正就是到SkillLevel.formula找对应编号的公式。
  237.   def skill_mp_rate(skill)
  238.     SkillLevel.formula(skill_level(skill.id),skill.mp_type)
  239.   end
  240.  
  241.   #计算最终技能消耗mp的量
  242.   def skill_mp_cost(skill)
  243.     (skill.mp_cost * mcr * skill_mp_rate(skill)).to_i
  244.   end
  245.  
  246.   #计算暴击伤害倍率super:Game_Battler中的critical_rate,返回1.5
  247.   #人物提升,职业提升,被动技能修正和装备提升
  248.   def critical_rate
  249.     v = super
  250.     v *= (1.0 + self.actor.critical_rate/100.0)
  251.     v *= (1.0 + self.class.critical_rate/100.0)
  252.     v *= skills.inject(1.00) do |plu,skl|
  253.       plu * SkillLevel.formula(self.skill_level(skl.id),skl.critical_rate)
  254.     end
  255.     v*equips.compact.inject(1.00){ |rat,equip| rat*(1.00+equip.critical_rate/100.0) }
  256.   end
  257.  
  258.   #属性伤害修正。
  259.   def element_rate(element_id)
  260.     super(element_id) * skill_element_rate(element_id) * state_element_rate(element_id)
  261.   end
  262.  
  263.   #被动技能影响的属性强化效果。
  264.   def skill_element_damage(element_id)
  265.     skills.inject(1.00) do |plu,skl|
  266.       plu * SkillLevel.formula(self.skill_level(skl.id),skl.element_damage(element_id))
  267.     end
  268.   end
  269.  
  270.   def state_element_damage(element_id)
  271.     states.inject(1.00) do |plu,sta|
  272.       plu * SkillLevel.formula(@state_level[sta.id],sta.element_damage(element_id))
  273.     end
  274.   end
  275.  
  276.   #基础属性强化,角色备注和职业备注修正。
  277.   def basic_element_damage(element_id)
  278.     (1.0 + self.actor.element_damage(element_id)/100.0) *
  279.     (1.0 + self.class.element_damage(element_id)/100.0)
  280.   end
  281.  
  282.   #计算最终属性强化基础技能装备迭代连乘
  283.   def element_damage(element_id)
  284.     basic_element_damage(element_id) *
  285.     equips.compact.inject(skill_element_damage(element_id)) do |rat,equip|
  286.       rat*(1.00+equip.element_damage(element_id)/100.0)
  287.     end
  288.   end
  289.  
  290.   #受到hp伤害转移给mp的比例,遍历计算并返回最大值
  291.   def damage_convert
  292.     skl = skills.collect{|sk| sk = SkillLevel.formula(self.skill_level(sk.id),sk.damage_convert)}
  293.     sta = states.collect{|st| st = SkillLevel.formula(@state_level[st.id],st.damage_convert)}
  294.     (skl+sta).max
  295.   end
  296.  
  297.   #洗技能了,
  298.   alias item_apply_201411181846 item_apply
  299.   def item_apply(user, item)
  300.     item_apply_201411181846(user, item)
  301.     if item.is_a?(RPG::Item) and item.id == SkillLevel::RESETITEM
  302.       if self.reset_skill
  303.         self.hp = [self.hp,self.mhp].min
  304.         self.mp = [self.mp,self.mmp].min
  305.       end
  306.     end
  307.   end
  308.  
  309.   #洗技能的方法
  310.   def reset_skill
  311.     return false if self.class.auto_sp
  312.     @sp = (@level-1) * SkillLevel::LEVELUPSP + SkillLevel::INITIALSP
  313.     @skills.each  { |skill| @skill_level[skill]=0 }
  314.     return true
  315.   end
  316.  
  317. end
  318.  
  319. #有关洗点水的使用判断,想和上面洗点放在一起。于是没有放进场景相关。
  320. class Scene_ItemBase < Scene_MenuBase
  321.   def item_usable?
  322.     if item.id == SkillLevel::RESETITEM
  323.       return false if item_target_actors[0].class.auto_sp
  324.       return true
  325.     end
  326.     user.usable?(item) && item_effects_valid?
  327.   end
  328. end
  329.  
  330. class Game_Enemy
  331.   #敌人属性强化
  332.   def element_damage(id)
  333.     1.0 + self.enemy.element_damage(id)/100.0
  334.   end
  335.   #敌人暴击倍率 super:Game_Battler定义的critical_rate,返回1.5
  336.   def critical_rate
  337.     super * (1+self.enemy.element_damage/100.0)
  338.   end
  339.   #敌人的技能等级,要么锁定,要么1
  340.   def skill_level(skill_id)
  341.     lock = $data_skills[skill_id].lock_level if $data_skills[skill_id]
  342.     return lock if lock != 0
  343.     return 1
  344.   end
  345.     #状态提升的基础属性(加法叠加的部分)
  346.   def state_param_plus(param_id)
  347.     states.inject(0) do |plu,sta|
  348.       plu + SkillLevel.formula(@state_level[sta.id],sta.param_add(param_id))
  349.     end
  350.   end
  351.   #状态提升的基础属性倍率(乘法叠加)
  352.   def state_param_rate(param_id)
  353.     states.inject(1.00) do |plu,sta|
  354.       plu * SkillLevel.formula(@state_level[sta.id],sta.param_rate(param_id))
  355.     end
  356.   end
  357.   #状态额外影响的属性抗性(乘法叠加)
  358.   def state_element_rate(element_id)
  359.     states.inject(1.00) do |plu,sta|
  360.       plu * SkillLevel.formula(@state_level[sta.id],sta.element_rate(element_id))
  361.     end
  362.   end
  363.  
  364.   #基础属性的计算,添加了被动技能的提升,按默认的先加后乘
  365.   def param(param_id)
  366.     value = param_base(param_id) + param_plus(param_id) +
  367.             state_param_plus(param_id)
  368.     value *= param_rate(param_id) * param_buff_rate(param_id) *
  369.              state_param_rate(param_id)
  370.     [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  371.   end
  372.  
  373.   #状态影响的附加属性xparam
  374.   def state_xparam(xparam_id)
  375.     states.inject(0.0) do |plu,sta|
  376.       plu + SkillLevel.formula(@state_level[sta.id],sta.xparam(xparam_id))
  377.     end
  378.   end
  379.   #附加属性xparam的计算,命中暴击什么的,迭代加算。
  380.   def xparam(xparam_id)
  381.     state_xparam(xparam_id) + super(xparam_id)
  382.   end
  383.  
  384.   #状态影响特殊属性sparam的计算
  385.   def state_sparam(sparam_id)
  386.     states.inject(1.0) do |plu,sta|
  387.       plu * SkillLevel.formula(@state_level[sta.id],sta.sparam(sparam_id))
  388.     end
  389.   end
  390.   #特殊属性sparam的计算,经验值比率什么的,迭代连乘计算。
  391.   def sparam(sparam_id)
  392.     super(sparam_id)*state_sparam(sparam_id)
  393.   end
  394.   def state_element_damage(element_id)
  395.     states.inject(1.00) do |plu,sta|
  396.       plu * SkillLevel.formula(@state_level[sta.id],sta.element_damage(element_id))
  397.     end
  398.   end
  399.   def element_rate(element_id)
  400.     super(element_id) * state_element_rate(element_id)
  401.   end
  402. end
  403.  
  404.  
  405.  
  406. class Game_Battler < Game_BattlerBase
  407.  
  408.   #attr_reader :state_level
  409.   #@state_level 保存状态等级的数组
  410.   alias initialize_201410131453 initialize
  411.   def initialize
  412.     initialize_201410131453
  413.     @state_level = Hash.new(0)
  414.   end
  415.  
  416.   #属性修正的计算,将使用者属性强化也计算在内的
  417.   def item_element_rate(user, item)
  418.     if item.damage.element_id < 0
  419.       user.atk_elements.empty? ? 1.0 : elements_max_rate(user)
  420.     else
  421.       element_rate(item.damage.element_id)*user.element_damage(item.damage.element_id)
  422.     end
  423.   end
  424.  
  425.   #将使用者属性强化也计算在内的最有效属性。
  426.   def elements_max_rate(user)
  427.     user.atk_elements.inject([0.0]) {|r, i| r.push(element_rate(i)*user.element_damage(i)) }.max
  428.   end
  429.  
  430.   def damage_convert #受到hp伤害转移给mp的比例
  431.     0
  432.   end
  433.  
  434.   #计算伤害,SkillLevel.formula找公式算修正。
  435.   def make_damage_value(user, item)
  436.     value = item.damage.eval(user, self, $game_variables)
  437.     if item.is_a?(RPG::Skill)
  438.       value *= SkillLevel.formula(user.skill_level(item.id),item.damage_increase_type)
  439.     end
  440.  
  441.     value *= item_element_rate(user, item)
  442.     value *= pdr if item.physical?
  443.     value *= mdr if item.magical?
  444.     value *= rec if item.damage.recover?
  445.     value = apply_critical(value,user) if @result.critical
  446.     value = apply_variance(value, item.damage.variance)
  447.     value = apply_guard(value)
  448.  
  449.     if value > 0 && damage_convert > 0
  450.       valmp = [(value*damage_convert).to_i,self.mp].min
  451.       self.mp -= valmp
  452.       value -= valmp
  453.     end
  454.     @result.make_damage(value.to_i, item)
  455.   end
  456.  
  457.   #计算暴击修正,添加了参数user
  458.   def apply_critical(value,user)
  459.     value * user.critical_rate
  460.   end
  461.  
  462.   #基础暴击修正
  463.   def critical_rate
  464.     1.5
  465.   end
  466.  
  467.   #状态附加,添加参数user,写的有点奇怪。如果有明确的user,
  468.   #就提取技能等级user.skill_level($data_states[state_id].link_skill)
  469.   #然后按SkillLevel.formula公式算得到附加概率,如果随机数比概率大(算是失败)
  470.   #就直接返回,再下去按部就班如果没有状态就附加新状态,如果有明确的user,
  471.   #状态的等级就等于之前提取的技能等级,否则为1。
  472.   def add_state(state_id,user = nil)
  473.     if state_addable?(state_id)
  474.       if user != nil
  475.         lv = user.skill_level($data_states[state_id].link_skill)
  476.       else
  477.         lv = 1
  478.       end
  479.       return if rand > SkillLevel.formula(lv,$data_states[state_id].chance)
  480.       add_new_state(state_id) unless state?(state_id)
  481.       if user != nil
  482.         @state_level[state_id] = lv
  483.       else
  484.         @state_level[state_id] = 1
  485.       end
  486.       reset_state_counts(state_id)
  487.       @result.added_states.push(state_id).uniq!
  488.     end
  489.   end
  490.  
  491.   def item_effect_add_state_attack(user, item, effect)
  492.     user.atk_states.each do |state_id|
  493.       chance = effect.value1
  494.       chance *= state_rate(state_id)
  495.       chance *= user.atk_states_rate(state_id)
  496.       chance *= luk_effect_rate(user)
  497.       if rand < chance
  498.         add_state(state_id,user)
  499.         @result.success = true
  500.       end
  501.     end
  502.   end
  503.  
  504.   def item_effect_add_state_normal(user, item, effect)
  505.     chance = effect.value1
  506.     chance *= state_rate(effect.data_id) if opposite?(user)
  507.     chance *= luk_effect_rate(user)      if opposite?(user)
  508.     if rand < chance
  509.       add_state(effect.data_id,user)
  510.       @result.success = true
  511.     end
  512.   end
  513.  
  514. end

RUBY 代码复制
  1. #encoding:utf-8
  2. #===========================================================================
  3. #          RMVA 豪华型技能加点|技能被动效果:      v1.05
  4. #                       By希忆 66rpg.com
  5. #                                                 转载或修改请保留此类信息
  6. #===========================================================================
  7. # 所有和窗体有关的修改
  8. #
  9. # 大概没问题吧
  10. #===========================================================================
  11.  
  12.  
  13. class Window_BattleSkill < Window_SkillList
  14. # 戰鬥技能視窗顯示
  15.   def include?(item)
  16.     item && !item.passive && item.stype_id == @stype_id && @actor.has_skill?(item)
  17.   end
  18.  
  19. end
  20.  
  21. class Window_SkillList < Window_Selectable
  22. #默認技能視窗顯示
  23.   def include?(item)
  24.     item && item.stype_id == @stype_id && @actor.has_skill?(item)
  25.   end
  26.  
  27.   def draw_item_name(item, x, y, enabled = true, width = 172)
  28.     return unless item
  29.     draw_icon(item.icon_index, x, y, enabled)
  30.     change_color(normal_color, enabled)
  31.     draw_text(x + 24, y, width, line_height, item.name + " Lv." + @actor.skill_level(item.id).to_s)
  32.   end
  33.  
  34. end
  35.  
  36. class Window_AllSkill < Window_Selectable
  37.  
  38.   def initialize(x, y, width, height)
  39.     super
  40.     @actor = nil
  41.     @stype_id = 0
  42.     @data = []
  43.   end
  44.  
  45.   def actor=(actor)
  46.     return if @actor == actor
  47.     @actor = actor
  48.     refresh
  49.     self.oy = 0
  50.   end
  51.  
  52.   def stype_id=(stype_id)
  53.     return if @stype_id == stype_id
  54.     @stype_id = stype_id
  55.     refresh
  56.     self.oy = 0
  57.   end
  58.  
  59.   def col_max
  60.     return 1
  61.   end
  62.  
  63.   def item_max
  64.     @data ? @data.size : 1
  65.   end
  66.  
  67.   def item
  68.     @data && index >= 0 ? @data[index] : nil
  69.   end
  70.  
  71.   def current_item_enabled?
  72.     enable?(@data[index])
  73.   end
  74.  
  75.   def include?(item)
  76.     item && item.stype_id == @stype_id
  77.   end
  78.  
  79.   def enable?(item)
  80.     item != nil && @actor != nil && @actor.skill_can_levelup?(item)
  81.   end
  82.  
  83.   def make_item_list
  84.     @data = @actor ? @actor.skills.select {|skill| include?(skill) } : []
  85.   end
  86.  
  87.   def select_last
  88.     select(@data.index(@actor.last_skill.object) || 0)
  89.   end
  90.  
  91.   def draw_item(index)
  92.     skill = @data[index]
  93.     if skill
  94.       rect = item_rect(index)
  95.       rect.width -= 4
  96.       draw_skill_name(skill, rect.x, rect.y, enable?(skill))
  97.       draw_skill_level(rect, skill)
  98.     end
  99.   end
  100.  
  101.   def draw_skill_name(skill, x, y, enabled = true, width = 172)
  102.     return unless skill
  103.     draw_icon(skill.icon_index, x, y, enabled)
  104.     change_color(normal_color, enabled)
  105.     text = skill.name
  106.     text += "<已精通>" if @actor.skill_max_learn?(skill)
  107.     draw_text(x + 24, y, width, line_height, text)
  108.   end
  109.  
  110.   def draw_skill_level(rect, skill)
  111.     draw_text(rect, @actor.skill_basic_level(skill.id).to_s, 2)
  112.     change_color(system_color, enable?(skill))
  113.     draw_text(rect, "Lv.     ", 2)
  114.   end
  115.  
  116.   def update_help
  117.     @help_window.set_item(item)
  118.   end
  119.  
  120.   def refresh
  121.     make_item_list
  122.     create_contents
  123.     draw_all_items
  124.   end
  125. end
  126.  
  127. class Window_Base < Window
  128.  
  129. #~ draw_text_ex的增强,使其可以自动换行  原作者:叶子 修改:wyongcan
  130.   #--------------------------------------------------------------------------
  131.   # ● 绘制带有控制符的文本内容
  132.   #   如果传递了width参数的话,会自动换行
  133.   #--------------------------------------------------------------------------
  134.   def draw_text_ex(x, y, text, width = nil,textwidth = nil,normalfont = true)
  135.     reset_font_settings if normalfont == true
  136.     text = convert_escape_characters(text)
  137.     pos = {:x => x, :y => y, :new_x => x, :height => calc_line_height(text)}
  138.     if width != nil
  139.       pos[:height] = contents.font.size
  140.       pos[:width] = width
  141.       pos[:textwidth] = textwidth
  142.     end
  143.     process_character(text.slice!(0, 1), text, pos) until text.empty?
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   # ● 文字的处理
  147.   #     c    : 文字
  148.   #     text : 绘制处理中的字符串缓存(字符串可能会被修改)
  149.   #     pos  : 绘制位置 {:x, :y, :new_x, :height}
  150.   #--------------------------------------------------------------------------
  151.   def process_character(c, text, pos)
  152.     case c
  153.     when "\r"   # 回车
  154.       return
  155.     when "\n"   # 换行
  156.       process_new_line(text, pos)
  157.     when "\f"   # 翻页
  158.       process_new_page(text, pos)
  159.     when "\e"   # 控制符
  160.       process_escape_character(obtain_escape_code(text), text, pos)
  161.     else        # 普通文字
  162.       pos[:textwidth] == nil ? text_width = text_size(c).width : text_width = pos[:textwidth]
  163.       if pos[:width] != nil && pos[:x] - pos[:new_x] + text_width > pos[:width]
  164.         process_new_line(text, pos)
  165.       end
  166.       process_normal_character(c, pos)
  167.     end
  168.   end
  169. end
  170.  
  171. class Window_SkillStatus < Window_Base
  172.  
  173.   def initialize(x, y)
  174.     super(x, y, window_width, fitting_height(4))
  175.     @actor = nil
  176.   end
  177.  
  178.   def window_width
  179.     Graphics.width - 160
  180.   end
  181.  
  182.   def actor=(actor)
  183.     return if @actor == actor
  184.     @actor = actor
  185.     refresh
  186.   end
  187.  
  188.   def draw_actor_sp(actor,x,y)
  189.     change_color(system_color)
  190.     draw_text(x, y, 200, line_height, "SP:")
  191.     change_color(normal_color)
  192.     draw_text(x+48, y, 200, line_height, actor.sp)
  193.   end
  194.  
  195.   def refresh
  196.     contents.clear
  197.     return unless @actor
  198.     draw_actor_face(@actor, 0, 0)
  199.     draw_actor_simple_status(@actor, 108, line_height / 2)
  200.     draw_actor_sp(@actor,108,64)
  201.   end
  202. end
  203.  
  204.  
  205.  
  206. class Window_AddHelp < Window_Base
  207.   def initialize(x, y, width, height)
  208.     super
  209.     @skill = nil
  210.     @actor = nil
  211.     refresh
  212.   end
  213.  
  214.   def set_item(skill)
  215.     return if @skill == skill
  216.     @skill = skill
  217.     refresh
  218.   end
  219.  
  220.   def actor=(actor)
  221.     return if @actor == actor
  222.     @actor = actor
  223.     refresh
  224.   end
  225.   def line_width
  226.     Graphics.width/2-standard_padding*2
  227.   end
  228.   def draw_skill_name(skill,x,y)
  229.     draw_icon(skill.icon_index, x, y)
  230.     change_color(normal_color)
  231.     draw_text(x+24, y, line_width, line_height, skill.name)
  232.     if skill.passive
  233.       draw_text(x, y, line_width, line_height, "被動技能",2)
  234.     else
  235.       change_color(mp_cost_color)
  236.       draw_text(x, y, line_width, line_height, "MP "+@actor.skill_mp_cost(skill).to_s,2)
  237.     end
  238.   end
  239.  
  240.   def draw_skill_level(skill,x,y)
  241.     change_color(system_color)
  242.     draw_text(x, y, line_width, line_height,"Level ")
  243.     text =@actor.skill_basic_level(skill.id).to_s + "/"+skill.max_learn.to_s
  244.     change_color(normal_color)
  245.     draw_text(x+60, y, line_width-60, line_height,text)
  246.     draw_text(x, y, line_width, line_height,"升级所需SP: "+skill.sp_cost.to_s,2)
  247.   end
  248.   def draw_next_level(skill,x,y)
  249.     if skill.link_skill != 0
  250.       change_color(knockout_color)
  251.       draw_text(x, y, line_width, line_height,"绑定技能:"+$data_skills[skill.link_skill].name)
  252.       return
  253.     end
  254.     lvl = @actor.skill_next_level(skill)
  255.     if !lvl
  256.       change_color(system_color)
  257.       draw_text(x, y, line_width, line_height,"已精通。")
  258.     else
  259.       if @actor.level >= @actor.skill_next_level(skill)
  260.         change_color(normal_color)
  261.       else
  262.         change_color(crisis_color)
  263.       end
  264.       draw_text(x, y, line_width, line_height,"需要等级: "+lvl.to_s)
  265.     end
  266.   end
  267.   def draw_former_skill(skill,x,y)
  268.     line = 0
  269.     skill.former.each do |former|
  270.       if former[0] != 0
  271.         txt = "需要: " + $data_skills[former[0]].name + "|Lv.#{former[1]}"
  272.         @actor.skill_basic_level(former[0]) >= former[1] ? change_color(system_color) : change_color(crisis_color)
  273.         draw_text(x, y+line*line_height, line_width, line_height,txt)
  274.         line += 1
  275.       end
  276.     end
  277.     line
  278.   end
  279.   def refresh
  280.     contents.clear
  281.     return if @skill == nil or @actor == nil
  282.     draw_skill_name(@skill,0,0)
  283.     draw_skill_level(@skill,0,line_height)
  284.     draw_next_level(@skill,0,line_height*2)
  285.     n = draw_former_skill(@skill,0,line_height*3)
  286.     draw_text_ex(0, line_height*(3+n), @skill.description, line_width)
  287.   end
  288.  
  289. end
  290.  
  291.  
  292.  
  293. #==============================================================================
  294. # ■ Window_AddCommand
  295. #------------------------------------------------------------------------------
  296. #  
  297. #==============================================================================
  298. class Window_AddCommand < Window_Command
  299.  
  300.   def initialize
  301.     super(100, 120)
  302.     self.visible = false
  303.     self.active = false
  304.     @index = 0
  305.   end
  306.   #--------------------------------------------------------------------------
  307.   # ● コマンドリストの作成
  308.   #--------------------------------------------------------------------------
  309.   def make_command_list
  310.     add_command("提升一级",   :add1)
  311.     add_command("提升满",    :addf)
  312.     add_command("取消",    :cancel)
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   # ● 決定ボタンが押されたときの処理
  316.   #--------------------------------------------------------------------------
  317.   def process_ok
  318.     Input.update
  319.     call_ok_handler
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   # ● 按下取消键时的处理
  323.   #--------------------------------------------------------------------------
  324.   def process_cancel
  325.     Input.update
  326.     call_cancel_handler
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # ● 启用窗口
  330.   #--------------------------------------------------------------------------
  331.   def activate
  332.     temp = self.y + self.height - Graphics.height
  333.     if temp > 0
  334.       self.y -= Graphics.height - self.height
  335.     end
  336.     self.active = true
  337.     self
  338.   end
  339. end

RUBY 代码复制
  1. #encoding:utf-8
  2. #===========================================================================
  3. #      RMVA 豪华技能加点|技能被动效果:         v1.05
  4. #                       By希忆 66rpg.com
  5. #                                                 转载或修改请保留此类信息
  6. # 所有和场景相关的修改
  7. # 应该没啥要处理的了。
  8. #===========================================================================
  9. class Scene_AddSkill < Scene_MenuBase
  10.   #--------------------------------------------------------------------------
  11.   # ● 开始处理
  12.   #--------------------------------------------------------------------------
  13.   def start
  14.     super
  15.     create_command_window
  16.     create_status_window
  17.     create_help_window
  18.     create_item_window
  19.     @add_command = Window_AddCommand.new
  20.     @add_command.viewport = @viewport
  21.     @add_command.set_handler(:add1,    method(:command_add1))
  22.     @add_command.set_handler(:addf,    method(:command_addf))
  23.     @add_command.set_handler(:cancel,    method(:command_canc))
  24.   end
  25.   def create_help_window
  26.     wx = Graphics.width/2
  27.     wy = @status_window.height
  28.     wh = Graphics.height - wy
  29.     @help_window = Window_AddHelp.new(wx,wy,wx,wh)
  30.     @help_window.viewport = @viewport
  31.     @help_window.actor = @actor
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   # ● 生成指令窗口
  35.   #--------------------------------------------------------------------------
  36.   def create_command_window
  37.     @command_window = Window_SkillCommand.new(0, 0)
  38.     @command_window.viewport = @viewport
  39.     @command_window.help_window = @help_window
  40.     @command_window.actor = @actor
  41.     @command_window.set_handler(:skill,    method(:command_skill))
  42.     @command_window.set_handler(:cancel,   method(:return_scene))
  43.     @command_window.set_handler(:pagedown, method(:next_actor))
  44.     @command_window.set_handler(:pageup,   method(:prev_actor))
  45.  
  46.   end
  47.  
  48.   def command_add1
  49.     @actor.level_up_skill(@item_window.item.id)
  50.     @item_window.refresh
  51.     @help_window.refresh
  52.     @status_window.refresh
  53.     Sound.play_ok
  54.     @add_command.hide
  55.     @add_command.deactivate
  56.     @item_window.activate
  57.     @item_window.index = @item_index
  58.   end
  59.   def command_addf
  60.     while @actor.level_up_skill(@item_window.item.id)
  61.     end
  62.     @item_window.refresh
  63.     @help_window.refresh
  64.     @status_window.refresh
  65.     Sound.play_ok
  66.     @add_command.hide
  67.     @add_command.deactivate
  68.     @item_window.activate
  69.     @item_window.index = @item_index
  70.   end
  71.   def command_canc
  72.     Sound.play_cancel
  73.     command_skill
  74.   end
  75.  
  76.   def update
  77.     super
  78.     @add_command.y =[120 + @item_window.index * 24,Graphics.height - @add_command.height].min
  79.   end
  80.  
  81.   #--------------------------------------------------------------------------
  82.   # ● 生成状态窗口
  83.   #--------------------------------------------------------------------------
  84.   def create_status_window
  85.     @status_window = Window_SkillStatus.new(@command_window.width, 0)
  86.     @status_window.viewport = @viewport
  87.     @status_window.actor = @actor
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 生成物品窗口
  91.   #--------------------------------------------------------------------------
  92.   def create_item_window
  93.     wx = 0
  94.     wy = @status_window.height
  95.     ww = Graphics.width/2
  96.     wh = Graphics.height - wy
  97.     @item_window = Window_AllSkill.new(wx, wy, ww, wh)
  98.     @item_window.actor = @actor
  99.     @item_window.viewport = @viewport
  100.     @item_window.help_window = @help_window
  101.     @item_window.set_handler(:ok,     method(:on_item_ok))
  102.     @item_window.set_handler(:cancel, method(:on_item_cancel))
  103.     @command_window.skill_window = @item_window
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● 指令“技能”
  107.   #--------------------------------------------------------------------------
  108.   def command_skill
  109.     @add_command.hide
  110.     @add_command.deactivate
  111.     @item_window.activate
  112.     @item_window.select_last
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 物品“确定”
  116.   #--------------------------------------------------------------------------
  117.   def on_item_ok
  118.     @item_index = @item_window.index
  119.     @add_command.show
  120.     @add_command.activate
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● 物品“取消”
  124.   #--------------------------------------------------------------------------
  125.   def on_item_cancel
  126.     @item_window.unselect
  127.     @command_window.activate
  128.   end
  129.  
  130.   #--------------------------------------------------------------------------
  131.   # ● 切换角色
  132.   #--------------------------------------------------------------------------
  133.   def on_actor_change
  134.     @command_window.actor = @actor
  135.     @status_window.actor = @actor
  136.     @item_window.actor = @actor
  137.     @help_window.actor = @actor
  138.     @command_window.activate
  139.   end
  140. end
  141.  
  142.  
  143.  
  144. #===========================================================================
  145. # 向菜单中添加
  146. #===========================================================================
  147.  
  148. class Window_MenuCommand < Window_Command
  149.   alias add_original_commands_201411160131 add_original_commands
  150.   def add_original_commands
  151.     add_original_commands_201411160131
  152.     add_command(SkillLevel::MENUNAME, :addskill, main_commands_enabled)
  153.   end
  154. end
  155.  
  156.  
  157. class Scene_Menu < Scene_MenuBase
  158.   alias create_command_window_201411160131 create_command_window
  159.   def create_command_window
  160.     create_command_window_201411160131
  161.     @command_window.set_handler(:addskill,      method(:command_personal))
  162.   end
  163.   def on_personal_ok
  164.     case @command_window.current_symbol
  165.     when :skill
  166.       SceneManager.call(Scene_Skill)
  167.     when :equip
  168.       SceneManager.call(Scene_Equip)
  169.     when :status
  170.       SceneManager.call(Scene_Status)
  171.     when :addskill
  172.       SceneManager.call(Scene_AddSkill)
  173.     end
  174.   end
  175. end


人物加點
RUBY 代码复制
  1. #encoding:utf-8
  2. #=============================================================================
  3. #-----------RMVA加点系统正常向-v1.03---By:救世小树--------转载请注明出处-------
  4. #=============================================================================
  5.  
  6. module Point_Tree
  7.  
  8.   POINT_KIND     = 6     #设定加点种类
  9.   LEVEL_UP_POINT = 2       #每升一级自由属性点增加数
  10.   RESET_ITEM     = 29      #洗点水编号
  11.  
  12.   #$game_actors[n].point[0]+=x
  13.   #n为角色ID,x为增加的未分配点数
  14.  
  15.   STR_POINT        = ["生命","精神","力量","耐力","敏捷","抗性"]
  16.  
  17.   #分别对应增加       [MHP,MMP,物攻,物防,魔攻,魔防,敏捷,幸运]
  18.   POINT_ADD_PARAM = [
  19.                      [1 ,  0,   0,  0,   0,   0,   0,   0],     #体力
  20.                      [0  , 1,   0,  0,   0,   0,   0,   0],     #精神
  21.                      [0  ,  0,   1,  0,   1,   0,   0,   0],     #力量
  22.                      [0  , 0,   0,  1,   0,   1,   0,   0],     #耐力
  23.                      [0  ,  0,   0,  0,   0,   0,   1,   0],     #灵活
  24.                      [0  ,  0,   0,  0,   0,   0,   0,   1],     #韧性
  25.  
  26.                      [0,0,0,0,0,0,0,0]]
  27.                      #可以按上面的格式添加下去,不过要改POINT_KIND,STR_ALL,不然加了也白加
  28.  
  29.   #分别对应增加       [物理命中,物理闪避,必杀,必杀闪避,魔法闪避,魔法反射,物理反击,HP再生,Mp再生,Tp再生]
  30.   POINT_ADD_XPARAM = [
  31.                       [0 , 0, 0, 0, 0, 0, 0, 5, 0, 0],  #体力
  32.                       [0 , 0, 0, 0, 0, 0, 0, 0, 5, 0],  #精神
  33.                       [0 , 0, 5, 0, 0, 0, 0, 0, 0, 0],  #力量
  34.                       [0 , 0, 0, 0, 0, 0, 0, 0, 0, 5],  #耐力
  35.                       [0 , 5, 0, 0, 0, 0, 0, 0, 0, 0],  #灵活
  36.                       [5 , 0, 0, 0, 0, 0, 0, 0, 0, 0],  #韧性
  37.  
  38.                       [0,0,0,0,0,0,0,0,0,0]]
  39.                      #这里的单位是万分之一数值也就是0.01%,我随便填了下【别嫌小,够大了,有心情你可以算算看平衡性】
  40.  
  41.   #各种名称
  42.  
  43.   ADDPOINT       = "加點"     #菜单中选项
  44.   POINT_NAME     = "Ap"   #未分配点数
  45.  
  46.   XARAM_NAME     = ["命中率","迴避率","爆擊率","必杀闪避","魔法闪避","魔法反射","物理反击","HP再生","Mp再生","Tp再生"]
  47.  
  48.  
  49.   def temp_all
  50.     r = 0
  51.     for i in 0 .. POINT_KIND-1
  52.       r+=$temp_point[i]
  53.     end
  54.     return r
  55.   end
  56.  
  57.   def reset(actor_id)
  58.     for i in 1..6
  59.       $game_actors[actor_id].point[0] += $game_actors[actor_id].point[i]
  60.       $game_actors[actor_id].point[i] =0
  61.     end
  62.   end
  63.  
  64. end
  65.  
  66. $temp_point = []
  67. for i in 0 .. Point_Tree::POINT_KIND-1
  68.   $temp_point.push(0)
  69. end
  70.  
  71. class Game_Actor < Game_Battler
  72.   include Point_Tree
  73.   attr_accessor :point
  74.  
  75.   alias setup_tre setup
  76.   def setup(actor_id)
  77.     @point = []
  78.     for i in 0 .. POINT_KIND
  79.       @point.push(0)
  80.     end
  81.     setup_tre(actor_id)
  82.   end
  83.  
  84.  
  85.  
  86.  
  87.   alias level_up_tre level_up
  88.   def level_up
  89.     level_up_tre
  90.     @hp += mhp
  91.     @mp += mmp
  92.     @point[0] += LEVEL_UP_POINT
  93.   end
  94.  
  95.  
  96.  
  97.   def point_plus(param_id)
  98.     r=0
  99.     for i in 1 .. POINT_KIND
  100.       r+=@point[i]*POINT_ADD_PARAM[i-1][param_id]
  101.     end
  102.     return r
  103.   end
  104.  
  105.   alias point_base_param param
  106.  
  107.   def param(param_id)
  108.     value = param_base(param_id) + param_plus(param_id) + point_plus(param_id)
  109.     value *= param_rate(param_id) * param_buff_rate(param_id)
  110.     [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  111.   end
  112.   def xparam(xparam_id,extra_add = 0)
  113.     xp = super(xparam_id)
  114.     for i in 0 .. POINT_KIND-1
  115.       xp+=(@point[i+1]*POINT_ADD_XPARAM[i][xparam_id]/10000.0)
  116.     end
  117.     return xp
  118.   end
  119.  
  120.   def item_apply(user, item)
  121.     super(user, item)
  122.     if item.id == RESET_ITEM and item.is_a?(RPG::Item)
  123.       reset(@actor_id)
  124.       self.hp = [self.hp,self.mhp].min
  125.       self.mp = [self.mp,self.mmp].min
  126.     end
  127.   end
  128.  
  129. end
  130.  
  131. class Window_Point_Command < Window_Command
  132.  
  133.   include Point_Tree
  134.   #--------------------------------------------------------------------------
  135.   # ● 初始化指令选择位置(类方法)
  136.   #--------------------------------------------------------------------------
  137.   def self.init_command_position
  138.     @@last_command_symbol = nil
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● 初始化对象
  142.   #--------------------------------------------------------------------------
  143.   def initialize(actor)
  144.     @status_window = nil
  145.     @actor = actor
  146.     super(0,0)
  147.     select_last
  148.   end
  149.   def actor=(actor)
  150.     return if @actor == actor
  151.     @actor = actor
  152.     refresh
  153.   end
  154.   def status_window=(status_window)
  155.     return if @status_window == status_window
  156.     @status_window = status_window
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 获取窗口的宽度
  160.   #--------------------------------------------------------------------------
  161.   def window_width
  162.     return 160
  163.   end
  164.   #--------------------------------------------------------------------------
  165.   # ● 获取显示行数
  166.   #--------------------------------------------------------------------------
  167.   def visible_line_number
  168.     item_max
  169.   end
  170.   def get_actor_point(index)
  171.     s = @actor.point[index+1].to_s
  172.     return "("+s+")+"+$temp_point[index].to_s
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ● 生成指令列表
  176.   #--------------------------------------------------------------------------
  177.   def make_command_list
  178.     for i in 0 .. POINT_KIND-1
  179.       add_command(STR_POINT[i]   + get_actor_point(i)  , :point_add  ,add_enabled)
  180.     end
  181.     add_command("确认",  :point_ok)
  182.     add_command("取消",  :point_cancle)
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● 按下确定键时的处理
  186.   #--------------------------------------------------------------------------
  187.   def process_ok
  188.     @@last_command_symbol = current_symbol
  189.     super
  190.   end
  191.   #--------------------------------------------------------------------------
  192.   # ● 返回最后一个选项的位置
  193.   #--------------------------------------------------------------------------
  194.   def select_last
  195.     select_symbol(@@last_command_symbol)
  196.   end
  197.  
  198.   def add_enabled
  199.     temp_all < @actor.point[0]
  200.   end
  201.  
  202.   def update_help
  203.     @help_window.set_text(self.index+1) if @help_window
  204.     @status_window.index = self.index if @status_window
  205.   end
  206. end
  207.  
  208. #帮助窗口
  209. class Window_Point_Help < Window_Base
  210.   include Point_Tree
  211.   def initialize(x,y,w,h)
  212.     super(x, y, w, h)
  213.  
  214.  
  215.   end
  216.   def set_text(id)
  217.     contents.clear
  218.     if id <= POINT_KIND
  219.       text = "\\}提升一点该属性"
  220.     elsif id == POINT_KIND+1
  221.       text = "\\}确认此次加点分配"
  222.     elsif  id == POINT_KIND+2
  223.       text = "\\}取消此次加点分配"
  224.     end
  225.     draw_text_ex(8, 8, text)
  226.   end
  227. end
  228.  
  229.  
  230. #角色状态窗口
  231. class Window_Point_Actor < Window_Base
  232.   include Point_Tree
  233.  
  234.  
  235.   def initialize(actor)
  236.     super(160, 0, Graphics.width - 160, Graphics.height)
  237.     @actor = actor
  238.     @index = 0
  239.     refresh
  240.   end
  241.   def actor=(actor)
  242.     return if @actor == actor
  243.     @actor = actor
  244.     refresh
  245.   end
  246.   def index=(index)
  247.     return if @index == index
  248.     @index = index
  249.     refresh
  250.   end
  251.   def line_height
  252.     return 24
  253.   end
  254.   def refresh
  255.     contents.clear
  256.     contents.font.size = 24
  257.     draw_actor_name(@actor, 100, 0)
  258.     draw_actor_class(@actor, 240, 0)
  259.     draw_actor_face(@actor, 2, 0)
  260.     contents.font.size = 20
  261.     draw_actor_level(@actor, 102,  24)
  262.     draw_actor_point(100,48)
  263.     contents.font.size = 16
  264.     draw_actor_param_point(8,16 * 6)
  265.     draw_actor_xparam_point(8,16 * 14)
  266.   end
  267.   def draw_actor_point(x,y)
  268.     draw_text(x,y,200,line_height,"  未分配"+POINT_NAME + ":" + @actor.point[0].to_s)
  269.     draw_text(x,y+line_height,200,line_height,"此次分配"+POINT_NAME + ":" + temp_all.to_s)
  270.   end
  271.   def draw_actor_param_point(x,y)
  272.     8.times {|i| draw_actor_param_to_s(x,y,i)}
  273.   end
  274.   def draw_actor_xparam_point(x,y)
  275.     10.times {|i| draw_actor_xparam_to_s(x,y,i)}
  276.   end
  277.  
  278.   def draw_actor_param_to_s(x,y,param_id)
  279.     a=0
  280.     for i in 0 .. POINT_KIND-1
  281.       a+=$temp_point[i]*POINT_ADD_PARAM[i][param_id]
  282.     end
  283.     s1 = Vocab::param(param_id)
  284.     s2 = @actor.param(param_id).to_s
  285.     s3 = (@actor.param(param_id)+a).to_s
  286.     if @index < POINT_KIND
  287.       if POINT_ADD_PARAM[@index][param_id]==0
  288.         s4 = ""
  289.       else
  290.         s4 = "+" + POINT_ADD_PARAM[@index][param_id].to_s
  291.       end
  292.     else
  293.       s4 = ""
  294.     end
  295.  
  296.     change_color(system_color)
  297.     draw_text(x,y+16*param_id,100,line_height,s1)
  298.     change_color(normal_color)
  299.     s2+= " →"
  300.     draw_text(x+82,y+16*param_id,120,line_height,s2,2)
  301.     change_color(system_color)
  302.     draw_text(x+150,y+16*param_id,100,line_height,s3,2)
  303.     change_color(normal_color)
  304.     contents.font.size = 14
  305.     draw_text(x+266,y+16*param_id,100,line_height,s4)
  306.     contents.font.size = 16
  307.   end
  308.   def draw_actor_xparam_to_s(x,y,xparam_id)
  309.     a=0.00
  310.     for i in 0 .. POINT_KIND-1
  311.       a+=($temp_point[i]*POINT_ADD_XPARAM[i][xparam_id]/10000.0)
  312.     end
  313.     s1 = XARAM_NAME[xparam_id]
  314.     s2 = sprintf("%02.2f%%",@actor.xparam(xparam_id)*100)
  315.     s3 = sprintf("%02.2f%%",(@actor.xparam(xparam_id) + a)*100)
  316.  
  317.     if @index < POINT_KIND
  318.       if POINT_ADD_XPARAM[@index][xparam_id]==0
  319.         s4=""
  320.       else
  321.         s4 = sprintf("+%02.2f%%",POINT_ADD_XPARAM[@index][xparam_id]/100.0)
  322.       end
  323.     else
  324.       s4 = ""
  325.     end
  326.  
  327.     change_color(system_color)
  328.     draw_text(x,y+16*xparam_id,100,line_height,s1)
  329.     change_color(normal_color)
  330.     s2+= " →"
  331.     draw_text(x+82,y+16*xparam_id,120,line_height,s2,2)
  332.     change_color(system_color)
  333.     draw_text(x+150,y+16*xparam_id,100,line_height,s3,2)
  334.     change_color(normal_color)
  335.     contents.font.size = 14
  336.     draw_text(x+266,y+16*xparam_id,100,line_height,s4)
  337.     contents.font.size = 16
  338.  
  339.  
  340.   end
  341. end
  342.  
  343. class Scene_Point < Scene_Base
  344.   include Point_Tree
  345.   def start
  346.     super
  347.     create_background
  348.     @actor = $game_party.menu_actor
  349.     create_command_window
  350.     create_status_window
  351.     create_help_window
  352.     @command_window.activate
  353.   end
  354.   def terminate
  355.     super
  356.     dispose_background
  357.   end
  358.   def create_background
  359.     @background_sprite = Sprite.new
  360.     @background_sprite.bitmap = SceneManager.background_bitmap
  361.     @background_sprite.color.set(16, 16, 16, 128)
  362.   end
  363.   def dispose_background
  364.     @background_sprite.dispose
  365.   end
  366.  
  367.   def create_command_window
  368.     @command_window = Window_Point_Command.new(@actor)
  369.     @command_window.set_handler(:cancel,      method(:return_scene))
  370.     @command_window.set_handler(:pagedown,    method(:next_actor))
  371.     @command_window.set_handler(:pageup,      method(:prev_actor))
  372.     @command_window.set_handler(:point_add,   method(:add_point))
  373.     @command_window.set_handler(:point_ok,    method(:add_ok))
  374.     @command_window.set_handler(:point_cancle,method(:add_cancle))
  375.  
  376.   end
  377.   def return_scene
  378.     add_cancle
  379.     SceneManager.return
  380.   end
  381.   def create_status_window
  382.     @status_window = Window_Point_Actor.new(@actor)
  383.     @command_window.status_window = @status_window
  384.   end
  385.   def create_help_window
  386.     @help_window = Window_Point_Help.new(0,@command_window.height,160,[email]Graphics.height-@command_window.height[/email])
  387.     #(0, 216, 160, 200)
  388.     @help_window.viewport = @viewport
  389.     @command_window.help_window = @help_window
  390.   end
  391.  
  392.   def add_point
  393.     if temp_all >= @actor.point[0]
  394.       @command_window.activate
  395.       return
  396.     end
  397.     $temp_point[@command_window.index] += 1
  398.     @status_window.refresh
  399.     @command_window.refresh
  400.     @command_window.activate
  401.   end
  402.  
  403.  
  404.   def add_ok
  405.     for i in 0 .. POINT_KIND-1
  406.       @actor.point[i+1] += $temp_point[i]
  407.     end
  408.     @actor.point[0]-= temp_all
  409.     add_cancle
  410.   end
  411.  
  412.   def add_cancle
  413.     for i in 0 .. POINT_KIND-1
  414.       $temp_point[i]=0
  415.     end
  416.     @status_window.refresh
  417.     @command_window.refresh
  418.     @command_window.activate
  419.   end
  420.  
  421.  
  422.   def next_actor
  423.     @actor = $game_party.menu_actor_next
  424.     on_actor_change
  425.   end
  426.   #--------------------------------------------------------------------------
  427.   # ● 切换到上一个角色
  428.   #--------------------------------------------------------------------------
  429.   def prev_actor
  430.     @actor = $game_party.menu_actor_prev
  431.     on_actor_change
  432.   end
  433.   #--------------------------------------------------------------------------
  434.   # ● 切换角色
  435.   #--------------------------------------------------------------------------
  436.   def on_actor_change
  437.     add_cancle
  438.     @status_window.actor = @actor
  439.     @command_window.actor = @actor
  440.     @command_window.activate
  441.   end
  442.  
  443. end
  444.  
  445. class Window_MenuCommand < Window_Command
  446.   alias add_original_commands_old add_original_commands
  447.   def add_original_commands
  448.     add_original_commands_old
  449.     add_command(Point_Tree::ADDPOINT,    :addpoint)
  450.   end
  451. end
  452.  
  453. class Scene_Menu < Scene_MenuBase
  454.   alias create_command_window_old create_command_window
  455.   def create_command_window
  456.     create_command_window_old
  457.     @command_window.set_handler(:addpoint,method(:add_point))
  458.   end
  459.   def add_point
  460.     @status_window.select_last
  461.     @status_window.activate
  462.     @status_window.set_handler(:ok,     method(:on_ok))
  463.     @status_window.set_handler(:cancel, method(:on_personal_cancel))
  464.   end
  465.   def on_ok
  466.     SceneManager.call(Scene_Point)
  467.     Window_Point_Command::init_command_position
  468.   end
  469. end
  470.  
  471.  
  472.  
  473. class Scene_ItemBase < Scene_MenuBase
  474.   def item_usable?
  475.     if item.id == Point_Tree::RESET_ITEM and item.is_a?(RPG::Item)
  476.       return true
  477.     end
  478.     user.usable?(item) && item_effects_valid?
  479.   end
  480. end
  481.  
  482.  
  483.  
  484.  
  485. #===============================================================
  486. #顯示在介面上
  487. #===============================================================
  488. =begin
  489. class Window_Status < Window_Selectable
  490.   include Point_Tree
  491.   alias draw_parameters_old draw_parameters
  492.   def draw_parameters(x, y)
  493.     draw_parameters_old(x,y)
  494.     draw_point(x,y)
  495.   end
  496.   def draw_point(x,y)
  497.     for i in 0..5
  498.       change_color(system_color)
  499.       draw_text(x+100, y+ line_height * i, 80, line_height, STR_POINT[i])
  500.       change_color(normal_color)
  501.       draw_text(x+180, y+ line_height * i, 36, line_height,@actor.point[i+1].to_s, 2)
  502.     end
  503.   end
  504.  
  505. end
  506.  
  507. class Window_Base < Window
  508.   def draw_actor_param(actor, x, y, param_id)
  509.     change_color(system_color)
  510.     draw_text(x-30, y, 80, line_height, Vocab::param(param_id))
  511.     change_color(normal_color)
  512.     draw_text(x+ 50, y, 36, line_height, actor.param(param_id), 2)
  513.   end
  514. end
  515. =end





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