XP 스크립트

장비품에 파괴 확률을 설정할 수 있도록 하는 스크립트입니다.

#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/  ◆装備品破壊 - KGC_EquipmentBreak◆
#_/----------------------------------------------------------------------------
#_/ 武器や防具を破壊する処理を追加します。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

$imported = {} if $imported == nil
$imported["EquipmentBreak"] = true

if $game_special_elements == nil
  $game_special_elements = {}
  $data_system = load_data("Data/System.rxdata")
end
# 装備破壊確率属性
$game_special_elements["equipment_break"] = /破壊確率(d+)(%|%)/

#==============================================================================
# ■ Game_Battler (分割定義 3)
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● 通常攻撃の効果適用
  #--------------------------------------------------------------------------
  alias attack_effect_KGC_EquipmentBreak attack_effect
  def attack_effect(attacker)
    # 元の処理を実行
    result = attack_effect_KGC_EquipmentBreak(attacker)

    if result && self.damage.is_a?(Numeric)
      # 武器破壊判定
      attacker.break_equipment(0) if attacker.is_a?(Game_Actor)
      # 防具破壊判定
      self.break_equipment(1) if self.is_a?(Game_Actor)
    end
    return result
  end
  #--------------------------------------------------------------------------
  # ● スキルの効果適用
  #--------------------------------------------------------------------------
  alias skill_effect_KGC_EquipmentBreak skill_effect
  def skill_effect(user, skill)
    # 元の処理を実行
    result = skill_effect_KGC_EquipmentBreak(user, skill)

    # 物理スキルでダメージを受けた場合
    if result && skill.atk_f > 0 && self.damage.is_a?(Numeric)
      # 武器破壊判定
      user.break_equipment(0) if user.is_a?(Game_Actor)
      # 防具破壊判定
      self.break_equipment(1) if self.is_a?(Game_Actor)
    end
    return result
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :weapon_broken            # 武器破壊フラグ
  attr_accessor :armor_broken            # 防具破壊フラグ
  #--------------------------------------------------------------------------
  # ● セットアップ
  #    actor_id : アクター ID
  #--------------------------------------------------------------------------
  alias setup_KGC_EquipmentBreak setup
  def setup(actor_id)
    # 元の処理を実行
    setup_KGC_EquipmentBreak(actor_id)

    @weapon_broken, @armor_broken = false, false
  end
  #--------------------------------------------------------------------------
  # ● 装備品破壊判定
  #    type : 装備品のタイプ(0:武器 1:防具)
  #--------------------------------------------------------------------------
  def break_equipment(type)
    srand
    case type
    when 0  # 武器の場合
      # 装備している武器を取得
      if $imported["EquipExtension"] && self.two_swords?
        weapons = []
        self.ts_number.times { |i|
          next if self.weapon_id(i) == 0
          weapons << $data_weapons[self.weapon_id(i)]
        }
      else
        return if self.weapon_id == 0
        weapons = [$data_weapons[self.weapon_id]]
      end
      # 破壊判定
      weapons.each { |weapon|
        prob = 0
        weapon.element_set.compact.each { |element|
          if $game_special_elements["equipment_break"] =~ $data_system.elements[element]
            prob = $1.to_i
            break
          end
        }
        if prob != nil && rand(100) < prob
          # 破損した武器のIDを取得
          broken_weapon = weapon.id
          # 装備を外す
          equip(0, 0)
          # 破損した武器を減らす
          $game_party.lose_weapon(broken_weapon, 1)
          # 破壊フラグをオン
          @weapon_broken = true
        end
      }
    when 1  # 防具の場合
      st = $imported["EquipExtension"] && self.two_swords? ? self.ts_number : 1
      ed = $imported["EquipExtension"] ? self.equip_type.size : 5
      (st...ed).each { |i|
        armor_id = $imported["EquipExtension"] ? self.armor_id[i] : eval("@armor#{i}_id")
        # 防具を装備していない場合はスキップ
        next if armor_id == nil || armor_id == 0
        # 装備している防具を取得
        armor = $data_armors[armor_id]
        # 破壊判定
        prob = 0
        armor.guard_element_set.compact.each { |element|
          if $game_special_elements["equipment_break"] =~ $data_system.elements[element]
            prob = $1.to_i
            break
          end
        }
        if prob != nil && rand(100) < prob
          # 装備を外す
          equip(i, 0)
          # 破損した防具を減らす
          $game_party.lose_armor(armor_id, 1)
          # 破壊フラグをオン
          @armor_broken = true
          prob = nil
        end
      }
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Battle (分割定義 4)
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  #--------------------------------------------------------------------------
  alias update_phase4_step5_KGC_EquipmentBreak update_phase4_step5
  def update_phase4_step5
    # 元の処理を実行
    update_phase4_step5_KGC_EquipmentBreak

    # 装備破壊表示
    for actor in $game_party.actors
      next if actor == nil
      # 武器破壊フラグがオンの場合
      if actor.weapon_broken
        # ダメージに "Weapon Broken" を設定
        actor.damage = "Weapon Broken" if actor.damage == nil
        actor.damage_pop = true
        # 破壊フラグを立てる
        @broken = true
      end
      # 防具破壊フラグがオンの場合
      if actor.armor_broken
        # ダメージに "Armor Broken" を設定
        actor.damage = "Armor Broken" if actor.damage == nil
        actor.damage_pop = true
        # 破壊フラグを立てる
        @broken = true
      end
      # フラグをオフ
      actor.weapon_broken = false
      actor.armor_broken = false
    end
    # 破壊フラグがオンの場合
    if @broken
      # ヘルプウィンドウに表示
      @help_window.set_text("装備品が壊れた!!", 1)
      # 破壊 SE を演奏
      Audio.se_play("Audio/SE/097-Attack09", 80, 50)
      # ウェイトカウントを設定
      @wait_count = 20
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
  #--------------------------------------------------------------------------
  alias update_phase4_step6_KGC_EquipmentBreak update_phase4_step6
  def update_phase4_step6
    # 元の処理を実行
    update_phase4_step6_KGC_EquipmentBreak

    # 破壊フラグがオンの場合
    if @broken
      # ヘルプウィンドウを隠す
      @help_window.visible = false
      # 破壊フラグをオフ
      @broken = false
    end
  end
