질문과 답변

Extra Form

안녕하세요~

지난번에 한 질문이 조용히 묻혀버려서..ㅠㅠ

 

변수를 이용해서,

스크립트로 데미지 공식을 변경해서

추가데미지라는 개념을 만들려고 하는데요

 

데미지 공식을 변경하면

모든 데미지가 데미지 공식대로 적용되어서요

 

스크립트로 특정 액터만 데미지 공식을 변경하려면 어떻게 해야할지 궁금해요

Comment '2'
  • ?
    아이미르 2012.02.21 10:36

    특정 액터와는 관련이 좀 떨어집니다만... 데미지 계산식 변경에 관해 짤막하게 한번 짜보았습니다.

     

    -------------------------------------------------------------------------------------------------------------------------------

    class Game_Enemy < Game_Battler
      attr_accessor :att_math #데미지 계산식 번호
      #--------------------------------------------------------------------------
      # ● 데미지 계산식 설정
      #--------------------------------------------------------------------------
      def att_math
        return @note =~ /<계산식=(\d+)\s*>/  ? $1.to_i : 0
      end
    end

    class Game_Actor < Game_Battler
      attr_accessor :att_math #데미지 계산식 번호
      #--------------------------------------------------------------------------
      # ● 데미지 계산식 설정
      #--------------------------------------------------------------------------
      def att_math
        @att_math = 0 if @att_math == nil
        unless weapons.compact == []
          for item in weapons.compact
            n = item.note =~ /<계산식=(\d+)\s*>/  ? $1.to_i : 0
            @att_math = n if @att_math <= n
          end
        end
         
        return @att_math
      end
    end

    module RPG
      class UsableItem < BaseItem
        #--------------------------------------------------------------------------
        # ● 데미지 계산식 설정
        #--------------------------------------------------------------------------
        attr_accessor :skill_math
        def skill_math
          return @note =~ /<계산식=(\d+)\s*>/  ? $1.to_i : 0
        end
      end
    end


    class Game_Battler
      #--------------------------------------------------------------------------
      # ● 데미지 계산함수 설정
      #--------------------------------------------------------------------------
      def calculate_attack_damage(attacker)
        damage = 0
        case attacker.att_math
        when 1 # 방어력 무시
          damage += attacker.atk * 4
        when 2 # 공격력 대신 정신력으로
          damage += attacker.spi * 4 - self.def * 2
        when 3 # 방어자가 중독이면 추가 데미지
          damage += attacker.atk * 4 - self.def * 2        # 기본 계산
          damage += self.maxhp / 8 if self.state?(2) # 방어자가 중독 상태인가?
        when 4 # 공격자가 중독이면 추가 데미지
           damage += attacker.atk * 4 - self.def * 2        # 기본 계산
           damage += attacker.maxhp / 8 if attacker.state?(2) # 공격자가 중독 상태인가?
        when 5 # 방어력을 공격력에 추가
           damage += attacker.atk * 4 - self.def * 2        # 기본 계산
           damage += attacker.def * 2
        else
          damage += attacker.atk * 4 - self.def * 2        # 기본 계산
        end
        return damage
      end
     
      #--------------------------------------------------------------------------
      # ● 통상 공격에 의한 데미지 계산
      #     attacker : 공격자
      #    결과는 @hp_damage 에 대입한다.
      #--------------------------------------------------------------------------
      def make_attack_damage_value(attacker)
        damage = calculate_attack_damage(attacker)
       
        damage = 0 if damage < 0                        # 마이너스라면 0 에
        damage *= elements_max_rate(attacker.element_set)   # 속성 수정
        damage /= 100
        if damage == 0                                  # 데미지가 0
          damage = rand(2)                              # 1/2 의 확률로 1 데미지
        elsif damage > 0                                # 데미지가 정의 수
          @critical = (rand(100) < attacker.cri)        # 위기 판정
          @critical = false if prevent_critical         # 위기 방지?
          damage *= 3 if @critical                      # 위기 수정
        end
        damage = apply_variance(damage, 20)             # 분산
        damage = apply_guard(damage)                    # 방어 수정
        @hp_damage = damage                             # HP 에 데미지
      end
     
      #--------------------------------------------------------------------------
      # ● 데미지 계산함수 설정
      #--------------------------------------------------------------------------
      def calculate_skill_damage(user, obj)
        damage = obj.base_damage                        # 기본 데미지를 취득
        if damage > 0
          case obj.skill_math
          when 1 # 마법 방어력 무효
            damage += user.atk * 4 * obj.atk_f / 100      # 타격 관계도: 사용자
            damage += user.spi * 2 * obj.spi_f / 100      # 정신 관계도: 사용자
            unless obj.ignore_defense                     # 방어력 무시 이외
              damage -= self.def * 2 * obj.atk_f / 100    # 타격 관계도: 대상자
            end
          when 2 # 물리 방어력 무효
            damage += user.atk * 4 * obj.atk_f / 100      # 타격 관계도: 사용자
            damage += user.spi * 2 * obj.spi_f / 100      # 정신 관계도: 사용자
            unless obj.ignore_defense                     # 방어력 무시 이외
              damage -= self.spi * 1 * obj.spi_f / 100    # 타격 관계도: 대상자
            end
          when 3 # 공격력 대신 방어력으로
            damage += user.def * 4 * obj.atk_f / 100      # 타격 관계도: 사용자
            damage += user.spi * 2 * obj.spi_f / 100      # 정신 관계도: 사용자    
            unless obj.ignore_defense                     # 방어력 무시 이외
              damage -= self.def * 2 * obj.atk_f / 100    # 타격 관계도: 대상자
              damage -= self.spi * 1 * obj.spi_f / 100    # 정신 관계도: 대상자
            end
          when 4 # 공격자 체력 비율을 반영
            damage += user.atk * 4 * obj.atk_f / 100      # 타격 관계도: 사용자
            damage += user.spi * 2 * obj.spi_f / 100      # 정신 관계도: 사용자
            damage *= 100 + ( 100 * user.hp ) / user.maxhp
            unless obj.ignore_defense                     # 방어력 무시 이외
              damage -= self.def * 2 * obj.atk_f / 100    # 타격 관계도: 대상자
              damage -= self.spi * 1 * obj.spi_f / 100    # 정신 관계도: 대상자
            end
          else # 기본 계산
            damage += user.atk * 4 * obj.atk_f / 100      # 타격 관계도: 사용자
            damage += user.spi * 2 * obj.spi_f / 100      # 정신 관계도: 사용자    
            unless obj.ignore_defense                     # 방어력 무시 이외
              damage -= self.def * 2 * obj.atk_f / 100    # 타격 관계도: 대상자
              damage -= self.spi * 1 * obj.spi_f / 100    # 정신 관계도: 대상자
            end
          end
          damage = rand(2) if damage <= 0
       
        elsif damage < 0
          case obj.skill_math
          when 1 # 체력 50% 이하면 2배 회복
            damage -= user.atk * 4 * obj.atk_f / 100      # 타격 관계도: 사용자
            damage -= user.spi * 2 * obj.spi_f / 100      # 정신 관계도: 사용자       
            ratio = (100 * self.hp) / self.maxhp
            damage *= 2 if ratio <= 50
          when 2  # 공격력, 정신력 대신 최대체력, 최대마력으로
            damage -= user.maxhp * 4 * obj.atk_f / 100      # 타격 관계도: 사용자
            damage -= user.maxmp * 2 * obj.spi_f / 100      # 정신 관계도: 사용자    
          else
            damage -= user.atk * 4 * obj.atk_f / 100      # 타격 관계도: 사용자
            damage -= user.spi * 2 * obj.spi_f / 100      # 정신 관계도: 사용자        
          end
        end
             
        return damage
      end
     
      #--------------------------------------------------------------------------
      # ● 스킬 또는 아이템에 의한 데미지 계산
      #     user : 스킬 또는 아이템의 사용자
      #     obj  : 스킬 또는 아이템
      #    결과는 @hp_damage 또는 @mp_damage 에 대입한다.
      #--------------------------------------------------------------------------
      def make_obj_damage_value(user, obj)
        damage = calculate_skill_damage(user, obj)
       
        damage *= elements_max_rate(obj.element_set)    # 속성 수정
        damage /= 100
        damage = apply_variance(damage, obj.variance)   # 분산
        damage = apply_guard(damage)                    # 방어 수정
        if obj.damage_to_mp 
          @mp_damage = damage                           # MP 에 데미지
        else
          @hp_damage = damage                           # HP 에 데미지
        end
      end
    end

    ----------------------------------------------------------------------------------------------------------------------------------

     

    사용법은 에너미의 경우는 에너미의 메모란에, 장비의 경우는 무기의 메모란에( 방어구는 써넣어도 무시당합니다.)

     

    스킬의 경우 스킬의 메모란에 <계산식=n>이라고 쓰면 스크립트 상의 n번 계산식을 따라가게 되어 있습니다.

     

    원하시는 게 어떤 방식의 계산인지 잘몰라서 광범위하게 해버렸네요.

     

    주의사항이라면 만일 최대체력, 체력, 최대마력, 마력, 공격력, 방어력, 정신력, 민첩성 이외의 수치를 계산식에

     

    첨가할때는 수치가 어느 한쪽만 있진 않은지 주의해주세요. 이를테면 레벨같은 경우는 액터쪽만 있고 에너미쪽에

     

    없기 때문에 계산식에 집어넣으면 에러나올 가능성이 있습니다.

  • ?
    뱀딸기 2012.02.21 19:36

    우왕..................

    .....

    너무 감사합니다............그런데.........

    제가 하려는 거에 어떻게 적용시켜야 할지는 잘 모르겠습니다........ㅠㅠ

     

    저는 vx기본기능에서 주어지는 데미지 계산이 좀 마음에 안들어서요

    공격력은 '완력', 방어력은 '건강'으로 용어를 바꾸고 사용하고 있습니당..

    그래서 좀 힘든 부분이..

    장비 부분 계산이 되었습니다...

    기본 기능대로 라면 장비를 착용했을 때, '완력'과 '건강'이 증가하는 방식이 될테니까요..(여타 게임들과 비슷하게 만들어보려는 욕심으로)

    그래서 실제 공격력과 방어력이라 할 수 있는 부분을 각 캐릭터 별 변수로 하려 했거든요.

    그렇게 하면 장비 착용과 패시브스킬까지 좀 손쉽게 해결할 수 있을 거 같아서요.

    그런데...

    각 캐릭터 행동마다 변수가 적용되게 하려하니 그 부분이 막혀서요....

    그래서 질문 게시판에 올리게 된 거예요

    일단 제가 질문을 올리게 된 이유는 그렇습니다.....흐흐...ㅠㅠ


