질문과 답변

Extra Form

#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/  ◆割合ダメ?ジ - KGC_RateDamage◆
#_/----------------------------------------------------------------------------
#_/ 割合ダメ?ジ機能を追加します。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

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

if $game_special_elements == nil
  $game_special_elements = {}
  $data_system = load_data("Data/System.rxdata")
end
# 割合ダメ?ジ?性
$game_special_elements["rate_damage"] = /(MAXHP|HP|MAXSP|SP)割合ダメ?ジ/i

module KGC
  #--------------------------------------------------------------------------
  # ● ダメ?ジ割合計算
  #     skill : スキル
  #--------------------------------------------------------------------------
  def self.check_damage_rate(skill)
    skill.element_set.compact.each { |element|
      element_name = $data_system.elements[element]
      # 割合ダメ?ジ?性を持っている場合
      if $game_special_elements["rate_damage"] =~ element_name
        # 割合ダメ?ジの設定を返す
        return [$1.upcase, element]
      end
    }
    # 割合ダメ?ジではない場合は nil を返す
    return nil
  end
end

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

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

class Game_Battler
  #--------------------------------------------------------------------------
  # ● スキルの?果適用
  #--------------------------------------------------------------------------
  alias skill_effect_KGC_RateDamage skill_effect
  def skill_effect(user, skill)
    # 無敵判定
    if $imported["Invincible"] && self.invincible?(skill)
      self.damage = "Miss"
      self.critical = false
      return false
    end

    # 割合ダメ?ジ判定
    rate_damage = KGC.check_damage_rate(skill)
    # 割合ダメ?ジではない場合
    if rate_damage == nil
      # 元の?理を?行
      return skill_effect_KGC_RateDamage(user, skill)
    end

    # クリティカルフラグをクリア
    self.critical = false
    # スキルの?果範?が HP 1 以上の味方で、自分の HP が 0、
    # またはスキルの?果範?が HP 0 の味方で、自分の HP が 1 以上の場合
    if ((skill.scope == 3 || skill.scope == 4) && self.hp == 0) ||
       ((skill.scope == 5 || skill.scope == 6) && self.hp >= 1)
      # メソッド終了
      return false
    end
    # 有?フラグをクリア
    @effective = false
    # コモンイベント ID が有?の場合は有?フラグをセット
    @effective |= skill.common_event_id > 0
    # 第一命中判定
    hit = skill.hit
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)
    # 不確?なスキルの場合は有?フラグをセット
    @effective |= hit < 100
    # 命中の場合
    if hit_result
      # 第二命中判定
      eva = 8 * self.agi / user.dex + self.eva
      hit = skill.power < 0 ? 100 : 100 - eva * skill.eva_f / 100
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
      # 不確?なスキルの場合は有?フラグをセット
      @effective |= hit < 100
    end
    # 命中の場合
    if hit_result
      case rate_damage[0]
      when "MAXHP"  # 最大HPの場合
        self.damage = self.maxhp * skill.power / 100
        # 基本ダメ?ジ値を保存
        @base_damage = self.damage
        # ?性有?度を適用
        self.damage = self.damage * self.element_rate(rate_damage[1]) / 100
        hp_dmg = self.damage
      when "HP"  # 現在HPの場合
        self.damage = self.hp * skill.power / 100
        @base_damage = self.damage
        self.damage = self.damage * self.element_rate(rate_damage[1]) / 100
        hp_dmg = self.damage
      when "MAXSP"  # 最大SPの場合
        sp_dmg = self.maxsp * skill.power / 100
        @base_damage = sp_dmg
        sp_dmg = sp_dmg * self.element_rate(rate_damage[1]) / 100
        self.sp_damage = sp_dmg if $imported["SPDamage"]
        self.damage = ""
      when "SP"  # 現在SPの場合
        sp_dmg = self.sp * skill.power / 100
        @base_damage = sp_dmg
        sp_dmg = sp_dmg * self.element_rate(rate_damage[1]) / 100
        self.sp_damage = sp_dmg if $imported["SPDamage"]
        self.damage = ""
      end
      # HP/SPを減算
      self.hp -= hp_dmg if hp_dmg != nil
      self.sp -= sp_dmg if sp_dmg != nil
      # ステ?ト?化
      @state_changed = false
      effective |= states_plus(skill.plus_state_set)
      effective |= states_minus(skill.minus_state_set)
      return true
    end
    return false
  end
end


http://avangs.info/rgss_xp/252656에서 가져온건데, 제가 잘못 이해한건지 8%로 맞춰도 데미지가 체력이 92만인 적에게 100밖에 안 들어가네요.(적은 방어력이 1입니다.)

