질문과 답변

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 12447
RMVXA 띄운 그림안에 캐릭터... 2 무명시절 2015.10.07 172
RMMV 선택지 마우스오버시 대화창에 설명이 나오는 시스템 1 가시밭 2015.10.30 172
RMVXA 말풍선 스크립트가 정말로 필요합니다 환장 2015.08.03 172
RMVX 몬스터가 스킬을 사용한 사람에게 공격을 못하는 스킬 8 file 휴론 2015.08.15 172
RMVXA 타일생성 4 castleCT 2015.02.28 172
RMVXA 턴 당 이동거리 제한 2 강룩희 2015.07.02 172
RMVXA 대사가 나오고 움직이는 NPC에 대해 오류가 있습니다. 4 file 그릇 2015.08.13 172
RMMV NPC가 따라오다가 특정위치 도달하면.. 3 카시어스 2018.03.24 172
기타 현재 RPG Maker 95는 구매가 불가능하나요? 2 阿房S 2016.02.13 172
기본툴 사용법 RMMV mv 타일셋 어떻게 추가하는거죠? weer2331 2020.10.09 171
기타 기타 도트 배경이 투명 적용이 안됩니다 5 순수매실주 2020.09.17 171
RMVXA 전투신에서 에러가 납니다. 2 file WOLLEYSGB 2017.08.17 171
RMMV MV에는 이 칩셋이 없나요? 2 file 잠행인 2017.01.20 171
RMVXA 게임 진행정도에 따라 메뉴/아이템창에 나타나는 이미지를 바꾸고 싶습니다 file gillin 2016.06.04 171
RMVXA 이벤트가 엑터를 따라올때, 일정 칸 수 이상 차이가 나면 그만 따라오기 5 겜제작광 2016.01.26 171
RMXP 이 스크립트를 어떻게 사용해야하는 건가요? 2 체력을가르다. 2015.09.28 171
RMVXA 질문합니다. 6 file 류미엘 2015.09.06 171
RMVXA 스위치와 커먼 이벤트를 사용하여 빛 효과 적용시키는거 어떻게 하나요 4 file KIM곰 2015.08.04 171
RMVXA 기본 '맨손' 명중률을 바꾸고 싶습니다. 2 밥_짓는_남자 2015.05.10 171
사이트 이용 게임 작품 게시판에 플래쉬 게임은 못 올리나요? 1 KUR 2015.01.23 171
Board Pagination Prev 1 ... 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 ... 516 Next
/ 516