질문과 답변

Extra Form

vampyr sbabs 액알 스크립트 사용 중인데요
 

주인공 캐릭터나 적 캐릭터의 공격이 미스가 되었을 때도 공격 애니메이션이 나타나서 약간 이질감을 주더라고요

 

그래서 공격이 미스가 되었을 때만 애니메이션 효과가 나타나지 않도록 조정해주고 싶은데 어떻게 해야 하나요?

 

 

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

저번에 한 번 물었던 질문인데

 

액알 스크립트의 정확한 이름을 적어야 한다고 하셔서 다시 올립니다...

Comment '2'
  • profile
    습작 2012.06.24 13:30

    0.

     

      Vampyr SBABS 시리즈는 여러 버전이 있으며 버전마다 스크립트 코드가 서로 상이합니다. 때문에 확실히 어떤 것인지는 알 수 없으나 일단 회원분들께서 가장 많이 사용할 9버전을 기준으로 설멍하겠습니다.


      해당 문제는 기본 기능상에서는 지원하지 않는 기능입니다. 때문에 스크립트를 수정해야 하며, 이를 위해서는 스크립트적 지식이 필요합니다.


      우선 문제는 캐릭터의 머리 위에 애니메이션을 띄우는 것이 그 이후 데미지나 상태문구를 띄우는 effect 판정보다 앞서기 때문입니다. 먼저 Game_Player, Game_Ally, Game_Event, Game_Monster 클래스에서 각종 공격에 관련해서 작동시 애니메이션 id를 부여하고, 그 다음에  Game_Battler 클래스의 attack_effect함수나 skill_effect함수에서 skipped, missed, evaded, damage 판정이 따르는 것이지요.


      Game_Player 클래스에서 일반공격을 작동시키는 부분을 잠깐 살펴보면 위에서 설명한 내용을 확인할수 있을 겁니다.


      def normal_attack_right

        for monster in $game_monsters.compact

          next unless in_front?(self, monster)

          next if monster.actor.dead?

          next if monster.flying and !jumping?

          monster.animation_id = self.actor.atk_animation_id # 애니메이션 표시

          hit_count

          monster.actor.attack_effect(self.actor) # 공격 유효 판정. Game_Battler 클래스의 attack_effect로 이동

          monster.jump(0,0)

          monster.target = self

        end

        for event in $game_map.events.values

          next unless event.in_battle

          next unless in_front?(self, event)

          next if event.actor.dead? or event.object

          next if event.flying and !jumping?

          event.animation_id = self.actor.atk_animation_id # 애니메이션 표시

          return if event.kill_with_weapon > 0 and event.kill_with_weapon != @attack_weapon.id or

          event.kill_with_skill > 0 or event.kill_with_item > 0

          hit_count

          event.actor.attack_effect(self.actor) # 공격 유효 판정. Game_Battler 클래스의 attack_effect로 이동

          event.jump(0,0) unless event.puzzle

          event.target = self

        end

      end


      판정을 앞으로 그리고 애니메이션 표시를 뒤로 순서를 바꾸고, 애니메이션 표시에 앞선 판정의 결과를 조건분기로 넣는 것입니다. Game_Player, Game_Ally, Game_Event, Game_Monster 클래스의 근거리, 원거리, 또는 스킬 사용 판정부분을 모두 고쳐주셔야 합니다. 더불어 Game_Battler 클래스에서도 attack_effect함수나 skill_effect함수의 결과값을 받을 수 있도록 해주셔야 겠습니다.


      def attack_effect(attacker)

        clear_action_results

        unless attack_effective?(attacker)

          @skipped = true

          @damage = $Vampyr_SBABS.damage_properties["Texts"][0]

          return false

        end

        if rand(100) >= calc_hit(attacker)

          @missed = true

          @damage = $Vampyr_SBABS.damage_properties["Texts"][0]

          return false

        end

        if rand(100) < calc_eva(attacker)

          @evaded = true

          @damage = $Vampyr_SBABS.damage_properties["Texts"][0]

          return false

        end

        make_attack_damage_value(attacker)

        execute_damage(attacker)

        return true if @hp_damage == 0

        apply_state_changes(attacker)

        return true

      end


      때문에 만약 위처럼 Game_Battler 클래스에서 결과값을 반환한다면...


      def normal_attack_right

        for monster in $game_monsters.compact

          next unless in_front?(self, monster)

          next if monster.actor.dead?

          next if monster.flying and !jumping?

          hit_count

          monster.animation_id = self.actor.atk_animation_id if monster.actor.attack_effect(self.actor)

          monster.jump(0,0)

          monster.target = self

        end

        for event in $game_map.events.values

          next unless event.in_battle

          next unless in_front?(self, event)

          next if event.actor.dead? or event.object

          next if event.flying and !jumping?

          return if event.kill_with_weapon > 0 and event.kill_with_weapon != @attack_weapon.id or

          event.kill_with_skill > 0 or event.kill_with_item > 0

          hit_count

          event.animation_id = self.actor.atk_animation_id if event.actor.attack_effect(self.actor)

          event.jump(0,0) unless event.puzzle

          event.target = self

        end

      end


      위와 같은 형태로도 가능하리라 생각합니다.


      본인이 사용하시는 ABS 버전과 다를 수 있으므로 코드를 잘 읽으신 다음 적절히 수정하시면 될 것 같습니다.^^


  • ?
    존스노우 2012.06.28 21:50
    답변 감사드립니다. 한 번 시도해 볼게요