새벽에 이거 맞추려고 몇 시간 보냈는데, 이해를 못해서 질문 올려봅니다.

Comment '2'
  • profile
    혜인 2015.09.28 12:17
    혹시 속성 이름을 한글로 적으셨나요?
    $game_special_elements["rate_damage"] = /(MAXHP|HP|MAXSP|SP)割合ダメ?ジ/i

    이 부분에서 割合ダメ?ジ를 한글로 바꿔 주시면 될 듯 합니다.
  • ?
    체력을가르다. 2015.09.28 17:16
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    #_/ ◆ 割合ダメージ - KGC_RateDamage ◆
    #_/ ◇ Last update : 2007/08/27 ◇
    #_/----------------------------------------------------------------------------
    #_/ 割合ダメージ機能を追加します。
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    $imported = {} if $imported == nil
    $imported["비례Damage"] = true

    if $game_special_elements == nil
    $game_special_elements = {}
    $data_system = load_data("Data/System.rxdata")
    end
    # 割合ダメージ属性
    $game_special_elements["비례_damage"] = /(MAXHP|HP|MAXSP|SP)데미지/i

    module KGC
    #--------------------------------------------------------------------------
    # ● ダメージ割合計算
    # skill : スキル
    #--------------------------------------------------------------------------
    def self.check_damage_rate(skill)
    skill.element_set.compact.each { |element|
    element_name = $data_system.elements[element]
    # 割合ダメージ属性を持っている場合
    if $game_special_elements["비례_damage"] =~ element_name
    # 割合ダメージの設定を返す
    return [$1.upcase, element]
    end
    }
    # 割合ダメージではない場合は nil を返す
    return nil
    end
    end

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

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

    class Game_Battler
    attr_accessor :prev_hp, :prev_sp
    #--------------------------------------------------------------------------
    # ● オブジェクト初期化
    #--------------------------------------------------------------------------
    alias initialize_KGC_RateDamage initialize
    def initialize
    initialize_KGC_RateDamage

    @prev_hp = nil
    @prev_sp = nil
    end
    end

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

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

    class Game_Battler
    #--------------------------------------------------------------------------
    # ● スキルの効果適用
    #--------------------------------------------------------------------------
    alias skill_effect_KGC_RateDamage skill_effect
    def skill_effect(user, skill)
    # 無敵判定
    if $imported["Invincible"] && self.invincible?(skill)
    self.damage = "Miss"
    self.critical = false
    return false
    end

    # 割合ダメージ判定
    rate_damage = KGC.check_damage_rate(skill)
    # 割合ダメージではない場合
    if rate_damage == nil
    # 元の処理を実行
    return skill_effect_KGC_RateDamage(user, skill)
    end

    # クリティカルフラグをクリア
    self.critical = false
    # スキルの効果範囲が HP 1 以上の味方で、自分の HP が 0、
    # またはスキルの効果範囲が HP 0 の味方で、自分の HP が 1 以上の場合
    if ((skill.scope == 3 || skill.scope == 4) && self.hp == 0) ||
    ((skill.scope == 5 || skill.scope == 6) && self.hp >= 1)
    # メソッド終了
    return false
    end
    # 有効フラグをクリア
    @effective = false
    # コモンイベント ID が有効の場合は有効フラグをセット
    @effective |= skill.common_event_id > 0
    # 第一命中判定
    hit = skill.hit
    if skill.atk_f > 0
    hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)
    # 不確実なスキルの場合は有効フラグをセット
    @effective |= hit < 100
    # 命中の場合
    if hit_result
    # 第二命中判定
    eva = 8 * self.agi / user.dex + self.eva
    hit = skill.power < 0 ? 100 : 100 - eva * skill.eva_f / 100
    hit = self.cant_evade? ? 100 : hit
    hit_result = (rand(100) < hit)
    # 不確実なスキルの場合は有効フラグをセット
    @effective |= hit < 100
    end
    # 命中の場合
    if hit_result
    # 元のHP/SPを復元
    self.hp = self.prev_hp
    self.sp = self.prev_sp
    if self == user
    self.sp -= skill.sp_cost
    end
    case rate_damage[0]
    when "MAXHP" # 最大HPの場合
    self.damage = self.maxhp * skill.power / 100
    # 基本ダメージ値を保存
    @base_damage = self.damage
    # 属性有効度を適用
    self.damage = self.damage * self.element_rate(rate_damage[1]) / 100
    hp_dmg = self.damage
    when "HP" # 現在HPの場合
    self.damage = self.hp * skill.power / 100
    @base_damage = self.damage
    self.damage = self.damage * self.element_rate(rate_damage[1]) / 100
    hp_dmg = self.damage
    when "MAXSP" # 最大SPの場合
    sp_dmg = self.maxsp * skill.power / 100
    @base_damage = sp_dmg
    sp_dmg = sp_dmg * self.element_rate(rate_damage[1]) / 100
    self.sp_damage = sp_dmg if $imported["SPDamage"]
    self.damage = ""
    when "SP" # 現在SPの場合
    sp_dmg = self.sp * skill.power / 100
    @base_damage = sp_dmg
    sp_dmg = sp_dmg * self.element_rate(rate_damage[1]) / 100
    self.sp_damage = sp_dmg if $imported["SPDamage"]
    self.damage = ""
    end
    # HP/SPを減算
    self.hp -= hp_dmg if hp_dmg != nil
    self.sp -= sp_dmg if sp_dmg != nil
    # ステート変化
    @state_changed = false
    effective |= states_plus(skill.plus_state_set)
    effective |= states_minus(skill.minus_state_set)
    return true
    end
    return false
    end
    end

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

    #==============================================================================
    # ■ Scene_Skill
    #==============================================================================

    class Scene_Skill
    #--------------------------------------------------------------------------
    # ● フレーム更新 (ターゲットウィンドウがアクティブの場合)
    #--------------------------------------------------------------------------
    alias update_target_KGC_RateDamage update_target
    def update_target
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
    # 元のHPを保存
    $game_party.actors.each { |a|
    a.prev_hp = a.hp
    }
    end

    update_target_KGC_RateDamage
    end
    end

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

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

    class Scene_Battle
    #--------------------------------------------------------------------------
    # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
    #--------------------------------------------------------------------------
    alias update_phase4_step2_KGC_RateDamage update_phase4_step2
    def update_phase4_step2
    # 元のHP/SPを保存
    ($game_party.actors + $game_troop.enemies).each { |battler|
    battler.prev_hp = battler.hp
    battler.prev_sp = battler.sp
    }

    update_phase4_step2_KGC_RateDamage
    end
    end

    말씀하신 것만 했을때는 오류가 뜨길래 기뻐하면서(데미지 변화가 있구나.)하면서 몇 개 더 건드렸는데 드디어 되네요. 감사합니다.

