질문과 답변

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 end가 몇개 필요하죠? 5 게임잘날아가는닝겐 2015.09.20 148
RMVXA 강제공격 스크립트로 하려면 어떻게 하나요 예를 들어 A가 B스킬로 마지막타겟을 공격한다 unknown 2015.09.20 134
RMVXA 확률을 이용한 스테이지 이동을 하고 싶은데 이상하게 안됩니다. 3 file 피로zzZ 2015.09.21 229
RMVXA 글자가 안나와요ㅜㅜ 1 file 유신지 2015.09.21 165
RMVXA 캐릭터 이동에 따라 이동하는 이미지 3 file Lisky 2015.09.21 209
RMVX 여러 번 조사시 이벤트 실행 2 마린걸 2015.09.22 127
RMVXA wait의 프레임 수를 실수로 할 수 있을까요? 2015.09.22 120
RMVX 시야 스크립트를 정말 쓰고 싶은데 구버전 구동이 안 되네요 RPGVX만찾는겜돌이 2015.09.22 145
RMVXA XAS에서 원거리 무기 연사 할수 있게 만드는 방법 겜제작광 2015.09.23 145
RMVXA 퀘스트 로그 스크립트 사용법이 이게 맞나요? 3 치느 2015.09.24 290
RMVXA 조건분기 스크립트 질문드립니다... 1 불새우 2015.09.25 129
RMXP RPG XP 턴제 RPG 에서 체력 비례 데미지를 구현하고 싶습니다. 2 체력을가르다. 2015.09.26 367
기타 제가 징징이의 자살을 일본어화 하려고 하는데 어떻게 해야 하죠? 3 file sihunejoa 2015.09.26 832
RMVXA A이벤트를 B이벤트로 옮겼을 때 발동하는 이벤트 질문! 2 file 뉴리키 2015.09.26 118
RMVX 데이터 베이스에서 스킬을 조절할 대 "정신 관계도"는 무슨 역활입니까? 5 file 후비고 2015.09.27 259
RMVXA 특정 이벤트의 좌표 알아내는 법. 1 불새우 2015.09.27 180
RMXP 이 스크립트를 어떻게 사용해야하는 건가요? 2 체력을가르다. 2015.09.28 171
기타 아이콘 모음 스샷을 어떻게 아이콘으로 만드나요? 1 체력을가르다. 2015.09.28 215
RM2k3 윈도우8 rpg2000게임 실행 5 file 김수한무거북이와두루삽천갑자동방삭 2015.09.28 601
RMVXA 스크립트 없이 8방향(대각선)이동 하는 법 없나요? 무명시절 2015.09.30 260
Board Pagination Prev 1 ... 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 ... 516 Next
/ 516