List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 12441
RMVXA 타이틀을 애니메이션처럼 움직이도록 만들려면 어떻게 해야하나요? 4 데스노트 2013.07.14 1104
기타 삼국지을 만들어볼껀데 멀루 제작할까요 1 칼도난사건 2011.06.19 1105
RMVX 플레이어와 접촉 상태에서도 움직이기 5 file 카온 2012.08.03 1105
RMVXA 텔레포트 하는법 4 aaa222 2013.08.24 1105
RMVXA vxa 해상도를 높이려고 하는데요 1 file kmin 2014.07.11 1106
RM2k 테스트플레이 오류 1 휘록 2013.07.07 1106
RMVXA 아이템으로 직업을 연속으로 바꾸는 방법 좀 조언해주세요. 8 clown1 2012.09.02 1106
RMVXA VX Ace 메뉴창을 변경하고 싶습니다. 1 히나나이 2013.07.02 1106
RMVXA [rpg vx ace] midi 문제!! 아무리 찾아도 답이 없어요!!!ㅜㅜ 2 조각조각 2014.04.20 1106
RMXP 흐아아.. 맵칩 관련 질문 입니다. 4 미니쿠키 2011.01.22 1107
RMVX 스크립트로 직업의 속성유효도를 게임중에 바꿀 수 있을까요? 4 형철스 2011.04.19 1107
RMVXA 스크립트 관련 오류입니다. 3 file 스리아씨 2013.10.03 1107
RMVX 이 미니맵 스크립트 사용법을 알고 싶어요 4 file 빡새 2013.06.30 1107
RMVXA vxa프로젝트파일이 열리지 않습니다. 3 file 죽은노예 2013.11.02 1107
RMVX Hud On 인터페이스 문제 1 Jung48 2012.06.18 1108
RMVX 스크립트 몇줄부터 충돌 아방스의강좌 2011.04.14 1108
RMVXA 게임 테스트플레이 오류 4 xzrjs 2012.09.13 1108
기타 공사다...... 1 ★RPG마스터★ 2011.03.04 1109
RMVX 스크립트로 특정 액터만 데미지 공식 변경하기 2 뱀딸기 2012.02.18 1109
툴선택 일러스트 위주로 활동하시는 분들~ 알려주세요 15 한련 2014.01.02 1109
Board Pagination Prev 1 ... 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 ... 516 Next
/ 516