List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 12451
RMXP 이거 할줄 아시는분 답변점 1 hero 2011.01.04 363
RMXP 이거 할수있어요??? 1 ★RPG마스터★ 2011.03.06 749
RMXP 이거 폰트인건가요?? 무슨 폰트인건가요? rpg게임들은 거의 이런 폰트던데... 6 file 호오라그렇군여 2014.05.07 1230
RMXP 이거 좀 제발 알려주세요 ㅠㅠ 1 카시오페아 2011.04.05 1243
RMXP 이거 왜이렇죠;;; 3 file 미친킴'S 2012.10.24 1039
RMXP 이거 왜 이러는겁니까? 1 file 죽창맨 2016.02.01 461
RMXP 이 캐릭터좀 찾아주세요 file ★RPG마스터★ 2011.03.06 1185
RMXP 이 오류는 뭐죠? 4 몽실년 2010.10.28 737
RMXP 이 스크립트의 동료 따라오기가 제대로 적용되지 않아요. file 길고냥이 2013.07.14 745
RMXP 이 스크립트를 어떻게 사용해야하는 건가요? 2 체력을가르다. 2015.09.28 171
RMXP 이 스크립트를 사용하는 방법을 가르쳐주세요 10 이룩 2014.01.24 435
RMXP 이 스크립트 실행 될까요? 1 file 생초짜 2012.11.03 834
RMXP 이 병렬 이벤트에 문제가 있나요? 2 file 모르모트 2012.09.10 1085
RMXP 이 메뉴 스크립트의 아이템 창을 열려면 어떻게 해야 되죠 4 file 유령아이 2013.05.12 1056
RMXP 의자앞에 가서 실행버튼누르면 주인공이 의자에 앉는 이벤트 6 owl 2013.01.22 1039
RMXP 의자 앞과 뒤를 주기 2 file 엿데브 2011.06.13 1282
RMXP 음악 넣는 방법을 알려주세요 ㅎㅎ 1 좋은사람a 2010.10.05 549
RMXP 음;; 데미지표시스크립트입니다만.. 이 스크립트를 어떻게 손대야 할 지 모르겠습니다. 13 Lighna 2012.02.13 1760
RMXP 음... 대화시 캐릭터 이미지 표시 1 프린스 2011.08.22 3131
RMXP 유저들과 안만나집니다! 1 싹구 2011.05.17 1202
Board Pagination Prev 1 ... 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ... 90 Next
/ 90