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

Project1

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

[已经过期] 请教个职业可装备的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
52
在线时间
586 小时
注册时间
2012-5-31
帖子
768
跳转到指定楼层
1
发表于 2013-5-28 19:54:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
RUBY 代码复制
  1. #==============================================================================
  2. # 装备耐久度 测试版
  3. # by 沉影不器
  4. #==============================================================================
  5. #主要更改:
  6. #
  7. # ① 角色的每件装备都是原数据库的克隆品,使每件装备都有唯一id
  8. # ② 角色物品窗口中所有装备单独一格
  9. # ③ 更改了商店中对装备的买卖方式,跳过输入数量,只能一件一件买卖
  10. # ④ 战斗中,打人消耗武器耐久度(非物理攻击的技能不消耗),被打消耗防具耐久度,有一定机率
  11. # ⑤ 装备耐久度降为 0 时即是装备损坏,装备能力消失,可修复
  12. # ⑥ 损坏的装备将在大地图上显示
  13. #------------------------------------------------------------------------------
  14. #使用说明
  15. #
  16. # ① 武器耐久度在[数据库-武器]一栏的武器名称后输入,格式为"武器名,耐久度最大值"
  17. #    例如"铜剑,12"表示铜剑最大耐久度为12
  18. #    防具设定同上
  19. # ② 脚本第28行设定原数据库武器最大id
  20. #    例如:默认数据库里最后一个武器是密斯利尔杖,id是32
  21. # ③ 脚本第29行设定原数据库防具最大id,同上
  22. #    ●以上两个常量为必设,须根据您自己的数据库更改,否则出错
  23. # ④ 脚本第30行设定最大耐久度,
  24. # ⑤ 角色初期装备最好没有重复id的装备,比如默认数据库中几个人物都用了铜盾(id:1)
  25. #    这将使几个人物的该铜盾共享一个耐久度
  26. #==============================================================================
  27. module DUR
  28.   DATA_WEAPON_SIZE = 32 # 原数据库武器最大id
  29.   DATA_ARMOR_SIZE = 32 # 原数据库防具最大id
  30.   DUR_SET_MAX = 999 # 最大耐久度
  31. end
  32. #==============================================================================
  33.  
  34. class Game_Actor < Game_Battler
  35.   #--------------------------------------------------------------------------
  36.   def base_str
  37.     n = $data_actors[@actor_id].parameters[2, @level]
  38.     weapon = $data_weapons[@weapon_id]
  39.     armor1 = $data_armors[@armor1_id]
  40.     armor2 = $data_armors[@armor2_id]
  41.     armor3 = $data_armors[@armor3_id]
  42.     armor4 = $data_armors[@armor4_id]
  43.     n += (weapon != nil and weapon.dur > 0) ? weapon.str_plus : 0
  44.     n += (armor1 != nil and armor1.dur > 0) ? armor1.str_plus : 0
  45.     n += (armor2 != nil and armor2.dur > 0) ? armor2.str_plus : 0
  46.     n += (armor3 != nil and armor3.dur > 0) ? armor3.str_plus : 0
  47.     n += (armor4 != nil and armor4.dur > 0) ? armor4.str_plus : 0
  48.     return [[n, 1].max, 999].min
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   def base_dex
  52.     n = $data_actors[@actor_id].parameters[3, @level]
  53.     weapon = $data_weapons[@weapon_id]
  54.     armor1 = $data_armors[@armor1_id]
  55.     armor2 = $data_armors[@armor2_id]
  56.     armor3 = $data_armors[@armor3_id]
  57.     armor4 = $data_armors[@armor4_id]
  58.     n += (weapon != nil and weapon.dur > 0) ? weapon.dex_plus : 0
  59.     n += (armor1 != nil and armor1.dur > 0) ? armor1.dex_plus : 0
  60.     n += (armor2 != nil and armor2.dur > 0) ? armor2.dex_plus : 0
  61.     n += (armor3 != nil and armor3.dur > 0) ? armor3.dex_plus : 0
  62.     n += (armor4 != nil and armor4.dur > 0) ? armor4.dex_plus : 0
  63.     return [[n, 1].max, 999].min
  64.   end
  65.   #--------------------------------------------------------------------------
  66.   def base_agi
  67.     n = $data_actors[@actor_id].parameters[4, @level]
  68.     weapon = $data_weapons[@weapon_id]
  69.     armor1 = $data_armors[@armor1_id]
  70.     armor2 = $data_armors[@armor2_id]
  71.     armor3 = $data_armors[@armor3_id]
  72.     armor4 = $data_armors[@armor4_id]
  73.     n += (weapon != nil and weapon.dur > 0) ? weapon.agi_plus : 0
  74.     n += (armor1 != nil and armor1.dur > 0) ? armor1.agi_plus : 0
  75.     n += (armor2 != nil and armor2.dur > 0) ? armor2.agi_plus : 0
  76.     n += (armor3 != nil and armor3.dur > 0) ? armor3.agi_plus : 0
  77.     n += (armor4 != nil and armor4.dur > 0) ? armor4.agi_plus : 0
  78.     return [[n, 1].max, 999].min
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   def base_int
  82.     n = $data_actors[@actor_id].parameters[5, @level]
  83.     weapon = $data_weapons[@weapon_id]
  84.     armor1 = $data_armors[@armor1_id]
  85.     armor2 = $data_armors[@armor2_id]
  86.     armor3 = $data_armors[@armor3_id]
  87.     armor4 = $data_armors[@armor4_id]
  88.     n += (weapon != nil and weapon.dur > 0) ? weapon.int_plus : 0
  89.     n += (armor1 != nil and armor1.dur > 0) ? armor1.int_plus : 0
  90.     n += (armor2 != nil and armor2.dur > 0) ? armor2.int_plus : 0
  91.     n += (armor3 != nil and armor3.dur > 0) ? armor3.int_plus : 0
  92.     n += (armor4 != nil and armor4.dur > 0) ? armor4.int_plus : 0
  93.     return [[n, 1].max, 999].min
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   def base_atk
  97.     weapon = $data_weapons[@weapon_id]
  98.     return (weapon != nil and weapon.dur > 0) ? weapon.atk : 0
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   def base_pdef
  102.     weapon = $data_weapons[@weapon_id]
  103.     armor1 = $data_armors[@armor1_id]
  104.     armor2 = $data_armors[@armor2_id]
  105.     armor3 = $data_armors[@armor3_id]
  106.     armor4 = $data_armors[@armor4_id]
  107.     pdef1 = (weapon != nil and weapon.dur > 0) ? weapon.pdef : 0
  108.     pdef2 = (armor1 != nil and armor1.dur > 0) ? armor1.pdef : 0
  109.     pdef3 = (armor2 != nil and armor2.dur > 0) ? armor2.pdef : 0
  110.     pdef4 = (armor3 != nil and armor3.dur > 0) ? armor3.pdef : 0
  111.     pdef5 = (armor4 != nil and armor4.dur > 0) ? armor4.pdef : 0
  112.     return pdef1 + pdef2 + pdef3 + pdef4 + pdef5
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   def base_mdef
  116.     weapon = $data_weapons[@weapon_id]
  117.     armor1 = $data_armors[@armor1_id]
  118.     armor2 = $data_armors[@armor2_id]
  119.     armor3 = $data_armors[@armor3_id]
  120.     armor4 = $data_armors[@armor4_id]
  121.     mdef1 = (weapon != nil and weapon.dur > 0) ? weapon.mdef : 0
  122.     mdef2 = (armor1 != nil and armor1.dur > 0) ? armor1.mdef : 0
  123.     mdef3 = (armor2 != nil and armor2.dur > 0) ? armor2.mdef : 0
  124.     mdef4 = (armor3 != nil and armor3.dur > 0) ? armor3.mdef : 0
  125.     mdef5 = (armor4 != nil and armor4.dur > 0) ? armor4.mdef : 0
  126.     return mdef1 + mdef2 + mdef3 + mdef4 + mdef5
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   def base_eva
  130.     armor1 = $data_armors[@armor1_id]
  131.     armor2 = $data_armors[@armor2_id]
  132.     armor3 = $data_armors[@armor3_id]
  133.     armor4 = $data_armors[@armor4_id]
  134.     eva1 = (armor1 != nil and armor1.dur > 0) ? armor1.eva : 0
  135.     eva2 = (armor2 != nil and armor2.dur > 0) ? armor2.eva : 0
  136.     eva3 = (armor3 != nil and armor3.dur > 0) ? armor3.eva : 0
  137.     eva4 = (armor4 != nil and armor4.dur > 0) ? armor4.eva : 0
  138.     return eva1 + eva2 + eva3 + eva4
  139.   end
  140. end
  141. #==============================================================================
  142.  
  143. class Game_Party
  144.   #--------------------------------------------------------------------------
  145.   attr_accessor   :weapons
  146.   attr_accessor   :armors
  147.   #--------------------------------------------------------------------------
  148.   def weapon_number(weapon_id)
  149.     return @weapons.include?(weapon_id) ? @weapons[weapon_id] : 0
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # 以下修改于<<武器攻击力波动>>(灼眼的夏娜)
  153.   def gain_weapon(weapon_id, n)
  154.     if weapon_id > 0
  155.       if n > 0 # 增加武器的情况
  156.         n = 1
  157.         # 装备栏中使用的武器不处理~
  158.         if $scene.is_a?(Scene_Equip)
  159.           @weapons[weapon_id] = [[weapon_number(weapon_id) + n, 0].max, 99].min
  160.         else
  161.           new_weapon = $data_weapons[weapon_id].clone
  162.           new_weapon.dur_set = $data_weapons[weapon_id].dur_set
  163.           new_weapon.dur = $data_weapons[weapon_id].dur_set
  164.           new_weapon.id = $data_weapons.size
  165.           #数据库扩容
  166.           $data_weapons.push(new_weapon)
  167.           # 职业可装备武器数组更新~
  168.           for i in 1...$data_classes.size
  169.             if $data_classes[i].weapon_set.include?(weapon_id)
  170.               $data_classes[i].weapon_set.push(new_weapon.id)
  171.             end
  172.           end
  173.           # 增加武器~
  174.           @weapons[new_weapon.id] = [[weapon_number(new_weapon.id) + n, 0].max, 99].min
  175.         end
  176.       else # n < 0 减少武器的情况(未定的情况: n = 0)
  177.         n = -1
  178.         # 装备栏中卸下的武器不处理~
  179.         if $scene.is_a?(Scene_Equip)
  180.           @weapons[weapon_id] = [[weapon_number(weapon_id) + n, 0].max, 99].min
  181.         else
  182.           lose_name = $data_weapons[weapon_id].name
  183.           dur_min = DUR::DUR_SET_MAX
  184.           for i in DUR::DATA_WEAPON_SIZE+1...$data_weapons.size
  185.             # 重新确定weapon_id,必定在原武器数据库之外
  186.             # 减少同名武器中耐久度最低的
  187.             if $data_weapons[i].name == lose_name and $data_weapons[i].dur < dur_min
  188.               weapon_id = i
  189.             end
  190.           end
  191.           # 已不存在的不做操作
  192.           if weapon_number(weapon_id) <= 0
  193.             return
  194.           end
  195.           # 减少武器
  196.           @weapons[weapon_id] = [[weapon_number(weapon_id) + n, 0].max, 99].min
  197.           # 删除行囊拥有的武器id,后id补进
  198.           @weapons.delete(weapon_id)
  199.           weapon_keys = @weapons.keys.sort!
  200.           for i in weapon_keys
  201.             if i > weapon_id
  202.               @weapons[i-1] = @weapons[i]
  203.               @weapons.delete(i)
  204.             end
  205.           end
  206.           # 更改角色使用中的武器id
  207.           for i in [email]0...@actors.size[/email]
  208.             if @actors[i].weapon_id != nil and @actors[i].weapon_id > weapon_id
  209.               @actors[i].weapon_id -= 1
  210.             end
  211.           end
  212.           if weapon_id > DUR::DATA_WEAPON_SIZE
  213.             # 删除数据库武器id,后补进
  214.             for i in weapon_id+1...$data_weapons.size
  215.               $data_weapons[i].id -= 1
  216.             end
  217.             $data_weapons.delete_at(weapon_id)
  218.             # 职业可装备武器数组更新
  219.             for i in 1...$data_classes.size
  220.               if $data_classes[i].weapon_set.include?(weapon_id)
  221.                 $data_classes[i].weapon_set.delete(weapon_id)
  222.               end
  223.               for j in $data_classes[i].weapon_set
  224.                 if j > weapon_id
  225.                   $data_classes[i].weapon_set.delete(j)
  226.                   j -= 1
  227.                   $data_classes[i].weapon_set.push(j)
  228.                 end
  229.               end
  230.             end
  231.           end
  232.         end
  233.       end
  234.     end
  235.   end
  236.   #--------------------------------------------------------------------------
  237.   def gain_armor(armor_id, n)
  238.     if armor_id > 0
  239.       if n > 0 # 增加防具的情况
  240.         n = 1
  241.         # 装备栏中使用的防具不处理~
  242.         if $scene.is_a?(Scene_Equip)
  243.           @armors[armor_id] = [[armor_number(armor_id) + n, 0].max, 99].min
  244.         else
  245.           new_armor = $data_armors[armor_id].clone
  246.           new_armor.dur_set = $data_armors[armor_id].dur_set
  247.           new_armor.dur = $data_armors[armor_id].dur_set
  248.           new_armor.id = $data_armors.size
  249.           #数据库扩容
  250.           $data_armors.push(new_armor)
  251.           # 职业可装备防具数组更新~
  252.           for i in 1...$data_classes.size
  253.             if $data_classes[i].armor_set.include?(armor_id)
  254.               $data_classes[i].armor_set.push(new_armor.id)
  255.             end
  256.           end
  257.           # 增加防具
  258.           @armors[new_armor.id] = [[armor_number(new_armor.id) + n, 0].max, 99].min
  259.         end
  260.       else # n < 0 减少防具的情况(未定的情况: n = 0)
  261.         n = -1
  262.         # 装备栏中卸下的防具不处理
  263.         if $scene.is_a?(Scene_Equip)
  264.           @armors[armor_id] = [[armor_number(armor_id) + n, 0].max, 99].min
  265.         else
  266.           lose_name = $data_armors[armor_id].name
  267.           dur_min = DUR::DUR_SET_MAX
  268.           for i in DUR::DATA_ARMOR_SIZE+1...$data_armors.size
  269.             # 重新确定armor_id,必定在原防具数据库之外
  270.             # 减少同名防具中耐久度最低的
  271.             if $data_armors[i].name == lose_name and $data_armors[i].dur < dur_min
  272.               armor_id = i
  273.             end
  274.           end
  275.           # 已不存在的不做操作
  276.           if armor_number(armor_id) <= 0
  277.             return
  278.           end
  279.           # 减少防具
  280.           @armors[armor_id] = [[armor_number(armor_id) + n, 0].max, 99].min
  281.           # 删除行囊拥有的防具id,后id补进
  282.           @weapons.delete(armor_id)
  283.           armor_keys = @armors.keys.sort!
  284.           for i in armor_keys
  285.             if i > armor_id
  286.               @armors[i-1] = @armors[i]
  287.               @armors.delete(i)
  288.             end
  289.           end
  290.           # 更改角色使用中的防具id
  291.           for i in [email]0...@actors.size[/email]
  292.             if @actors[i].armor1_id != nil and @actors[i].armor1_id > armor_id
  293.               @actors[i].armor1_id -= 1
  294.             end
  295.             if @actors[i].armor2_id != nil and @actors[i].armor2_id > armor_id
  296.               @actors[i].armor2_id -= 1
  297.             end
  298.             if @actors[i].armor3_id != nil and @actors[i].armor3_id > armor_id
  299.               @actors[i].armor3_id -= 1
  300.             end
  301.             if @actors[i].armor4_id != nil and @actors[i].armor4_id > armor_id
  302.               @actors[i].armor4_id -= 1
  303.             end
  304.           end
  305.           if armor_id > DUR::DATA_ARMOR_SIZE
  306.             # 删除数据库防具id,后补进
  307.             for i in armor_id+1...$data_armors.size
  308.               $data_armors[i].id -= 1
  309.             end
  310.             $data_armors.delete_at(armor_id)
  311.             # 职业可装备防具数组更新
  312.             for i in 1...$data_classes.size
  313.               if $data_classes[i].armor_set.include?(armor_id)
  314.                 $data_classes[i].armor_set.delete(armor_id)
  315.               end
  316.               for j in $data_classes[i].armor_set
  317.                 if j > armor_id
  318.                   $data_classes[i].armor_set.delete(j)
  319.                   j -= 1
  320.                   $data_classes[i].armor_set.push(j)
  321.                 end
  322.               end
  323.             end
  324.           end
  325.         end
  326.       end
  327.     end
  328.   end
  329. end
  330. # ===========================================================================
  331.  
  332. class Window_Item < Window_Selectable
  333.   #--------------------------------------------------------------------------
  334.   def update_help
  335.     description = ""
  336.     if self.item != nil
  337.       description = self.item.description
  338.       if !self.item.is_a? RPG::Item
  339.         dur_set = item.dur_set
  340.         dur = item.dur
  341.         description = description + " 耐久度: #{dur}/#{dur_set}"
  342.       end
  343.     end
  344.     @help_window.set_text(description)
  345.   end
  346. end
  347. # ===========================================================================
  348.  
  349. class Window_EquipItem < Window_Selectable
  350.   #--------------------------------------------------------------------------
  351.   def update_help
  352.     description = ""
  353.     if self.item != nil
  354.       description = self.item.description
  355.       dur_set = item.dur_set
  356.       dur = item.dur
  357.       description = description + " 耐久度: #{dur}/#{dur_set}"
  358.     end
  359.     @help_window.set_text(description)
  360.   end
  361. end
  362. # ===========================================================================
  363.  
  364. class Window_EquipRight < Window_Selectable
  365.   #--------------------------------------------------------------------------
  366.   def update_help
  367.     description = ""
  368.     if self.item != nil
  369.       description = self.item.description
  370.       dur_set = item.dur_set
  371.       dur = item.dur
  372.       description = description + " 耐久度: #{dur}/#{dur_set}"
  373.     end
  374.     @help_window.set_text(description)
  375.   end
  376. end
  377. #==============================================================================
  378.  
  379. class Window_ShopBuy < Window_Selectable
  380.   #--------------------------------------------------------------------------
  381.   def update_help
  382.     description = ""
  383.     if self.item != nil
  384.       description = self.item.description
  385.       if !self.item.is_a? RPG::Item
  386.         dur_set = item.dur_set
  387.         dur = item.dur
  388.         description = description + " 耐久度: #{dur}/#{dur_set}"
  389.       end
  390.     end
  391.     @help_window.set_text(description)
  392.   end
  393. end
  394. #==============================================================================
  395.  
  396. class Window_ShopSell < Window_Selectable
  397.   #--------------------------------------------------------------------------
  398.   def update_help
  399.     description = ""
  400.     if self.item != nil
  401.       description = self.item.description
  402.       if !self.item.is_a? RPG::Item
  403.         dur_set = item.dur_set
  404.         dur = item.dur
  405.         description = description + " 耐久度: #{dur}/#{dur_set}"
  406.       end
  407.     end
  408.     @help_window.set_text(description)
  409.   end
  410. end
  411. #==============================================================================
  412.  
  413. class Scene_Title
  414.   #--------------------------------------------------------------------------
  415.   alias main_add_dur main
  416.   def main
  417.     main_add_dur
  418.     # 战斗测试的情况下
  419.     if $BTEST
  420.       battle_test
  421.       return
  422.     end
  423.     $data_weapons = load_data("Data/Weapons.rxdata")
  424.     $data_armors = load_data("Data/Armors.rxdata")
  425.     # 初始化耐久度
  426.     for i in 1...$data_weapons.size
  427.       $data_weapons[i].dur = $data_weapons[i].dur_set
  428.     end
  429.     for i in 1...$data_armors.size
  430.       $data_armors[i].dur = $data_armors[i].dur_set
  431.     end
  432.   end
  433. end
  434. #==============================================================================
  435.  
  436. class Scene_Shop
  437.   #--------------------------------------------------------------------------
  438.   def update_buy
  439.     @status_window.item = @buy_window.item
  440.     if Input.trigger?(Input::B)
  441.       $game_system.se_play($data_system.cancel_se)
  442.       # 窗口状态转向初期模式
  443.       @command_window.active = true
  444.       @dummy_window.visible = true
  445.       @buy_window.active = false
  446.       @buy_window.visible = false
  447.       @status_window.visible = false
  448.       @status_window.item = nil
  449.       @help_window.set_text("")
  450.       return
  451.     end
  452.     if Input.trigger?(Input::C)
  453.       @item = @buy_window.item
  454.       if @item == nil or @item.price > $game_party.gold
  455.         $game_system.se_play($data_system.buzzer_se)
  456.         return
  457.       end
  458.       case @item
  459.       when RPG::Item
  460.         number = $game_party.item_number(@item.id)
  461.       when RPG::Weapon
  462.         number = $game_party.weapon_number(@item.id)
  463.       when RPG::Armor
  464.         number = $game_party.armor_number(@item.id)
  465.       end
  466.       if number == 99
  467.         $game_system.se_play($data_system.buzzer_se)
  468.         return
  469.       end
  470.       $game_system.se_play($data_system.decision_se)
  471.       max = @item.price == 0 ? 99 : $game_party.gold / @item.price
  472.       max = [max, 99 - number].min
  473.       if @item.is_a? RPG::Item # 除物品外直接买进1件
  474.         @buy_window.active = false
  475.         @buy_window.visible = false
  476.         @number_window.set(@item, max, @item.price)
  477.         @number_window.active = true
  478.         @number_window.visible = true
  479.       else
  480.         update_number
  481.       end
  482.     end
  483.   end
  484.   #--------------------------------------------------------------------------
  485.   def update_sell
  486.     if Input.trigger?(Input::B)
  487.       $game_system.se_play($data_system.cancel_se)
  488.       @command_window.active = true
  489.       @dummy_window.visible = true
  490.       @sell_window.active = false
  491.       @sell_window.visible = false
  492.       @status_window.item = nil
  493.       @help_window.set_text("")
  494.       return
  495.     end
  496.     if Input.trigger?(Input::C)
  497.       @item = @sell_window.item
  498.       @status_window.item = @item
  499.       if @item == nil or @item.price == 0
  500.         $game_system.se_play($data_system.buzzer_se)
  501.         return
  502.       end
  503.       $game_system.se_play($data_system.decision_se)
  504.       case @item
  505.       when RPG::Item
  506.         number = $game_party.item_number(@item.id)
  507.       when RPG::Weapon
  508.         number = $game_party.weapon_number(@item.id)
  509.       when RPG::Armor
  510.         number = $game_party.armor_number(@item.id)
  511.       end
  512.       max = number
  513.       if @item.is_a? RPG::Item # 除物品外直接卖出1件
  514.         @sell_window.active = false
  515.         @sell_window.visible = false
  516.         @number_window.set(@item, max, @item.price / 2)
  517.         @number_window.active = true
  518.         @number_window.visible = true
  519.         @status_window.visible = true
  520.       else
  521.         update_number
  522.       end
  523.     end
  524.   end
  525. end
  526. #==============================================================================
  527.  
  528. class Game_Battler
  529.   #--------------------------------------------------------------------------
  530.   def attack_effect(attacker)
  531.     self.critical = false
  532.     hit_result = (rand(100) < attacker.hit)
  533.     if hit_result == true
  534.       atk = [attacker.atk - self.pdef / 2, 0].max
  535.       self.damage = atk * (20 + attacker.str) / 20
  536.       self.damage *= elements_correct(attacker.element_set)
  537.       self.damage /= 100
  538.       if self.damage > 0
  539.         if rand(100) < 4 * attacker.dex / self.agi
  540.           self.damage *= 2
  541.           self.critical = true
  542.         end
  543.         if self.guarding?
  544.           self.damage /= 2
  545.         end
  546.       end
  547.       if self.damage.abs > 0
  548.         amp = [self.damage.abs * 15 / 100, 1].max
  549.         self.damage += rand(amp+1) + rand(amp+1) - amp
  550.       end
  551.       eva = 8 * self.agi / attacker.dex + self.eva
  552.       hit = self.damage < 0 ? 100 : 100 - eva
  553.       hit = self.cant_evade? ? 100 : hit
  554.       hit_result = (rand(100) < hit)
  555.     end
  556.     if hit_result == true
  557.       remove_states_shock
  558.       self.hp -= self.damage
  559.       @state_changed = false
  560.       states_plus(attacker.plus_state_set)
  561.       states_minus(attacker.minus_state_set)
  562.     else
  563.       self.damage = "Miss"
  564.       self.critical = false
  565.     end
  566.     # 耐久度判断
  567.     if hit_result == true
  568.       if self.is_a?(Game_Actor) # 如果挨打的是角色,减防具耐久度
  569.         armor_kind =  1 + rand(4)
  570.         case armor_kind
  571.         when 1
  572.           if self.armor1_id != nil and self.armor1_id > 0
  573.             if rand(2) == 0 and $data_armors[self.armor1_id].dur > 0
  574.               $data_armors[self.armor1_id].dur -= 1
  575.             end
  576.           end
  577.         when 2
  578.           if self.armor2_id != nil and self.armor2_id > 0
  579.             if rand(2) == 0 and $data_armors[self.armor2_id].dur > 0
  580.               $data_armors[self.armor2_id].dur -= 1
  581.             end
  582.           end
  583.         when 3
  584.           if self.armor3_id != nil and self.armor3_id > 0
  585.             if rand(2) == 0 and $data_armors[self.armor3_id].dur > 0
  586.               $data_armors[self.armor3_id].dur -= 1
  587.             end
  588.           end
  589.         when 4
  590.           if self.armor4_id != nil and self.armor4_id > 0
  591.             if rand(2) == 0 and $data_armors[self.armor4_id].dur > 0
  592.               $data_armors[self.armor4_id].dur -= 1
  593.             end
  594.           end
  595.         end
  596.       else  # 角色打人,减武器耐久度
  597.         if attacker.weapon_id != nil and attacker.weapon_id > 0
  598.           if rand(8) == 0 and $data_weapons[attacker.weapon_id].dur > 0
  599.             $data_weapons[attacker.weapon_id].dur -= 1
  600.           end
  601.         end
  602.       end
  603.     end
  604.     # 过程结束
  605.     return true
  606.   end
  607.   #--------------------------------------------------------------------------
  608.   def skill_effect(user, skill)
  609.     self.critical = false
  610.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  611.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  612.       return false
  613.     end
  614.     effective = false
  615.     effective |= skill.common_event_id > 0
  616.     hit = skill.hit
  617.     if skill.atk_f > 0
  618.       hit *= user.hit / 100
  619.     end
  620.     hit_result = (rand(100) < hit)
  621.     effective |= hit < 100
  622.     if hit_result == true
  623.       power = skill.power + user.atk * skill.atk_f / 100
  624.       if power > 0
  625.         power -= self.pdef * skill.pdef_f / 200
  626.         power -= self.mdef * skill.mdef_f / 200
  627.         power = [power, 0].max
  628.       end
  629.       rate = 20
  630.       rate += (user.str * skill.str_f / 100)
  631.       rate += (user.dex * skill.dex_f / 100)
  632.       rate += (user.agi * skill.agi_f / 100)
  633.       rate += (user.int * skill.int_f / 100)
  634.       self.damage = power * rate / 20
  635.       self.damage *= elements_correct(skill.element_set)
  636.       self.damage /= 100
  637.       if self.damage > 0
  638.         if self.guarding?
  639.           self.damage /= 2
  640.         end
  641.       end
  642.       if skill.variance > 0 and self.damage.abs > 0
  643.         amp = [self.damage.abs * skill.variance / 100, 1].max
  644.         self.damage += rand(amp+1) + rand(amp+1) - amp
  645.       end
  646.       eva = 8 * self.agi / user.dex + self.eva
  647.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  648.       hit = self.cant_evade? ? 100 : hit
  649.       hit_result = (rand(100) < hit)
  650.       effective |= hit < 100
  651.     end
  652.     if hit_result == true
  653.       if skill.power != 0 and skill.atk_f > 0
  654.         remove_states_shock
  655.         effective = true
  656.       end
  657.       last_hp = self.hp
  658.       self.hp -= self.damage
  659.       effective |= self.hp != last_hp
  660.       @state_changed = false
  661.       effective |= states_plus(skill.plus_state_set)
  662.       effective |= states_minus(skill.minus_state_set)
  663.       if skill.power == 0
  664.         self.damage = ""
  665.         unless @state_changed
  666.           self.damage = "Miss"
  667.         end
  668.       end
  669.     else
  670.       self.damage = "Miss"
  671.     end
  672.     unless $game_temp.in_battle
  673.       self.damage = nil
  674.     end
  675.     # 耐久度判断
  676.     if hit_result == true
  677.       if self.is_a?(Game_Actor) # 如果挨打的是角色,减防具耐久度
  678.         armor_kind =  1 + rand(4)
  679.         case armor_kind
  680.         when 1
  681.           if self.armor1_id != nil and self.armor1_id > 0
  682.             if rand(2) == 0 and $data_armors[self.armor1_id].dur > 0
  683.               $data_armors[self.armor1_id].dur -= 1
  684.             end
  685.           end
  686.         when 2
  687.           if self.armor2_id != nil and self.armor2_id > 0
  688.             if rand(2) == 0 and $data_armors[self.armor2_id].dur > 0
  689.               $data_armors[self.armor2_id].dur -= 1
  690.             end
  691.           end
  692.         when 3
  693.           if self.armor3_id != nil and self.armor3_id > 0
  694.             if rand(2) == 0 and $data_armors[self.armor3_id].dur > 0
  695.               $data_armors[self.armor3_id].dur -= 1
  696.             end
  697.           end
  698.         when 4
  699.           if self.armor4_id != nil and self.armor4_id > 0
  700.             if rand(2) == 0 and $data_armors[self.armor4_id].dur > 0
  701.               $data_armors[self.armor4_id].dur -= 1
  702.             end
  703.           end
  704.         end
  705.       else  # 角色打人,减武器耐久度
  706.         if user.weapon_id != nil and user.weapon_id > 0
  707.           if rand(8) == 0 and $data_weapons[user.weapon_id].dur > 0
  708.             if skill.atk_f == 0 # 非物理技能不损武器耐久度
  709.               $data_weapons[user.weapon_id].dur -= 1
  710.             end
  711.           end
  712.         end
  713.       end
  714.     end
  715.     # 过程结束
  716.     return effective
  717.   end
  718. end
  719. #==============================================================================
  720.  
  721. class Window_Dur < Window_Base
  722.   #--------------------------------------------------------------------------
  723.   def initialize
  724.     super(0,0,320,480)
  725.     self.opacity = 0
  726.     self.contents = Bitmap.new(width - 32, height - 32)
  727.     @text_dur_old = [0]
  728.     @text_dur = []
  729.     refresh
  730.   end
  731.   #--------------------------------------------------------------------------
  732.   def draw_text_dur(index,y)
  733.     text = @text_dur[index]
  734.     tx = 0
  735.     ty = index * 24 + y
  736.     self.contents.font.color = normal_color
  737.     self.contents.draw_text(tx, ty, 320-32, 24, text)
  738.   end
  739.   #--------------------------------------------------------------------------
  740.   def refresh
  741.     # 节省内存
  742.     if @text_dur_old == @text_dur
  743.       return
  744.     end
  745.     @text_dur.clear
  746.     # 取得空耐久度的装备名
  747.     for i in $game_party.actors
  748.       if $data_weapons[i.weapon_id] != nil and $data_weapons[i.weapon_id].dur == 0
  749.         @text_dur.push(i.name + "-" + $data_weapons[i.weapon_id].name)
  750.       end
  751.       if $data_armors[i.armor1_id] != nil and $data_armors[i.armor1_id].dur == 0
  752.         @text_dur.push(i.name + "-" + $data_armors[i.armor1_id].name)
  753.       end
  754.       if $data_armors[i.armor2_id] != nil and $data_armors[i.armor2_id].dur == 0
  755.         @text_dur.push(i.name + "-" + $data_armors[i.armor2_id].name)
  756.       end
  757.       if $data_armors[i.armor3_id] != nil and $data_armors[i.armor3_id].dur == 0
  758.         @text_dur.push(i.name + "-" + $data_armors[i.armor3_id].name)
  759.       end
  760.       if $data_armors[i.armor4_id] != nil and $data_armors[i.armor4_id].dur == 0
  761.         @text_dur.push(i.name + "-" + $data_armors[i.armor4_id].name)
  762.       end
  763.     end
  764.     @text_dur_old = @text_dur
  765.     y = 448 - @text_dur.size * 24
  766.     self.contents.clear
  767.     self.contents.font.size = 14
  768.     if @text_dur != []
  769.       self.contents.font.color = Color.new(255, 0, 0) # 红色显示
  770.       self.contents.draw_text(0, y - 24, 320 - 32, 24, "装备损坏:")
  771.     end
  772.     for i in 0... @text_dur.size
  773.       draw_text_dur(i,y)
  774.     end
  775.     self.contents.font.size = Font.default_size
  776.   end
  777. end
  778. #==============================================================================
  779.  
  780. class Scene_Map
  781.   #--------------------------------------------------------------------------
  782.   def main
  783.     @spriteset = Spriteset_Map.new
  784.     @message_window = Window_Message.new
  785.     @dur_window = Window_Dur.new
  786.     Graphics.transition
  787.     loop do
  788.       Graphics.update
  789.       Input.update
  790.       update
  791.       if $scene != self
  792.         break
  793.       end
  794.     end
  795.     Graphics.freeze
  796.     @spriteset.dispose
  797.     @message_window.dispose
  798.     @dur_window.dispose
  799.     if $scene.is_a?(Scene_Title)
  800.       Graphics.transition
  801.       Graphics.freeze
  802.     end
  803.   end
  804.   #--------------------------------------------------------------------------
  805.   def update
  806.     loop do
  807.       $game_map.update
  808.       $game_system.map_interpreter.update
  809.       $game_player.update
  810.       $game_system.update
  811.       $game_screen.update
  812.       unless $game_temp.player_transferring
  813.         break
  814.       end
  815.       transfer_player
  816.       if $game_temp.transition_processing
  817.         break
  818.       end
  819.     end
  820.     @spriteset.update
  821.     @message_window.update
  822.     @dur_window.update
  823.     if $game_temp.gameover
  824.       $scene = Scene_Gameover.new
  825.       return
  826.     end
  827.     if $game_temp.to_title
  828.       $scene = Scene_Title.new
  829.       return
  830.     end
  831.     if $game_temp.transition_processing
  832.       $game_temp.transition_processing = false
  833.       if $game_temp.transition_name == ""
  834.         Graphics.transition(20)
  835.       else
  836.         Graphics.transition(40, "Graphics/Transitions/" +
  837.           $game_temp.transition_name)
  838.       end
  839.     end
  840.     if $game_temp.message_window_showing
  841.       return
  842.     end
  843.     if $game_player.encounter_count == 0 and $game_map.encounter_list != []
  844.       unless $game_system.map_interpreter.running? or
  845.              $game_system.encounter_disabled
  846.         n = rand($game_map.encounter_list.size)
  847.         troop_id = $game_map.encounter_list[n]
  848.         if $data_troops[troop_id] != nil
  849.           $game_temp.battle_calling = true
  850.           $game_temp.battle_troop_id = troop_id
  851.           $game_temp.battle_can_escape = true
  852.           $game_temp.battle_can_lose = false
  853.           $game_temp.battle_proc = nil
  854.         end
  855.       end
  856.     end
  857.     if Input.trigger?(Input::B)
  858.       unless $game_system.map_interpreter.running? or
  859.              $game_system.menu_disabled
  860.         $game_temp.menu_calling = true
  861.         $game_temp.menu_beep = true
  862.       end
  863.     end
  864.     if $DEBUG and Input.press?(Input::F9)
  865.       $game_temp.debug_calling = true
  866.     end
  867.     unless $game_player.moving?
  868.       if $game_temp.battle_calling
  869.         call_battle
  870.       elsif $game_temp.shop_calling
  871.         call_shop
  872.       elsif $game_temp.name_calling
  873.         call_name
  874.       elsif $game_temp.menu_calling
  875.         call_menu
  876.       elsif $game_temp.save_calling
  877.         call_save
  878.       elsif $game_temp.debug_calling
  879.         call_debug
  880.       end
  881.     end
  882.   end
  883. end
  884. #==============================================================================
  885.  
  886. class Scene_Save < Scene_File
  887.   #--------------------------------------------------------------------------
  888.   def write_save_data(file)
  889.     characters = []
  890.     for i in 0...$game_party.actors.size
  891.       actor = $game_party.actors[i]
  892.       characters.push([actor.character_name, actor.character_hue])
  893.     end
  894.     Marshal.dump(characters, file)
  895.     Marshal.dump(Graphics.frame_count, file)
  896.     $game_system.save_count += 1
  897.     $game_system.magic_number = $data_system.magic_number
  898.     Marshal.dump($game_system, file)
  899.     Marshal.dump($game_switches, file)
  900.     Marshal.dump($game_variables, file)
  901.     Marshal.dump($game_self_switches, file)
  902.     Marshal.dump($game_screen, file)
  903.     Marshal.dump($game_actors, file)
  904.     Marshal.dump($game_party, file)
  905.     Marshal.dump($game_troop, file)
  906.     Marshal.dump($game_map, file)
  907.     Marshal.dump($game_player, file)
  908.     Marshal.dump($data_weapons, file)
  909.     Marshal.dump($data_armors, file)
  910.     Marshal.dump($data_classes, file)
  911.   end
  912. end
  913. #==============================================================================
  914.  
  915. module RPG
  916.   class Weapon
  917.     attr_accessor :dur_set
  918.     attr_accessor :dur
  919.     def name
  920.       name = @name.split(/,/)[0]
  921.       return name != nil ? name : ''
  922.     end
  923.     def dur_set
  924.       dur_set = @name.split(/,/)[1]
  925.       return dur_set != nil ? dur_set.to_i : 0
  926.     end
  927.   end
  928.   class Armor
  929.     attr_accessor :dur_set
  930.     attr_accessor :dur
  931.     def name
  932.       name = @name.split(/,/)[0]
  933.       return name != nil ? name : ''
  934.     end
  935.     def dur_set
  936.       dur_set = @name.split(/,/)[1]
  937.       return dur_set != nil ? dur_set.to_i : 0
  938.     end
  939.   end
  940. end



用了这个脚本,获得装备正常,可是卖出装备后,职业可装备的装备就乱了(本来可装备的也不能装备了),请大大们指点一二

Lv1.梦旅人

梦石
0
星屑
52
在线时间
586 小时
注册时间
2012-5-31
帖子
768
2
 楼主| 发表于 2013-5-29 13:51:59 | 只看该作者
呼叫大大们
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 09:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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