Project1

标题: 需要一个有对应武器才能使用技能的脚本。 [打印本页]

作者: wingtang5    时间: 2010-7-28 08:16
标题: 需要一个有对应武器才能使用技能的脚本。
请教,需要一个有对应武器才能使用技能的脚本。

不需要太华丽,中文日文皆可。

反过来不行= =、我知道有一个有对应物品才能用技能的脚本,可惜我是脚本盲。
作者: 仲秋启明    时间: 2010-7-28 10:39
  1. 使用方法就是在防具的注解里添加 *ARMORSKILL[技能ID|技能ID|……]



  2. #==============================================================================
  3. # ★ LY0_Costants
  4. #------------------------------------------------------------------------------
  5. #  独自的定数的定义
  6. #==============================================================================
  7. #------------------------------------------------------------------------------
  8. # ◆ 基本設定
  9. #------------------------------------------------------------------------------
  10. # 装备技能(识別用文字列 + [技能 ID|技能 ID|...]) ※ 最大数 4
  11. LY0_ARMOR_SKILL_SIGNATURE = "*ARMORSKILL"

  12. #==============================================================================
  13. # ★ LY0_Module
  14. #------------------------------------------------------------------------------
  15. #  独自的机能添加
  16. #==============================================================================
  17. module LY0
  18. #--------------------------------------------------------------------------
  19. # ☆ 属性道具取得
  20. # id : 属性 ID
  21. #--------------------------------------------------------------------------
  22. def self.element_icon(id)
  23. return LY0_ELEMENT_ICON[id - 1]
  24. end
  25. #--------------------------------------------------------------------------
  26. # ☆ 防具技能的附加
  27. # item : 防具号
  28. #--------------------------------------------------------------------------
  29. def self.armor_skill(item)
  30. result = []
  31. if item.is_a?(RPG::Armor)
  32. sig = LY0_ARMOR_SKILL_SIGNATURE
  33. reg = /#{Regexp.quote sig}\[((\d+\|?)+)\]/
  34. if item.note.scan(reg).to_a[0]
  35. r = $~[0].gsub(/#{Regexp.quote sig}\[/, "").gsub(/\]/, "")
  36. for s in r.split(/\s*\|\s*/)
  37. skill = $data_skills[s.to_i]
  38. result.push(skill) if skill.is_a?(RPG::Skill)
  39. end
  40. end
  41. end
  42. return result
  43. end
  44. end

  45. class Game_Actor
  46. alias _ly0sys_skill_can_use? skill_can_use?
  47. #--------------------------------------------------------------------------
  48. # ☆ 技能配列取得
  49. #--------------------------------------------------------------------------
  50. def armor_skills
  51. result = []
  52. for armor in self.armors
  53. for skill in LY0::armor_skill(armor)
  54. result.push(skill)
  55. end
  56. end
  57. return result
  58. end
  59. #--------------------------------------------------------------------------
  60. # ○ 技能使用可能判定 (再定義)
  61. # skill : 技能
  62. #--------------------------------------------------------------------------
  63. def skill_can_use?(skill)
  64. # 防具
  65. for a_skill in armor_skills
  66. return super if a_skill.id == skill.id
  67. end
  68. return _ly0sys_skill_can_use?(skill)
  69. end
  70. end
  71. #==============================================================================
  72. # ★ LY0_Window
  73. #------------------------------------------------------------------------------
  74. #==============================================================================
  75. class Window_Base
  76. #--------------------------------------------------------------------------
  77. # ☆ システムメッセージの下地を描画
  78. #--------------------------------------------------------------------------
  79. def draw_system_base
  80. self.opacity = 0
  81. rect = Rect.new(0, 0, contents.width, self.contents.height)
  82. self.contents.fill_rect(rect, system_color)
  83. rect = Rect.new(2, 2, contents.width - 4, self.contents.height - 4)
  84. color = Color.new(24, 8, 4)
  85. self.contents.fill_rect(rect, color)
  86. end

  87. end
  88. #==============================================================================
  89. # ■ Window_Skill
  90. #------------------------------------------------------------------------------
  91. #  特技画面中、显示可以使用的特技浏览的窗口
  92. #==============================================================================
  93. class Window_Skill
  94. #--------------------------------------------------------------------------
  95. # ● 刷新
  96. #--------------------------------------------------------------------------
  97. def refresh
  98. temp = []
  99. for skill in @actor.skills
  100. next if $game_temp.in_battle and not skill.battle_ok?
  101. temp.push(skill)
  102. end
  103. # 防具加技能
  104. for skill in @actor.armor_skills
  105. next if $game_temp.in_battle and not skill.battle_ok?
  106. temp.push(skill) unless temp.include?(skill)
  107. end
  108. temp.sort! {|a, b| a.id <=> b.id}
  109. @data = []
  110. for skill in temp
  111. @data.push(skill)
  112. if skill.id == @actor.last_skill_id
  113. self.index = @data.size - 1
  114. end
  115. end
  116. @item_max = @data.size
  117. create_contents
  118. for i in 0...@item_max
  119. draw_item(i)
  120. end
  121. end
  122. end

  123. class Scene_Equip
  124. alias _ly0mequip_start start
  125. alias _ly0mequip_terminate terminate
  126. alias _ly0mequip_update update
  127. alias _ly0mequip_update_equip_selection update_equip_selection
  128. alias _ly0mequip_update_item_windows update_item_windows
  129. #--------------------------------------------------------------------------
  130. # ○ 開始処理 (追加定義)
  131. #--------------------------------------------------------------------------
  132. def start
  133. _ly0mequip_start
  134. @skill_window = LY0_WindowItemSpec.new(0, 248, 288, [@actor])
  135. @skill_window.y = 416 - @skill_window.height
  136. @skill_window.active = true
  137. @skill_window.visible = false
  138. end
  139. #--------------------------------------------------------------------------
  140. # ○ 終了処理 (追加定義)
  141. #--------------------------------------------------------------------------
  142. def terminate
  143. _ly0mequip_terminate
  144. @skill_window.dispose
  145. end
  146. #--------------------------------------------------------------------------
  147. # ○ フレーム更新 (追加定義)
  148. #--------------------------------------------------------------------------
  149. def update
  150. _ly0mequip_update
  151. @skill_window.update
  152. end
  153. #--------------------------------------------------------------------------
  154. # ○ 装備部位選択の更新 (追加定義)
  155. #--------------------------------------------------------------------------
  156. def update_equip_selection
  157. _ly0mequip_update_equip_selection
  158. @skill_window.x = 544 - 288
  159. @skill_window.item = @equip_window.item
  160. end
  161. #--------------------------------------------------------------------------
  162. # ○ アイテムウィンドウの更新 (追加定義)
  163. #--------------------------------------------------------------------------
  164. def update_item_windows
  165. _ly0mequip_update_item_windows
  166. @skill_window.x = @item_window.index % 2 == 0 ? 544 - 288 : 0
  167. @skill_window.item = @item_window.item
  168. end
  169. end
  170. #==============================================================================
  171. # ★ LY0_WindowItemSpec
  172. #------------------------------------------------------------------------------
  173. #  装备技能 属性的显示
  174. #==============================================================================
  175. class LY0_WindowItemSpec < Window_Base
  176. #--------------------------------------------------------------------------
  177. # ☆ オブジェクト初期化
  178. # actors : アクターの配列
  179. #--------------------------------------------------------------------------
  180. def initialize(x, y, width, actors)
  181. super(x, y, width, WLH * 5 + 48)
  182. @actors = actors
  183. @item = nil
  184. self.opacity = 0
  185. self.active = false
  186. refresh
  187. end
  188. #--------------------------------------------------------------------------
  189. # ☆ リフレッシュ
  190. #--------------------------------------------------------------------------
  191. def refresh
  192. self.contents.clear
  193. if self.active and @item != nil
  194. draw_system_base
  195. if @item.is_a?(RPG::Armor)
  196. draw_armor_skill
  197. else
  198. self.visible = false
  199. end
  200. end
  201. end
  202. #--------------------------------------------------------------------------
  203. # ☆防具技能的描画
  204. #--------------------------------------------------------------------------
  205. def draw_armor_skill
  206. cw = contents.width - @actors.size * 24 - 8
  207. #draw_system_font("ARMOR_SKILL", 8, 8)
  208. self.contents.draw_text(8, 8, 110, 24, "ARMOR SKILL")
  209. self.contents.font.color = normal_color
  210. skills = LY0::armor_skill(@item)
  211. for i in 0..3
  212. y = WLH * (i + 1) + 8
  213. if skills[i] != nil
  214. for actor in @actors
  215. x = cw + (@actors.size > 1 ? actor.index * 24 : -8)
  216. draw_actor_status_character(actor, x + 16, 32)
  217. if actor.skill_learn?(skills[i])
  218. #draw_system_icon("CHECK1", x, y, 24)
  219. self.contents.draw_text(x, y, 24, 2,"RE")
  220. elsif actor.armor_skills.include?(skills[i])
  221. #draw_system_icon("CHECK2", x, y, 24)
  222. self.contents.draw_text(x, y, 24, 24, "ON")
  223. end
  224. end
  225. draw_item_name(skills[i], 8, y)
  226. else
  227. self.contents.draw_text(32, y, cw, WLH, "------------")
  228. end
  229. end
  230. self.visible = (not skills.empty?)
  231. end
  232. #--------------------------------------------------------------------------
  233. # ☆ 技能图用步行图の描画
  234. # actor : 角色
  235. # x : 描画先 X 座標
  236. # y : 描画先 Y 座標
  237. # opacity : 不透明度
  238. #--------------------------------------------------------------------------
  239. def draw_actor_status_character(actor, x, y)
  240. bitmap = Cache.character(actor.character_name)
  241. cw = bitmap.width / 12
  242. ch = bitmap.height / 8
  243. n = actor.character_index
  244. src_rect = Rect.new((n%4*3+1)*cw + 5, (n/4*4)*ch, 22, 22)
  245. self.contents.blt(x - cw / 2 + 1, y - ch + 9, bitmap, src_rect)
  246. end
  247. #--------------------------------------------------------------------------
  248. # ☆ 道具的設定
  249. # item : 新变更的道具
  250. #--------------------------------------------------------------------------
  251. def item=(item)
  252. if @item != item
  253. @item = item
  254. refresh
  255. end
  256. end
  257. end
复制代码



这个是防具的,把所有的"Armor”改成"Weapon"就行了,注意大小写,所有的都要改
作者: wangswz    时间: 2010-7-28 13:12



这个是防具的,把所有的"Armor”改成"Weapon"就行了,注意大小写,所有的都要改 ...
仲秋启明 发表于 2010-7-28 10:39


如果一个改防具一个默认武器 同时用会冲突么

http://ytomy.sakura.ne.jp/tkool/ ... h=equip_learn_skill
这个改成无法积累AP习得技能貌似也能行。。


作者: 仲秋启明    时间: 2010-7-28 14:18
回复 wangswz 的帖子


    用KGC的比较麻烦,这个可以达到《黑暗圣剑传说》的效果还不需要其他设定
如果是防具都有的应该不冲突,虽然是同一个定义




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