设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 6546|回复: 15
打印 上一主题 下一主题

感觉RGSS2比原来强大不少(附范例防具加技能脚本)

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
202
在线时间
498 小时
注册时间
2006-10-21
帖子
907
跳转到指定楼层
1
发表于 2008-1-17 16:59:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
发现RGSS2有很强的扩展性,VX或许更适合会用脚本的人。

还有范例游戏的一些算法,完全突破以前的思维。

比如武器增加技能,以前见到的脚本基本是
if 武器带技能,卸下了武器
forget_skill(技能号)
if 武器带技能,装备了武器
learn_skill(技能号)


但是范例里却没有考虑 learn_skill和 forget_skill

因为学会技能无非是两点

1.技能栏里能显示
2.选择后能使用

这种思维我还需要多加练习啊………………


这里放个提取出来的脚本吧,只是给人看看原理,想用的人还是自己修改一下好了
为使自己有点工作量把它改为防具添加技能了{/cy}

  1. #==============================================================================
  2. # ★ LY0_Costants
  3. #------------------------------------------------------------------------------
  4. #  独自的定数的定义
  5. #==============================================================================

  6. #------------------------------------------------------------------------------
  7. # ◆ 基本設定
  8. #------------------------------------------------------------------------------

  9. # 装备技能(识別用文字列 + [技能 ID|技能 ID|...]) ※ 最大数 4
  10. LY0_ARMOR_SKILL_SIGNATURE = "*ARMORSKILL"


  11. #==============================================================================
  12. # ★ LY0_Module
  13. #------------------------------------------------------------------------------
  14. #  独自的机能添加
  15. #==============================================================================

  16. module LY0
  17.   #--------------------------------------------------------------------------
  18.   # ☆ 属性道具取得
  19.   #     id : 属性 ID
  20.   #--------------------------------------------------------------------------
  21.   def self.element_icon(id)
  22.     return LY0_ELEMENT_ICON[id - 1]
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ☆ 防具技能的附加
  26.   #     item : 防具号
  27.   #--------------------------------------------------------------------------
  28.   def self.armor_skill(item)
  29.     result = []
  30.     if item.is_a?(RPG::Armor)
  31.       sig = LY0_ARMOR_SKILL_SIGNATURE      
  32.       reg = /#{Regexp.quote sig}\[((\d+\|?)+)\]/
  33.       if item.note.scan(reg).to_a[0]
  34.         r = $~[0].gsub(/#{Regexp.quote sig}\[/, "").gsub(/\]/, "")
  35.         for s in r.split(/\s*\|\s*/)
  36.           skill = $data_skills[s.to_i]
  37.           result.push(skill) if skill.is_a?(RPG::Skill)
  38.         end
  39.       end
  40.     end
  41.     return result
  42.   end
  43.   
  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.   #--------------------------------------------------------------------------
  80.   def draw_system_base
  81.     self.opacity = 0
  82.     rect = Rect.new(0, 0, contents.width, self.contents.height)
  83.     self.contents.fill_rect(rect, system_color)
  84.     rect = Rect.new(2, 2, contents.width - 4, self.contents.height - 4)
  85.     color = Color.new(24, 8, 4)
  86.     self.contents.fill_rect(rect, color)
  87.   end
  88.   
  89.   
  90. end

  91. #==============================================================================
  92. # ■ Window_Skill
  93. #------------------------------------------------------------------------------
  94. #  特技画面中、显示可以使用的特技浏览的窗口
  95. #==============================================================================

  96. class Window_Skill
  97.   
  98.   #--------------------------------------------------------------------------
  99.   # ● 刷新
  100.   #--------------------------------------------------------------------------
  101.   def refresh
  102.     temp = []
  103.     for skill in @actor.skills
  104.       next if $game_temp.in_battle and not skill.battle_ok?
  105.       temp.push(skill)
  106.     end
  107.     # 防具加技能
  108.     for skill in @actor.armor_skills
  109.       next if $game_temp.in_battle and not skill.battle_ok?
  110.       temp.push(skill) unless temp.include?(skill)
  111.     end
  112.     temp.sort! {|a, b| a.id <=> b.id}
  113.     @data = []
  114.     for skill in temp
  115.       @data.push(skill)
  116.       if skill.id == @actor.last_skill_id
  117.         self.index = @data.size - 1
  118.       end
  119.     end
  120.     @item_max = @data.size
  121.     create_contents
  122.     for i in 0...@item_max
  123.       draw_item(i)
  124.     end
  125.   end
  126. end


  127. class Scene_Equip
  128.   alias _ly0mequip_start start
  129.   alias _ly0mequip_terminate terminate
  130.   alias _ly0mequip_update update
  131.   alias _ly0mequip_update_equip_selection update_equip_selection
  132.   alias _ly0mequip_update_item_windows update_item_windows
  133.   #--------------------------------------------------------------------------
  134.   # ○ 開始処理 (追加定義)
  135.   #--------------------------------------------------------------------------
  136.   def start
  137.     _ly0mequip_start
  138.     @skill_window = LY0_WindowItemSpec.new(0, 248, 288, [@actor])
  139.     @skill_window.y = 416 - @skill_window.height
  140.     @skill_window.active = true
  141.     @skill_window.visible = false
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ○ 終了処理 (追加定義)
  145.   #--------------------------------------------------------------------------
  146.   def terminate
  147.     _ly0mequip_terminate
  148.     @skill_window.dispose
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # ○ フレーム更新 (追加定義)
  152.   #--------------------------------------------------------------------------
  153.   def update
  154.     _ly0mequip_update
  155.     @skill_window.update
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # ○ 装備部位選択の更新 (追加定義)
  159.   #--------------------------------------------------------------------------
  160.   def update_equip_selection
  161.     _ly0mequip_update_equip_selection
  162.     @skill_window.x = 544 - 288
  163.     @skill_window.item = @equip_window.item
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ○ アイテムウィンドウの更新 (追加定義)
  167.   #--------------------------------------------------------------------------
  168.   def update_item_windows
  169.     _ly0mequip_update_item_windows
  170.     @skill_window.x = @item_window.index % 2 == 0 ? 544 - 288 : 0
  171.     @skill_window.item = @item_window.item
  172.   end
  173. end
  174. #==============================================================================
  175. # ★ LY0_WindowItemSpec
  176. #------------------------------------------------------------------------------
  177. #  装备技能 属性的显示
  178. #==============================================================================

  179. class LY0_WindowItemSpec < Window_Base
  180.   #--------------------------------------------------------------------------
  181.   # ☆ オブジェクト初期化
  182.   #     actors   : アクターの配列
  183.   #--------------------------------------------------------------------------
  184.   def initialize(x, y, width, actors)
  185.     super(x, y, width, WLH * 5 + 48)
  186.     @actors = actors
  187.     @item = nil
  188.     self.opacity = 0
  189.     self.active = false
  190.     refresh
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # ☆ リフレッシュ
  194.   #--------------------------------------------------------------------------
  195.   def refresh
  196.     self.contents.clear
  197.     if self.active and @item != nil
  198.       draw_system_base
  199.       if @item.is_a?(RPG::Armor)
  200.         draw_armor_skill
  201.       else
  202.         self.visible = false
  203.       end
  204.     end
  205.   end
  206.   #--------------------------------------------------------------------------
  207.   # ☆防具技能的描画
  208.   #--------------------------------------------------------------------------
  209.   def draw_armor_skill
  210.     cw = contents.width - @actors.size * 24 - 8
  211.     #draw_system_font("ARMOR_SKILL", 8, 8)
  212.     self.contents.draw_text(8, 8, 110, 24, "ARMOR SKILL")
  213.     self.contents.font.color = normal_color
  214.     skills = LY0::armor_skill(@item)
  215.     for i in 0..3
  216.       y = WLH * (i + 1) + 8
  217.       if skills[i] != nil
  218.         for actor in @actors
  219.           x = cw + (@actors.size > 1 ? actor.index * 24 : -8)
  220.           draw_actor_status_character(actor, x + 16, 32)
  221.           if actor.skill_learn?(skills[i])
  222.             #draw_system_icon("CHECK1", x, y, 24)
  223.             self.contents.draw_text(x, y, 24, 2,"RE")
  224.           elsif actor.armor_skills.include?(skills[i])
  225.             #draw_system_icon("CHECK2", x, y, 24)
  226.              self.contents.draw_text(x, y, 24, 24, "ON")
  227.           end
  228.         end
  229.         draw_item_name(skills[i], 8, y)
  230.       else
  231.         self.contents.draw_text(32, y, cw, WLH, "------------")
  232.       end
  233.     end
  234.     self.visible = (not skills.empty?)
  235.   end

  236.   #--------------------------------------------------------------------------
  237.   # ☆ 技能图用步行图の描画
  238.   #     actor           : 角色
  239.   #     x               : 描画先 X 座標
  240.   #     y               : 描画先 Y 座標
  241.   #     opacity         : 不透明度
  242.   #--------------------------------------------------------------------------
  243.   def draw_actor_status_character(actor, x, y)
  244.     bitmap = Cache.character(actor.character_name)
  245.     cw = bitmap.width / 12
  246.     ch = bitmap.height / 8
  247.     n = actor.character_index
  248.     src_rect = Rect.new((n%4*3+1)*cw + 5, (n/4*4)*ch, 22, 22)
  249.     self.contents.blt(x - cw / 2 + 1, y - ch + 9, bitmap, src_rect)
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ☆ 道具的設定
  253.   #     item : 新变更的道具
  254.   #--------------------------------------------------------------------------
  255.   def item=(item)
  256.     if @item != item
  257.       @item = item
  258.       refresh
  259.     end
  260.   end
  261. end
复制代码


使用方法就是在防具的注解里添加
*ARMORSKILL[技能ID|技能ID|……]





头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-1-6
帖子
573
2
发表于 2008-1-17 20:17:43 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

66RPG站长

梦石
0
星屑
54
在线时间
615 小时
注册时间
2005-10-10
帖子
5734

RMVX自由创作大赛亚军第2届短篇游戏比赛亚军第5届短篇游戏比赛冠军

3
发表于 2008-1-17 21:37:51 | 只看该作者
算法的微小问题而已。说白了以前那个算法就是只写脚本而不在写脚本的人游戏里面用脚本留下的bug
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风之塞尔达

梦石
0
星屑
50
在线时间
57 小时
注册时间
2005-10-22
帖子
2492

贵宾

4
发表于 2008-1-17 21:41:24 | 只看该作者
以下引用wsffx13于2008-1-17 8:59:50的发言:
感觉RGSS2比原来强大不少

为什么我丝毫感觉不到... ...
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风雪夜不归人

梦石
0
星屑
50
在线时间
276 小时
注册时间
2006-3-7
帖子
6721

贵宾

5
发表于 2008-1-18 02:17:23 | 只看该作者
支持一个!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
202
在线时间
498 小时
注册时间
2006-10-21
帖子
907
6
 楼主| 发表于 2008-1-18 18:21:04 | 只看该作者
有人需求,就把武器附带技能的脚本也附上。不过偷懒把装备技能显示的脚本省了。

要用的话看防具的WindowItemSpec吧


  1. #==============================================================================
  2. # ★ LY0_Costants
  3. #------------------------------------------------------------------------------
  4. #  独自的定数的定义
  5. #==============================================================================

  6. #------------------------------------------------------------------------------
  7. # ◆ 基本設定
  8. #------------------------------------------------------------------------------
  9. # 武器技能(识別用文字列 + [技能 ID|技能 ID|...]) ※ 最大数 4
  10. LY0_WEAPONSKILL_SIGNATURE = "*WEAPONSKILL"


  11. #==============================================================================
  12. # ★ LY0_Module
  13. #------------------------------------------------------------------------------
  14. #  独自的机能添加
  15. #==============================================================================

  16. module LY0
  17.   #--------------------------------------------------------------------------
  18.   # ☆ 武器技能的附加
  19.   #     item : 武器
  20.   #--------------------------------------------------------------------------
  21.   def self.weapon_skill(item)
  22.     result = []
  23.     if item.is_a?(RPG::Weapon)
  24.       sig = LY0_WEAPONSKILL_SIGNATURE
  25.       reg = /#{Regexp.quote sig}\[((\d+\|?)+)\]/
  26.       if item.note.scan(reg).to_a[0]
  27.         r = $~[0].gsub(/#{Regexp.quote sig}\[/, "").gsub(/\]/, "")
  28.         for s in r.split(/\s*\|\s*/)
  29.           skill = $data_skills[s.to_i]
  30.           result.push(skill) if skill.is_a?(RPG::Skill)
  31.         end
  32.       end
  33.     end
  34.     return result
  35.   end
  36.   
  37. end


  38. #==============================================================================
  39. # ■ Window_Skill
  40. #------------------------------------------------------------------------------
  41. #  特技画面中、显示可以使用的特技浏览的窗口
  42. #==============================================================================

  43. class Window_Skill
  44.   #--------------------------------------------------------------------------
  45.   # ● 刷新
  46.   #--------------------------------------------------------------------------
  47.   def refresh
  48.     temp = []
  49.     for skill in @actor.skills
  50.       next if $game_temp.in_battle and not skill.battle_ok?
  51.       temp.push(skill)
  52.     end
  53.    
  54.    
  55.     # 武器加技能
  56.     for skill in @actor.weapon_skills
  57.       next if $game_temp.in_battle and not skill.battle_ok?
  58.       temp.push(skill) unless temp.include?(skill)
  59.     end

  60.    
  61.     temp.sort! {|a, b| a.id <=> b.id}
  62.     @data = []
  63.     for skill in temp
  64.       @data.push(skill)
  65.       if skill.id == @actor.last_skill_id
  66.         self.index = @data.size - 1
  67.       end
  68.     end
  69.     @item_max = @data.size
  70.     create_contents
  71.     for i in 0...@item_max
  72.       draw_item(i)
  73.     end
  74.   end
  75. end

  76. class Game_Actor
  77.   
  78.   
  79.   alias _ly0sys_skill_can_use? skill_can_use?

  80.   #--------------------------------------------------------------------------
  81.   # ☆ 武器技能配列取得
  82.   #--------------------------------------------------------------------------
  83.   def weapon_skills
  84.     result = []
  85.     for weapon in self.weapons
  86.       for skill in LY0::weapon_skill(weapon)
  87.         result.push(skill)
  88.       end
  89.     end
  90.     return result
  91.   end

  92.   #--------------------------------------------------------------------------
  93.   # ○ 技能使用可能判定 (再定義)
  94.   #     skill : 技能
  95.   #--------------------------------------------------------------------------
  96.   def skill_can_use?(skill)
  97.     # 武器
  98.     for a_skill in weapon_skills
  99.       return super if a_skill.id == skill.id
  100.     end

  101.     return _ly0sys_skill_can_use?(skill)
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ○ 防具  芯片带学技能装备
  105.   #--------------------------------------------------------------------------
  106. end
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风雪夜不归人

梦石
0
星屑
50
在线时间
276 小时
注册时间
2006-3-7
帖子
6721

贵宾

7
发表于 2008-1-18 20:00:28 | 只看该作者
哇,谢谢楼主!!!

是不是直接把防具的
  1. #==============================================================================
  2. # ★ LY0_WindowItemSpec
  3. #------------------------------------------------------------------------------
  4. #  装备技能 属性的显示
  5. #==============================================================================

  6. class LY0_WindowItemSpec < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ☆ オブジェクト初期化
  9.   #     actors   : アクターの配列
  10.   #--------------------------------------------------------------------------
  11.   def initialize(x, y, width, actors)
  12.     super(x, y, width, WLH * 5 + 48)
  13.     @actors = actors
  14.     @item = nil
  15.     self.opacity = 0
  16.     self.active = false
  17.     refresh
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   # ☆ リフレッシュ
  21.   #--------------------------------------------------------------------------
  22.   def refresh
  23.     self.contents.clear
  24.     if self.active and @item != nil
  25.       draw_system_base
  26.       if @item.is_a?(RPG::Armor)
  27.         draw_armor_skill
  28.       else
  29.         self.visible = false
  30.       end
  31.     end
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   # ☆防具技能的描画
  35.   #--------------------------------------------------------------------------
  36.   def draw_armor_skill
  37.     cw = contents.width - @actors.size * 24 - 8
  38.     #draw_system_font("ARMOR_SKILL", 8, 8)
  39.     self.contents.draw_text(8, 8, 110, 24, "ARMOR SKILL")
  40.     self.contents.font.color = normal_color
  41.     skills = LY0::armor_skill(@item)
  42.     for i in 0..3
  43.       y = WLH * (i + 1) + 8
  44.       if skills[i] != nil
  45.         for actor in @actors
  46.           x = cw + (@actors.size > 1 ? actor.index * 24 : -8)
  47.           draw_actor_status_character(actor, x + 16, 32)
  48.           if actor.skill_learn?(skills[i])
  49.             #draw_system_icon("CHECK1", x, y, 24)
  50.             self.contents.draw_text(x, y, 24, 2,"RE")
  51.           elsif actor.armor_skills.include?(skills[i])
  52.             #draw_system_icon("CHECK2", x, y, 24)
  53.              self.contents.draw_text(x, y, 24, 24, "ON")
  54.           end
  55.         end
  56.         draw_item_name(skills[i], 8, y)
  57.       else
  58.         self.contents.draw_text(32, y, cw, WLH, "------------")
  59.       end
  60.     end
  61.     self.visible = (not skills.empty?)
  62.   end

  63.   #--------------------------------------------------------------------------
  64.   # ☆ 技能图用步行图の描画
  65.   #     actor           : 角色
  66.   #     x               : 描画先 X 座標
  67.   #     y               : 描画先 Y 座標
  68.   #     opacity         : 不透明度
  69.   #--------------------------------------------------------------------------
  70.   def draw_actor_status_character(actor, x, y)
  71.     bitmap = Cache.character(actor.character_name)
  72.     cw = bitmap.width / 12
  73.     ch = bitmap.height / 8
  74.     n = actor.character_index
  75.     src_rect = Rect.new((n%4*3+1)*cw + 5, (n/4*4)*ch, 22, 22)
  76.     self.contents.blt(x - cw / 2 + 1, y - ch + 9, bitmap, src_rect)
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ☆ 道具的設定
  80.   #     item : 新变更的道具
  81.   #--------------------------------------------------------------------------
  82.   def item=(item)
  83.     if @item != item
  84.       @item = item
  85.       refresh
  86.     end
  87.   end
  88. end
复制代码

这一段复制过去就可以了= =
请原谅我问如此白目的问题
有些人,到了七八月份就会诈尸。
宫斗,是女生永远的爱。
冷门,是本人不变的欲。
作弊,是玩家自由的痛。
练级,是橙光割舍的情。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
202
在线时间
498 小时
注册时间
2006-10-21
帖子
907
8
 楼主| 发表于 2008-1-18 20:59:55 | 只看该作者
不是……可惜现在我上不了网(别误会,手机上网中…)

你把两脚本对照一下就会找出多的class,把里面防具相关改为武器相关

你可以从范例游戏黑狮里找到对应内容,它不仅显示武器附技,还有防具属性(不过要改的地方也多了…)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风雪夜不归人

梦石
0
星屑
50
在线时间
276 小时
注册时间
2006-3-7
帖子
6721

贵宾

9
发表于 2008-1-19 00:31:26 | 只看该作者
以下引用wsffx13于2008-1-18 12:59:55的发言:

不是……可惜现在我上不了网(别误会,手机上网中…)

你把两脚本对照一下就会找出多的class,把里面防具相关改为武器相关

你可以从范例游戏黑狮里找到对应内容,它不仅显示武器附技,还有防具属性(不过要改的地方也多了…)


谢谢!!!

我等你……黑狮子夹杂着日文的更是完全看不明白。
想要黑狮子的菜单啊……可惜不会使用。

脚本果然很重要嘛……
有些人,到了七八月份就会诈尸。
宫斗,是女生永远的爱。
冷门,是本人不变的欲。
作弊,是玩家自由的痛。
练级,是橙光割舍的情。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
202
在线时间
498 小时
注册时间
2006-10-21
帖子
907
10
 楼主| 发表于 2008-1-24 23:48:39 | 只看该作者
好了,经过这么多天终于能再次上网了。

前段日子为了考试忙于奋发(其实是无线上网帐号里没钱了),所以抱歉了

不多说,这里附上武器附带技能脚本
  1. #==============================================================================
  2. # ★ MQ0_Costants
  3. #------------------------------------------------------------------------------
  4. #  独自的定数的定义
  5. #==============================================================================

  6. #------------------------------------------------------------------------------
  7. # ◆ 基本設定
  8. #------------------------------------------------------------------------------

  9. # 装备技能(识別用文字列 + [技能 ID|技能 ID|...]) ※ 最大数 4
  10. MQ0_WEAPONSKILL_SIGNATURE = "*WEAPONSKILL"


  11. #==============================================================================
  12. # ★ MQ0_Module
  13. #------------------------------------------------------------------------------
  14. #  独自的机能添加
  15. #==============================================================================

  16. module MQ0
  17.   #--------------------------------------------------------------------------
  18.   # ☆ 防具技能的附加
  19.   #     item : 防具号
  20.   #--------------------------------------------------------------------------
  21.   def self.weapon_skill(item)
  22.     result = []
  23.     if item.is_a?(RPG::Weapon)
  24.       sig = MQ0_WEAPONSKILL_SIGNATURE
  25.       reg = /#{Regexp.quote sig}\[((\d+\|?)+)\]/
  26.       if item.note.scan(reg).to_a[0]
  27.         r = $~[0].gsub(/#{Regexp.quote sig}\[/, "").gsub(/\]/, "")
  28.         for s in r.split(/\s*\|\s*/)
  29.           skill = $data_skills[s.to_i]
  30.           result.push(skill) if skill.is_a?(RPG::Skill)
  31.         end
  32.       end
  33.     end
  34.     return result
  35.   end
  36.   
  37. end


  38. class Game_Actor
  39.   alias _mq0sys_skill_can_use? skill_can_use?
  40.   #--------------------------------------------------------------------------
  41.   # ☆ 技能配列取得
  42.   #--------------------------------------------------------------------------
  43.   def weapon_skills
  44.     result = []
  45.     for weapon in self.weapons
  46.       for skill in MQ0::weapon_skill(weapon)
  47.         result.push(skill)
  48.       end
  49.     end
  50.     return result
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ○ 技能使用可能判定 (再定義)
  54.   #     skill : 技能
  55.   #--------------------------------------------------------------------------
  56.   def skill_can_use?(skill)
  57.     # ウェポンスキル
  58.     for w_skill in weapon_skills
  59.       return super if w_skill.id == skill.id
  60.     end
  61.     return _mq0sys_skill_can_use?(skill)
  62.   end
  63. end

  64. #==============================================================================
  65. # ★ MQ0_Window
  66. #------------------------------------------------------------------------------
  67. #==============================================================================

  68. class Window_Base
  69.   
  70.   #--------------------------------------------------------------------------
  71.   # ☆ システムメッセージの下地を描画
  72.   #--------------------------------------------------------------------------
  73.   def draw_system_base
  74.     self.opacity = 0
  75.     rect = Rect.new(0, 0, contents.width, self.contents.height)
  76.     self.contents.fill_rect(rect, system_color)
  77.     rect = Rect.new(2, 2, contents.width - 4, self.contents.height - 4)
  78.     color = Color.new(24, 8, 4)
  79.     self.contents.fill_rect(rect, color)
  80.   end
  81.   
  82.   
  83. end

  84. #==============================================================================
  85. # ■ Window_Skill
  86. #------------------------------------------------------------------------------
  87. #  特技画面中、显示可以使用的特技浏览的窗口
  88. #==============================================================================

  89. class Window_Skill
  90.   
  91.   #--------------------------------------------------------------------------
  92.   # ● 刷新
  93.   #--------------------------------------------------------------------------
  94.   def refresh
  95.     temp = []
  96.     for skill in @actor.skills
  97.       next if $game_temp.in_battle and not skill.battle_ok?
  98.       temp.push(skill)
  99.     end
  100.     # ウェポンスキル
  101.     for skill in @actor.weapon_skills
  102.       next if $game_temp.in_battle and not skill.battle_ok?
  103.       temp.push(skill) unless temp.include?(skill)
  104.     end
  105.     temp.sort! {|a, b| a.id <=> b.id}
  106.     @data = []
  107.     for skill in temp
  108.       @data.push(skill)
  109.       if skill.id == @actor.last_skill_id
  110.         self.index = @data.size - 1
  111.       end
  112.     end
  113.     @item_max = @data.size
  114.     create_contents
  115.     for i in 0...@item_max
  116.       draw_item(i)
  117.     end
  118.   end
  119. end


  120. class Scene_Equip
  121. alias _mq0mequip_start start
  122.   alias _mq0mequip_terminate terminate
  123.   alias _mq0mequip_update update
  124.   alias _mq0mequip_update_equip_selection update_equip_selection
  125.   alias _mq0mequip_update_item_windows update_item_windows
  126.   #--------------------------------------------------------------------------
  127.   # ○ 開始処理 (追加定義)
  128.   #--------------------------------------------------------------------------
  129.    def start
  130.     _mq0mequip_start
  131.     @skill_window = MQ0_WindowItemSpec.new(0, 248, 288, [@actor])
  132.     @skill_window.y = 416 - @skill_window.height
  133.     @skill_window.active = true
  134.     @skill_window.visible = false
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ○ 終了処理 (追加定義)
  138.   #--------------------------------------------------------------------------
  139. def terminate
  140.     _mq0mequip_terminate
  141.     @skill_window.dispose
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ○ フレーム更新 (追加定義)
  145.   #--------------------------------------------------------------------------
  146.   def update
  147.     _mq0mequip_update
  148.     @skill_window.update
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # ○ 装備部位選択の更新 (追加定義)
  152.   #--------------------------------------------------------------------------
  153.   def update_equip_selection
  154.     _mq0mequip_update_equip_selection
  155.     @skill_window.x = 544 - 288
  156.     @skill_window.item = @equip_window.item
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ○ アイテムウィンドウの更新 (追加定義)
  160.   #--------------------------------------------------------------------------
  161.   def update_item_windows
  162.     _mq0mequip_update_item_windows
  163.     @skill_window.x = @item_window.index % 2 == 0 ? 544 - 288 : 0
  164.     @skill_window.item = @item_window.item
  165.   end
  166. end
  167. #==============================================================================
  168. # ★ MQ0_WindowItemSpec
  169. #------------------------------------------------------------------------------
  170. #  装备技能 属性的显示
  171. #==============================================================================

  172. class MQ0_WindowItemSpec < Window_Base
  173.   #--------------------------------------------------------------------------
  174.   # ☆ オブジェクト初期化
  175.   #     actors   : アクターの配列
  176.   #--------------------------------------------------------------------------
  177.   def initialize(x, y, width, actors)
  178.     super(x, y, width, WLH * 5 + 48)
  179.     @actors = actors
  180.     @item = nil
  181.     self.opacity = 0
  182.     self.active = false
  183.     refresh
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ☆ リフレッシュ
  187.   #--------------------------------------------------------------------------
  188.   def refresh
  189.     self.contents.clear
  190.     if self.active and @item != nil
  191.       draw_system_base
  192.        if @item.is_a?(RPG::Weapon)
  193.         draw_weapon_skill
  194.       else
  195.         self.visible = false
  196.       end
  197.     end
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ☆防具技能的描画
  201.   #--------------------------------------------------------------------------
  202.   def draw_weapon_skill
  203.     cw = contents.width - @actors.size * 24 - 8
  204.     #draw_system_font("WEAPON_SKILL", 8, 8)
  205.     self.contents.draw_text(8, 8, 110, 24, "WEAPON_SKILL")
  206.     self.contents.font.color = normal_color
  207.     skills = MQ0::weapon_skill(@item)
  208.     for i in 0..3
  209.       y = WLH * (i + 1) + 8
  210.       if skills[i] != nil
  211.         for actor in @actors
  212.           x = cw + (@actors.size > 1 ? actor.index * 24 : -8)
  213.           draw_actor_status_character(actor, x + 16, 32)
  214.           if actor.skill_learn?(skills[i])
  215.             #这里表示角色已经学会
  216.             #draw_system_icon("CHECK1", x, y, 24)
  217.             self.contents.draw_text(x, y, 24, 2, "RD")
  218.           elsif actor.weapon_skills.include?(skills[i])
  219.             #这里表示角色装备后学会
  220.             #draw_system_icon("CHECK2", x, y, 24)
  221.             self.contents.draw_text(x, y, 24, 24, "OK")
  222.           end
  223.         end
  224.         draw_item_name(skills[i], 8, y)
  225.       else
  226.         self.contents.draw_text(32, y, cw, WLH, "------------")
  227.       end
  228.     end
  229.     self.visible = (not skills.empty?)
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # ☆ 技能图用步行图の描画
  233.   #     actor           : 角色
  234.   #     x               : 描画先 X 座標
  235.   #     y               : 描画先 Y 座標
  236.   #     opacity         : 不透明度
  237.   #--------------------------------------------------------------------------
  238.   def draw_actor_status_character(actor, x, y)
  239.     bitmap = Cache.character(actor.character_name)
  240.     cw = bitmap.width / 12
  241.     ch = bitmap.height / 8
  242.     n = actor.character_index
  243.     src_rect = Rect.new((n%4*3+1)*cw + 5, (n/4*4)*ch, 22, 22)
  244.     self.contents.blt(x - cw / 2 + 1, y - ch + 9, bitmap, src_rect)
  245.   end
  246.   #--------------------------------------------------------------------------
  247.   # ☆ 道具的設定
  248.   #     item : 新变更的道具
  249.   #--------------------------------------------------------------------------
  250.   def item=(item)
  251.     if @item != item
  252.       @item = item
  253.       refresh
  254.     end
  255.   end
  256. end
复制代码


外加相应范例吧
http://rpg.blue/upload_program/f ... 技能_81618498.rar
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 12:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表