List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 21169
RMVX 캐릭터메이커VX 2 file ProjectPeBo 2017.07.21 278
플러그인 생성 RMMV 메뉴에 불러오기를 넣고 싶습니다 2 file 소녀160 2019.09.09 278
여러분들 제가 rpg xp 정품을삿는데요.. 4 제시오니 2016.02.10 278
RMXP 아이템을 장착하는 방법을 알고싶습니다 4 바알 2015.01.01 278
RMMV 폰트 지정하는 법 2 구슯 2018.06.14 278
스크립트 작성 RMVXA 상점 화면 바꾸는법 2 file Lemnido 2024.09.16 277
턴제 전투 RMMV 스킬을 적과 아군에게 동시에 적용할 순 없나요? 4 오브투수스 2022.09.04 277
플러그인 사용 RMMV 다회차 엔딩 플러그인이 있을까요? 4 뛣꿿쒫 2021.08.31 277
기타 RMMV 플랫포머 낙사 구현)이거 어떻게 만들엇는지 아시는 분? 무명시절 2020.10.31 277
RMVXA 이벤트 실행 도중에 특정 위치의 문이 열리거나 닫히도록 하고 싶습니다. 4 file 안드루이드 2016.09.15 277
RMXP RPG XP 2003(?)에서 이벤트로 거울을 만들었습니다만, 거울을 몇번 엔터키를 누르면 갑자기 다른말이 나오게 하고 싶습니다 1 비두 2016.07.10 277
플러그인 생성 RMMV 철권처럼 게이지바를 만들고 싶습니다 2 abang 2020.11.15 276
RMMV 메인메뉴하고 게임내 메뉴 수정 못하나요? 2 대마왕vV 2016.09.24 276
RMVXA 버튼을 누르면 그림이 사라지게 하는 법 2 뿡빵뿡 2015.06.03 276
기타 게임 번역중인데 계속 오류가 뜹니다 도와주세요! 3 file park0520 2015.04.12 276
RMVX 이 스크립트의적용 5 나루토페인 2015.02.01 276
RMVX 아이템 설명을 2줄로 만들 수 있을까요? 3 file 빡새 2015.03.24 276
이벤트 작성 RMMV 텍스트 시작 위치를 바꾸고 싶습니다~ 2 츄웬 2020.05.22 275
RMMV 병렬처리 기능에 대해서 궁금합니다. (+고민글) 2 두부냠냠 2017.08.12 275
RMVXA 크리스탈 엔진 20 게임잘날아가는닝겐 2015.03.29 275
Board Pagination Prev 1 ... 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 ... 518 Next
/ 518