Project1

标题: 如何装备武器就学会一招技能?脱下就消失 [打印本页]

作者: Mr.红茶    时间: 2013-3-31 12:20
标题: 如何装备武器就学会一招技能?脱下就消失
如题,突然感觉自己好无耻 = =
作者: 秋寒    时间: 2013-3-31 12:22
这个很复杂的,除非一直用条件分歧,不然得用到脚本,搜索一下,这个问题出现好多次了
作者: 美丽晨露    时间: 2013-3-31 12:23
http://rpg.blue/thread-256157-1-1.html
请参考我之前的提问
希望对你有帮助
作者: joe5491    时间: 2013-4-1 00:11
給你看看某個多功能裝備腳本:
blog.yam.com/a870053jjkj/article/29783547
作者: 芯☆淡茹水    时间: 2013-4-1 00:41
  正好有这个脚本
  1. #===============================================================================
  2. # 装备武器获得技能
  3. #===============================================================================
  4. # 资料初始化
  5. $skill_plus_w = {}
  6. $skill_plus_a = {}
  7. $data_weapons = load_data("Data/Weapons.rxdata")
  8. $data_armors = load_data("Data/Armors.rxdata")
  9. (0...$data_weapons.size).each{|i|$skill_plus_w[i]=[]}
  10. (0...$data_armors.size).each{|i|$skill_plus_a[i]=[]}
  11. #-------------------------------------------------------------------------------
  12. # 资料设定
  13. $skill_plus_w[145] = [77]
  14. $skill_plus_w[146] = [77]
  15. $skill_plus_w[147] = [77]
  16. $skill_plus_w[37] = [87]
  17. $skill_plus_w[38] = [87]
  18. $skill_plus_w[39] = [87]
  19. $skill_plus_w[40] = [87]
  20. $skill_plus_w[41] = [87]
  21. #-------------------------------------------------------------------------------
  22. class Game_Actor
  23.   def skills
  24.     result = @skills.clone
  25.     a = []
  26.     a += $skill_plus_w[@weapon_id]
  27.     a += $skill_plus_a[@armor1_id]
  28.     a += $skill_plus_a[@armor2_id]
  29.     a += $skill_plus_a[@armor3_id]
  30.     a += $skill_plus_a[@armor4_id]
  31.     for i in a
  32.       if !result.include?(i)
  33.         result.push(i)
  34.       end
  35.     end
  36.     result.sort!
  37.     return result
  38.   end
  39.   def skill_can_use?(skill_id)
  40.     return super
  41.   end
  42. end
复制代码

作者: joe5491    时间: 2013-4-1 01:36
本帖最后由 joe5491 于 2013-4-1 01:46 编辑

