질문과 답변

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 12392
RMXP rpg xp bgm me가 전혀 들리지 않네요 ㅠㅅㅠ 3 진공청소기 2016.02.17 194
RMXP 엑스피에서 퀘스트 끝나고 3 file TRE_E 2016.02.15 101
RMXP 에너미가 마나가 없어서 기술을 사용할수 없을때 아예 턴이 종료되버리네요 알중: 2016.02.03 136
RMXP 이거 왜 이러는겁니까? 1 file 죽창맨 2016.02.01 461
RMXP RPGXP문 질문 2 1성룡 2016.01.30 118
RMXP 장소 이동시마다 화면 구석에 장소 이름 뜨게 하는법 2 ㅎㅇ질럿 2016.01.07 171
RMXP rpg xp 테스트 게임이 안되네요. ㅠㅠ 스윙터틀 2016.01.06 145
RMXP 버프(능력치 상승),디버프 스킬등을 만들 순 없을까요? ㅎㅇ질럿 2015.12.31 205
RMXP 병렬처리 일때 대화창 이벤트가 없어지지 않아요 (렉) 1 ㅎㅇ질럿 2015.12.30 161
RMXP 기다리는걸 참지 못해서 결국 질문합니다. 3 카미죠루 2015.12.30 205
RMXP 다른 플레이어와 대전 1 Fernandez 2015.12.17 134
RMXP [시리즈 공통] 화면이 까만 상태로 시작하도록 하는거 말입니다만 2 file Lathrion 2015.12.06 196
RMXP 메뉴 스테이터스 창 대신 픽쳐를 넣는 스크립트를 알고 싶습니다 4 file 하누 2015.11.29 388
RMXP 게임하다가 일정 이벤트가 뜨면 게임 폴더 속 파일이 자동 실행되도록 할수 있나요? 2 찐콩땅콩 2015.11.15 339
RMXP 해상도 변경후 문제점 뮤러 2015.10.22 144
RMXP 자작스킬을 위해 애니메이션 리소스를 직접 제작하고 싶습니다 1 file 교정기 2015.10.13 397
RMXP 이 스크립트를 어떻게 사용해야하는 건가요? 2 체력을가르다. 2015.09.28 171
RMXP RPG XP 턴제 RPG 에서 체력 비례 데미지를 구현하고 싶습니다. 2 체력을가르다. 2015.09.26 367
RMXP 1초는 몇 프레임인가요? 5 저좀도와주세요 2015.08.14 3790
RMXP 게임 테스트 실행이 안됩니다. 1 file 로터스 2015.08.10 145
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 90 Next
/ 90