end





스크립트를 도입하면, 속성[파괴 확률○%]를 작성합니다.
○에는, 장비품이 파손하는 확률을 넣어 주세요.

예를 들면[파괴 확률20%]라고 하는 속성을 세트 하면, 공격했다(공격을 받았다) 때에 20% 의 확률로
파손하는 장비품을 만들 수 있습니다.
무기의 파손 타이밍은 「통상 공격, 또는 물리 스킬을 사용했을 때」입니다.
방어구의 파손 타이밍은 「통상 공격, 또는 물리 스킬을 받았을 때」입니다.
「물리 스킬」이란,[공격력 F]가 1 이상의 스킬입니다.

장비품이 파손했을 때는, 금속음과 함께 「장비품이 망가졌다!」라고 하는 메세지가 나옵니다.
또, 장비품이 파손한 캐릭터상에 「00 Broken」라고 하는 표시가 나옵니다.
(주:파손한 캐릭터에게 데미지가 없는 경우만)

샘플에서는 「파괴 확률10%」의 무기를 만들고 있습니다.

Who's 백호

?

이상혁입니다.

http://elab.kr


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6153
34 장비 착용한 장비에 따라 모습이 달라지는 스크립트 예제 5 file 게임애호가 2015.02.14 2002
33 장비 Auto Equipment Optimization for Guillaume777's Multi Slot Script by DerVVulfman Alkaid 2012.09.09 1497
32 장비 MultiSlots! 2.4 by DerVVulfman 2 Alkaid 2011.09.05 1466
31 장비 Multislots! 2.2 by DerVVulfman 4 file Alkaid 2011.02.18 1611
30 장비 Angie's Equipment Sets 2.3 by DerVVulfman 7 Alkaid 2010.12.31 1869
29 장비 Equipment Upgrade System 1.1 by Charlie Fleed Alkaid 2010.11.18 1928
28 장비 Multislots! 2.1 by DerVVulfman 3 file Alkaid 2010.09.02 1537
27 장비 CSSR8-장비품 생산&강화 시스템 18 file 백호 2009.02.22 3959
26 장비 CSSR5-장비품 중량 시스템 1 file 백호 2009.02.22 1731
25 장비 CSSR1-장비품 어빌리티포인트제 file 백호 2009.02.22 1597
» 장비 KGC_EquipmentBreak(장비품 파괴) 1 백호 2009.02.22 1356
23 장비 KGC_장비확장 (7/30일자) 12 file 백호 2009.02.22 2055
22 장비 장비품개조 - KGC_AlterEquipment (8/12일자) 2 file 백호 2009.02.22 1694
21 장비 SIBruno's Advanced Equip Screen v2 file 백호 2009.02.22 1246
20 장비 장비 전능력 스크립트 4 file 백호 2009.02.22 1783
19 장비 Advanced Equip Window 백호 2009.02.22 806
18 장비 장비창 개조 스크립트 from Harts Horn 7 백호 2009.02.22 1767
17 장비 Multi-equip script ver.6 by Guillaume777 4 file 백호 2009.02.22 1210
16 장비 전투중에 장비변경 from RGSS Wiki 1 백호 2009.02.22 1988
15 장비 장비무기가이드&쉴드방어 1 백호 2009.02.22 1178
Board Pagination Prev 1 2 Next
/ 2