我也补上脚本好了,这个还有穿上附加能力值、状态等功能
设定武器之类的,请到24行左右(我放了几个范例)
  1. module Sword
  2. #=======================================
  3. #★ 魔劍工舖 - 多功能裝備效果 1.03 (XP)
  4. # blog.yam.com/a870053jjkj/article/29783547
  5. #=======================================
  6.   Sword62_Weapon, Sword62_Armor = [], []
  7. =begin
  8. ========================================
  9. ● 設置腳本
  10. 判斷是否不符合裝備條件:角色對象.conditions62?(裝備部位, 裝備編號)
  11. ========================================
  12. ● 裝備效果資料
  13. 設定變更:0=>{'能力值函數名稱'=>更改數值*},
  14. 自動狀態:2=>[狀態編號*],
  15. 增減技能:3=>[技能編號*],
  16. 裝備條件:【1】4=>{'能力值函數名稱'=>所需數值*},
  17.      【2】4=>{變數編號=>所需數值*},
  18. 經驗加乘:5=>[增加量, 整體百分比, 戰鬥以外是否有效&],
  19. ========================================
  20. =end
  21. #● 功能設定
  22. Sword62_2Battle = 2 # 自動狀態附加規則,0為裝備瞬間;1為戰鬥結束;2為不解除
  23. #--------------------------------------------------------------
  24. #○ 武器效果資料表 ( Sword62_Weapon[武器編號] = {效果資料*} )
  25. Sword62_Weapon[3] = {4=>{'level'=>3, 'str'=>300},}   #这意思是,必须要3等以上且力量大于300才能穿上3号武器
  26. Sword62_Weapon[6] = {3=>{22},}   #这意思是穿上6号武器能自动获得22号技能
  27. Sword62_Weapon[7] = {2=>{1},}   #这意思是穿上7号武器马上获得1号状态(就是马上死亡?!)
  28. Sword62_Weapon[8] = {0=>{ 'str'=>9999},}   #这意思是穿上8号武器马上力量变9999(可突破上限)
  29. #--------------------------------------------------------------
  30. #○ 防具效果資料表 ( Sword62_Armor[防具編號] = {效果資料*} )
  31. Sword62_Armor[33] = {5=>[0,50],} #这意思是穿上此33号防具经验1.5倍
  32. #=======================================
  33.   $Sword ? $Sword[62] = true : $Sword = {62=>true} # 腳本使用標誌
  34.   $Sword_F12_Error = {} unless $Sword_F12_Error # F12除錯標誌
  35.   #-------------------------------------------------------------
  36.   #● 獲取指定的裝備是否有設定指定的效果(裝備類型, 裝備編號, 效果編號)
  37.   def self.equip62?(kind, id, id2)
  38.     if $Sword[3] ; if id.is_a?(RPG::Weapon) # 「裝備欄位擴充」處理
  39.       kind = 0 ; id = id.id # 武器
  40.     else ; kind = 1 ; id = id.id # 防具
  41.     end ; end
  42.     return if id == 0
  43.     return unless equip = kind == 0 ? $data_weapons[id] : $data_armors[id]
  44.     if $Sword[79] then if equip.fluctuation? # 「浮動數值裝備」處理
  45.       id = equip.original_id
  46.     end end
  47.     kind == 0 ? (Sword62_Weapon[id] ? (Sword62_Weapon[id][id2] ? true : false) : false) :
  48.     (Sword62_Armor[id] ? (Sword62_Armor[id][id2] ? true : false) : false)
  49.   end
  50.   #-------------------------------------------------------------
  51.   #● 獲取裝備類型的變量(裝備類型, 裝備編號)
  52.   def self.equipment62(kind, id)
  53.     if $Sword[3] ; if id.is_a?(RPG::Weapon) # 「裝備欄位擴充」處理
  54.       kind = 0 ; id = id.id # 武器
  55.     else ; kind = 1 ; id = id.id # 防具
  56.     end ; end
  57.     equip = kind == 0 ? $data_weapons[id] : $data_armors[id]
  58.     if $Sword[79] then if equip.fluctuation? # 「浮動數值裝備」處理
  59.       id = equip.original_id
  60.     end end
  61.     kind == 0 ? Sword62_Weapon[id] : Sword62_Armor[id]
  62.   end
  63. end
  64. #=======================================
  65. #■ 處理角色的類
  66. class Game_Actor# < Game_Battler
  67.   attr_accessor :ability62 # 裝備後的能力值加乘數值表
  68.   attr_accessor :state62 # 裝備附加狀態資料表
  69.   #-------------------------------------------------------------
  70.   #● 設定角色(角色編號)
  71.   alias sword62_setup setup
  72.   def setup(actor_id)
  73.     sword62_setup(actor_id) ; @ability62, @state62 = {}, []
  74.     @weapon_id, @armor1_id, @armor2_id, @armor3_id, @armor4_id = 0, 0, 0, 0, 0
  75.     actor = $data_actors[actor_id]
  76.     equip_effect62(0, actor.weapon_id)
  77.     equip_effect62(1, actor.armor1_id)
  78.     equip_effect62(2, actor.armor2_id)
  79.     equip_effect62(3, actor.armor3_id)
  80.     equip_effect62(4, actor.armor4_id)
  81.     if $Sword[3]
  82.     else
  83.     equip(0, actor.weapon_id) ; @weapon_id = actor.weapon_id
  84.     equip(1, actor.armor1_id) ; @armor1_id = actor.armor1_id
  85.     equip(2, actor.armor2_id) ; @armor2_id = actor.armor2_id
  86.     equip(3, actor.armor3_id) ; @armor3_id = actor.armor3_id
  87.     equip(4, actor.armor4_id) ; @armor4_id = actor.armor4_id
  88.     end
  89.   end
  90.   #-------------------------------------------------------------
  91.   #● 變更EXP=(新EXP)
  92.   alias sword62_exp= exp=
  93.   def exp=(exp)
  94.     #○ 經驗加乘
  95.     self.sword62_exp = exp if (exp2 = exp - self.exp) <= 0
  96.     equip = sword62_sword3
  97.     equip.each_index do |i| next unless equipment = Sword.equipment62(i, equip[i])
  98.       next unless equipment[5]
  99.       if equipment[5][2] or $scene.is_a?(Scene_Battle) # 符合加乘規定的場合
  100.         exp += (exp2 / 100.0 * equipment[5][1]).round + equipment[5][0]
  101.       end
  102.     end
  103.     self.sword62_exp = exp
  104.   end
  105.   #-------------------------------------------------------------
  106.   #● 可用技能判斷(技能編號)
  107.   alias sword62_skill_can_use? skill_can_use?
  108.   def skill_can_use?(skill_id)
  109.     skills1 = @skills ; @skills = sword62_skills_loop
  110.     skills2 = sword62_skill_can_use?(skill_id) ; @skills = skills1 ; skills2
  111.   end
  112.   #-------------------------------------------------------------
  113.   #● 獲取技能對象數組
  114.   alias sword62_skills skills
  115.   def skills
  116.     skills1 = @skills ; @skills = sword62_skills_loop
  117.     skills2 = sword62_skills ; @skills = skills1 ; skills2
  118.   end
  119.   #-------------------------------------------------------------
  120.   #● 獲取裝備效果增減技能的技能列表
  121.   def sword62_skills_loop
  122.     skills1 = @skills
  123.     a = $Sword[3] ? Sword::Sword3_Column.size : 4
  124.     (0..a).each do |equip_type|
  125.       if $Sword[3] ; quip_id = equip3[equip_type] # 「裝備欄位擴充」處理
  126.       else
  127.         case equip_type # 裝備類型分歧
  128.         when 0 ; quip_id = weapon_id # 武器
  129.         when 1 ; quip_id = armor1_id # 盾
  130.         when 2 ; quip_id = armor2_id # 頭部
  131.         when 3 ; quip_id = armor3_id # 身體
  132.         when 4 ; quip_id = armor4_id # 裝飾品
  133.         end
  134.       end
  135.       if Sword.equip62?(equip_type, quip_id, 3)
  136.         Sword.equipment62(equip_type, quip_id)[3].each do |i|
  137.           i > 0 ? skills1 += [i] : (
  138.           skills1.delete_at(skills1.index(i.abs)) if skills1.index(i.abs))
  139.           skills1.sort! ; skills1.uniq!
  140.         end
  141.       end
  142.     end
  143.     skills1
  144.   end
  145.   #-------------------------------------------------------------
  146.   #● 判斷使否不可裝備(裝備部位, 裝備編號)
  147.   def conditions62?(kind, id)
  148.     script, disabled = '', false
  149.     equipment4 = Sword.equipment62(kind, id)[4]
  150.     equipment4.each{|key, value|
  151.     vtext = sprintf(key.is_a?(Integer) ? '$game_variables[%s]' : 'self.%s', key)
  152.     script += sprintf("disabled = true if %s < %i\n", vtext, value)}
  153.     eval(script)
  154.     disabled
  155.   end
  156.   #-------------------------------------------------------------
  157.   #● 更新裝備效果(裝備位置, 裝備編號)
  158.   def equip_effect62(equip, id)
  159.     if $Sword[3] ; quip_id = equip3[equip] # 「裝備欄位擴充」處理
  160.     else
  161.       case equip # 裝備類型分歧
  162.       when 0 ; quip_id = weapon_id # 武器
  163.       when 1 ; quip_id = armor1_id # 盾
  164.       when 2 ; quip_id = armor2_id # 頭部
  165.       when 3 ; quip_id = armor3_id # 身體
  166.       when 4 ; quip_id = armor4_id # 裝飾品
  167.       end
  168.     end
  169.     #○ 裝備條件(裝備前判斷是否可以裝備)
  170.     if Sword.equip62?(equip, id, 4) # 有裝備的情況
  171.       return true if conditions62?(equip, id)
  172.     end
  173.     #○ 自動狀態(裝備之時附加狀態)
  174.     if Sword.equip62?(equip, quip_id, 2) and quip_id != id # 解除狀態
  175.       Sword.equipment62(equip, quip_id)[2].each{|i|
  176.       state62.delete_at(state62.index(i))
  177.       remove_state(i) unless state62.include?(i)}
  178.     end
  179.     if Sword.equip62?(equip, id, 2) and quip_id != id # 附加狀態
  180.       Sword.equipment62(equip, id)[2].each{|i| add_state(i)}
  181.       self.state62 += Sword.equipment62(equip, id)[2]
  182.     end
  183.     false
  184.   end
  185.   #-------------------------------------------------------------
  186.   #● 檢查是否符合裝備條件處理
  187.   def conditions62
  188.     equip = sword62_sword3(1)
  189.     actor = self.dup ; actor.equip3 = [] # 生成無裝備分身
  190.     equip.each{|item| actor.conditions62?(0, item, 4)}
  191.   end
  192.   #-------------------------------------------------------------
  193.   #● 獲取目前裝備的資料(獲取方式)
  194.   def sword62_sword3(d = 0)
  195.     case d
  196.     when 0 ; $Sword[3] ? equip3 : [weapon_id, armor1_id, armor2_id, armor3_id, armor4_id]
  197.     when 1 ; $Sword[3] ? equip3 : [$data_weapons[weapon_id], $data_armors[armor1_id],
  198.       $data_armors[armor2_id], $data_armors[armor3_id], $data_armors[armor4_id]]
  199.     end
  200.   end
  201. end
  202. #=======================================
  203. #■ 裝備畫面、顯示瀏覽變更裝備的候補物品視窗
  204. class Window_EquipItem < Window_Selectable
  205.   #-------------------------------------------------------------
  206.   #● 獲取普通文字色彩
  207.   alias sword62_normal_color normal_color unless defined?(sword62_normal_color) # unless $Sword_F12_Error[62]
  208.   def normal_color ; @disabled ? disabled_color : sword62_normal_color ; end
  209.   #-------------------------------------------------------------
  210.   #● 項目的描繪(項目符號)
  211.   alias sword62_draw_item draw_item
  212.   def draw_item(index)
  213.     #○ 裝備條件(將不符合條件的裝備顏色變為無效顏色)
  214.     if Sword.equip62?(@equip_type, $Sword[3] ? @data[index] : @data[index].id, 4)
  215.       @disabled = @actor.conditions62?(
  216.       @equip_type, $Sword[3] ? @data[index] : @data[index].id)
  217.     end
  218.     sword62_draw_item(index) ; @disabled = false if @disabled
  219.   end
  220. end
  221. #=======================================
  222. #■ 標題畫面
  223. class Scene_Title
  224.   #-------------------------------------------------------------
  225.   #● 新的遊戲
  226.   alias sword62_command_new_game command_new_game
  227.   def command_new_game
  228.     #Sword.script = [] # 重設腳本字串資料 [裝備條件顏色判斷]
  229.     sword62_command_new_game
  230.     #○ 設定變更
  231.     Sword::Sword62_Weapon.each_index do |i| if Sword::Sword62_Weapon[i]
  232.       script, val = "", Sword::Sword62_Weapon[i]
  233.       if val[0]
  234.         val[0].each{|key, value|
  235.         script += sprintf("$data_weapons[%i].%s = %s\n", i, key, value)}
  236.         eval(script)
  237.       end
  238.     end ; end
  239.     Sword::Sword62_Armor.each_index do |i| if Sword::Sword62_Armor[i]
  240.       script, val = "", Sword::Sword62_Armor[i]
  241.       if val[0]
  242.         val[0].each{|key, value|
  243.         script += sprintf("$data_armors[%i].%s = %s\n", i, key, value)}
  244.         eval(script)
  245.       end
  246.     end ; end
  247.   end
  248. end
  249. #=======================================
  250. #■ 處理裝備畫面的類
  251. class Scene_Equip
  252.   #-------------------------------------------------------------
  253.   #● 更新物品窗口
  254.   alias sword62_update_item update_item
  255.   def update_item
  256.     #○ 裝備條件(中斷更換裝備的處理)
  257.     item = $Sword[3] ? (@item_window.item ? @item_window.item : nil) :
  258.     (@item_window.item ? @item_window.item.id : 0)
  259.     disabled = @actor.equip_effect62(@right_window.index, item) if
  260.     Input.trigger?(Input::C)
  261.     disabled ? XPVX.se_buzzer : sword62_update_item
  262.   end
  263. end
  264. #=======================================
  265. #■ 處理戰鬥畫面的類
  266. class Scene_Battle
  267.   #-------------------------------------------------------------
  268.   #● 主處理
  269.   alias sword62_main main
  270.   def main
  271.     sword62_main
  272.     #○ 自動狀態(戰鬥結束時恢復自動解除後的狀態)
  273.     if Sword::Sword62_2Battle >= 1 ; $game_party.actors.each do |actor|
  274.       equip = [actor.weapon_id, actor.armor1_id,
  275.       actor.armor2_id, actor.armor3_id, actor.armor4_id]
  276.       equip.each_index{|i| next unless equipment = Sword.equipment62(i, equip[i])
  277.       next unless equipment[2]
  278.       equipment[2].each{|ii| actor.add_state(ii)}}
  279.     end ; end
  280.   end
  281. end
  282. $Sword_F12_Error[62] = true # 腳本讀取完畢,打開F12除錯標誌功能
