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 6202
1021 아이템 흠..몬스터도감말고 아이템도감~ 9 백호 2009.02.21 2028
1020 전투 흠.. 아직도 이 스크립트가 없군요 ㅋㅋ(제가올림..) 1 file 백호 2009.02.21 3337
1019 전투 횡스크롤형식의 스크립트 7 백호 2009.02.21 2980
1018 기타 횡스크롤 스크립트 한국말 번역. 15 file 백호 2009.02.21 3315
1017 기타 회복으로 데미지를 받는 좀비 스크립트 7 백호 2009.02.22 2010
1016 메뉴 화살표 모양 셀렉트 커서 사용 2 백호 2009.02.22 2118
1015 그래픽 화면을 부드럽게 해주는스크립트[ 아주 유용] 56 file - 하늘 - 2009.08.05 6566
1014 미니맵 화면에 축소된 미니맵을 표시하는 스크립트 - 한글 번역 - 6 file 백호 2009.02.21 2560
1013 화면에 축소된 맵을 표시하는 스크립트 7 file 백호 2009.02.21 2394
1012 기타 홈페이지 띄우기 (VX 상관없음.) 6 KNAVE 2009.08.25 2139
1011 메뉴 혹시있나해서-_-.. 대화창에 테두리치기 스크립트 7 백호 2009.02.22 2596
1010 기타 현재시간표시 33 file 코아 코스튬 2010.10.09 2529
1009 기타 현재 맵BGM을 그대로 전투 BGM으로 연결 from phylomortis.com 백호 2009.02.22 1180
1008 이름입력 한글조합입력기(영어가능) file 조규진1 2019.11.10 507
1007 메시지 한글자씩 뜨는 스크립트 6 백호 2009.02.21 3004
1006 키입력 한글입력스크립트 16 file 아방스 2007.11.09 11828
1005 키입력 한글입력기(자음, 모음 분리. 아마 중복일 듯...) 11 캉쿤 2011.09.13 3225
1004 키입력 한글입력기 6 백호 2009.02.22 4305
1003 이름입력 한글이름 입력기 스크립트 14 백호 2009.02.22 4211
1002 메시지 한글 채팅 스크립트 32 file こなた 2009.01.22 4947
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 52 Next
/ 52