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
701 기타 Sphere Grid System file 백호 2009.02.21 765
700 전투 전투 관련 횟수 취득 스크립트 백호 2009.02.21 783
699 기타 Materia System file 백호 2009.02.21 749
698 이동 및 탈것 8방향움직임과 8방향 캐릭터칩 호환 2 file 백호 2009.02.21 2274
697 스킬 [KGC] Skill Grouping 백호 2009.02.21 861
696 파티 Party & Class Changing script 1 file 백호 2009.02.21 962
695 맵/타일 World Map 스크립트 1 file 백호 2009.02.21 1983
694 기타 액터 선택 스크립트 2 백호 2009.02.21 1228
693 장비 Multi-equip script 2 file 백호 2009.02.21 1101
692 스킬 [KGC] 다단공격 (즉, 여러번 공격하는 스킬) 10 백호 2009.02.21 2817
691 기타 [KGC] 개요 스크립트 2 백호 2009.02.21 1049
690 장비 장비착용시 올스탯 표시 2 file 백호 2009.02.21 1664
689 스킬 스킬 도감 1 백호 2009.02.21 1138
688 기타 프리 윈도우 스크립트 (상입오두막 출처) 6 백호 2009.02.21 1449
687 기타 스크립트로 프리윈도우 예제 4 file 백호 2009.02.21 812
686 기타 killer님 요청하신 스크립트 두번째입니다. 나뚜루 2009.02.21 759
685 전투 SBABS게이지바 file 백호 2009.02.21 2285
684 기타 Anti Event Lag Script 3 백호 2009.02.21 1057
683 기타 시작하자 마자 풀 스크린 2 백호 2009.02.21 1082
682 기타 AMS-Advanced Message Script Edited by Dubleax 3 file 백호 2009.02.21 765
Board Pagination Prev 1 ... 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ... 52 Next
/ 52