复制代码
详细使用方式:blog.yam.com/a870053jjkj/article/29783547
作者: 亿万星辰    时间: 2013-4-1 06:58

  1. class Game_Actor
  2.   # 武器对应的技能
  3.   # 如 WEAPON_SKILL[1] = 10  1号武器装备后附加10号技能
  4.   WEAPON_SKILL = []
  5.   WEAPON_SKILL[1] = 10
  6.   #--------------------------------------------------------------------------
  7.   # ● 变更装备
  8.   #     equip_type : 装备类型
  9.   #     id    : 武器 or 防具 ID  (0 为解除装备)
  10.   #--------------------------------------------------------------------------
  11.   def equip(equip_type, id)
  12.     case equip_type
  13.     when 0  # 武器
  14.       if id == 0 or $game_party.weapon_number(id) > 0
  15.         $game_party.gain_weapon(@weapon_id, 1)
  16.         unless @weapon_id == 0
  17.           skill_id = WEAPON_SKILL[@weapon_id]
  18.           self.forget_skill(skill_id) if !skill_id.nil?
  19.         end
  20.         @weapon_id = id
  21.         $game_party.lose_weapon(id, 1)
  22.         unless @weapon_id == 0
  23.           skill_id = WEAPON_SKILL[@weapon_id]
  24.           self.learn_skill(skill_id) if !skill_id.nil?
  25.         end
  26.       end
  27.     when 1  # 盾
  28.       if id == 0 or $game_party.armor_number(id) > 0
  29.         update_auto_state($data_armors[@armor1_id], $data_armors[id])
  30.         $game_party.gain_armor(@armor1_id, 1)
  31.         @armor1_id = id
  32.         $game_party.lose_armor(id, 1)
  33.       end
  34.     when 2  # 头
  35.       if id == 0 or $game_party.armor_number(id) > 0
  36.         update_auto_state($data_armors[@armor2_id], $data_armors[id])
  37.         $game_party.gain_armor(@armor2_id, 1)
  38.         @armor2_id = id
  39.         $game_party.lose_armor(id, 1)
  40.       end
  41.     when 3  # 身体
  42.       if id == 0 or $game_party.armor_number(id) > 0
  43.         update_auto_state($data_armors[@armor3_id], $data_armors[id])
  44.         $game_party.gain_armor(@armor3_id, 1)
  45.         @armor3_id = id
  46.         $game_party.lose_armor(id, 1)
  47.       end
  48.     when 4  # 装饰品
  49.       if id == 0 or $game_party.armor_number(id) > 0
  50.         update_auto_state($data_armors[@armor4_id], $data_armors[id])
  51.         $game_party.gain_armor(@armor4_id, 1)
  52.         @armor4_id = id
  53.         $game_party.lose_armor(id, 1)
  54.       end
  55.     end
  56.   end
  57. end
复制代码
Game_Actor中的对应方法,这里感觉处理起来容易一些。
作者: 晴兰    时间: 2013-4-1 13:23
提示: 作者被禁止或删除 内容自动屏蔽
作者: wingzeroplus    时间: 2013-4-1 19:07
http://www.66rpg.com/articles/4457
果然主站没人去么……其实主站上东西都很不错的




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