메뉴 건너뛰기

창조도시 기록보관소

RPGXP 기본전투계산식이 궁금합니다.

2007.06.08 11:57

Novelist 조회 수:33

 #--------------------------------------------------------------------------
  # ● 통상 공격의 효과 적용
  #     attacker : 공격자 (버틀러)
  #--------------------------------------------------------------------------
  def attack_effect(attacker)
    # 위기 플래그를 클리어
    self.critical = false
    # 제일 명중 판정
    hit_result = (rand(100) < attacker.hit)
    # 명중의 경우
    if hit_result == true
      # 기본 데미지를 계산
      atk = [attacker.atk - self.pdef / 2, 0].max
      self.damage = atk * (20 + attacker.str) / 20
      # 속성 수정
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100
      # 데미지의 부호가 정의 경우
      if self.damage > 0
        # 위기 수정
        if rand(100) < 4 * attacker.dex / self.agi
          self.damage *= 2
          self.critical = true
        end
        # 방어 수정
        if self.guarding?
          self.damage /= 2
        end
      end
      # 분산
      if self.damage.abs > 0
        amp = [self.damage.abs * 15 / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # 제2 명중 판정
      eva = 8 * self.agi / attacker.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
    end
    # 명중의 경우
    if hit_result == true
      # 스테이트 충격 해제
      remove_states_shock
      # HP 로부터 데미지를 감산
      self.hp -= self.damage
      # 스테이트 변화
      @state_changed = false
      states_plus(attacker.plus_state_set)
      states_minus(attacker.minus_state_set)
    # 미스의 경우
    else
      # 데미지에 "Miss" 를 설정
      self.damage = "Miss"
      # 위기 플래그를 클리어
      self.critical = false
    end
    # 메소드 종료
    return true
  end


 


이것이 전투에서 기본 공격의 데미지 수치를 결정하는 부분입니다.


이부분 아래에는 스킬, 아이템, 속성등에 대한 설정들이 있습니다.


 


# 기본 데미지를 계산
      atk = [attacker.atk - self.pdef / 2, 0].max
      self.damage = atk * (20 + attacker.str) / 20


여기가 가장 핵심적인 부분인데 잘 살펴보면


'atk(공격력)=[공격자의 공격력-피격자의 물리방어력/2, 0].최대치'라고 해석할 수 있습니다.


저도 스크립트 초짜라 잘은 모르겠지만 콤마 앞의 것이 최대치, 0이 최소치라고 생각됩니다.


그러니까 공격력은 최소치와 최대치 사이에 속해있는 숫자가 되는 것입니다.


 


그리고 두번째 줄을 보면


'self.damage(피격자의 데미지) = 공격력(위에서 정의한 공식)*(20+공격자의 완력) / 20 이라고 되어 있습니다.


한마디로 피격자가 받는 데미지는 위에서 정의한 공식에 따라 나온 공격력에 (공격자의 완력+20)을 곱한 다음 20으로 나눈 것이 되는 것입니다.


 


이것으로 공식 해석은 되었지만 속성이나 상태 같은 것이 들어가면 더 복잡해집니다;;


허접한 답변 읽어주셔서 감사합니다.