질문과 답변

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 13222
RMVXA 띄운 그림안에 캐릭터... 2 무명시절 2015.10.07 175
RMVXA 메뉴 화면 뜰 때 뒤의 게임 화면이 어두워지지 않게 할 수 있을까요? 2 여줄가리 2015.10.07 351
RMVXA 메뉴 화면 열 때 바로 뜨게 구현할 수 있을까요? 4 여줄가리 2015.10.07 216
기타 몬스터 디자인 선택 1 file LuPZ 2015.10.07 236
기타 특정한 버튼을 사용하여 손전등 이미지를 뜨게하는이벤트 3 꼬닭 2015.10.07 405
RMVXA 질문합니다. 1 류미엘 2015.10.07 98
기타 robf s4u 치트있나용? 1 호로치 2015.10.06 2688
RMVXA 게임 한글화 도중 스크립트 오류 질문 드립니다. file 발렌 2015.10.05 374
RMVXA 선물주기 시스템 9 file 마린걸 2015.10.05 416
RMVXA rpg vxa 윈도우10 설치후 스크립트 창 너비 조절방법이 있나요? 3 로브남 2015.10.04 539
RMVX 게임을 시작할때 주인공의 뒷모습이 나오게 하고싶어요 2 새콤짱 2015.10.04 228
기타 조건분기 변수 설정시 나오는 '이외'는 뭔가요? 2 무명시절 2015.10.04 126
RMMV rpg maker mv에 관하여... 1 E.C.E.H 2015.10.01 299
기타 알만툴이 원래 이런가요?ㅁ 1 2034 2015.10.01 214
RMVXA 스크립트 없이 전등에 불빛효과 넣는 방법 좀 알려주세요. 1 치느 2015.10.01 463
RMVXA 스크립트 없이 8방향(대각선)이동 하는 법 없나요? 무명시절 2015.09.30 275
RM2k3 윈도우8 rpg2000게임 실행 5 file 김수한무거북이와두루삽천갑자동방삭 2015.09.28 605
기타 아이콘 모음 스샷을 어떻게 아이콘으로 만드나요? 1 체력을가르다. 2015.09.28 217
RMXP 이 스크립트를 어떻게 사용해야하는 건가요? 2 체력을가르다. 2015.09.28 174
RMVXA 특정 이벤트의 좌표 알아내는 법. 1 불새우 2015.09.27 181
Board Pagination Prev 1 ... 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 ... 517 Next
/ 517