개인 자료란 (JE)

  서버 커뮤니티

Profile doxa97 대표칭호 없음

doxa97 951212593122449fbdd52f302c595cf1

Profile

질문하기 스크립트

공격 쿨타임 관련

2021.07.11 조회 수 1101 추천 수 0
이해도 1.16 
게임버전 (JE) 스피곳 
스크립트 애드온 2.5.3 

플레이어가 공격을 할 때 공격 속도에 비례해서 데미지가 감소되는 지점 즉, 공격 쿨타임이 존재하는데
공격쿨타임 동안 공격을 하면 공격을 cancel event 시키는 방법이 뭔가요?

아무리 찾아봐도 공격 쿨타임에 관해서는 못찾을 것 같아서 질문 올립니다

6개의 댓글

스크립터브혼
2021.07.12

바닐라 스크립트에는 없는 기능입니다.

아마도 [SkJade - Item Cooldown]으로 쿨다운 값을 받을 수 있을 것으로 보입니다.

테스트해보진 않아서 이 익스프레션이 어떤 값을 반환할지는 모르겠습니다.


기본적인 쿨다운 알고리즘을 설명드리자면,

마인크래프트의 아이템 쿨다운은 엔티티의 attack_speed 속성에서 아이템의 값을 뺀 값으로 사용됩니다.

예를들어, 엔티티의 attack_speed 기본 값은 4이고 sword의 값은 -2.4 입니다.

결과적으로 둘을 합하여 검을 들고 있는 플레이어의 쿨다운 회복력은 1.6이 됩니다.


이것은 초당 쿨다운 회복력이 160%라는것을 의미합니다.

마지막 공격으로부터 쿨다운이 완료되는데 12.5 tick 걸린다는 이야기죠.


좀 계산하기 쉽게 attack_speed를 2.5로 바꾸면, 쿨다운 회복력은 0.1이 됩니다.

초당 쿨다운 회복력이 10%이기 때문에 마지막 공격으로부터 쿨다운이 완료되는데 10초가 걸리게 됩니다.


아마도 위에 링크 걸어드린 애드온 익스프레션도 비슷한 원리로 동작할겁니다.

쿨다운 반환값을 판단해서 on damage 이벤트를 취소할지를 결정하시면 될 것 같습니다.

doxa97
2021.07.13
@스크립터브혼

감사합니다!

doxa97
2021.07.13
@스크립터브혼

on damage:

set {_ACL} to cooldown of diamond sword for attacker

if {_ACL} is set:

cancel event

message "C" to attacker

제 능력으로 구문이 이렇게 나오게 되었습니다만, skjade 에서 돌출되는 값은 공격시 나오는 지연시간이 아닌, 따로 적용되는 즉, 엔더 진주의 사용 쿨타임을 받아오는 것 같습니다.

공격 캔슬은 어려울 것 같네요 ㅠㅠ

스크립터브혼
2021.07.13
@doxa97

추천하는 방식은 아니지만... [skript-reflect] 애드온으로 간단하게 구현해 봤습니다.


# file name is _reflect.sk

expression:
    patterns:
        attack cooldown of %player%
        %player%'s attack cooldown
    return type: number
    get:
        return expr-1.getAttackCooldown()

reflect를 사용한 구현 코드는 사용할 코드보다 먼저 로드되어야 합니다.


한 파일에 구현과 사용이 같이 되어있다면 구현이 위에, 사용이 아래에 있어야합니다.

reflect 구현 코드를 다른 파일로 나눈다면 파일 이름순(특수문자 > a-z > 가-힣)으로 읽게 됩니다.

reflect 구현 코드가 먼저 로드될 수 있는 이름으로 하셔야합니다.


# @reflect expression - attack cooldown
on damage:
    attacker is a player
    attack cooldown of attacker < 1
    cancel event

attack cooldown of %player% 패턴으로 받아온 플레이어 쿨다운은 0 ~ 1의 값을 가집니다.

1인 경우 공격력의 100%가 적용됩니다.

doxa97
2021.07.14
@스크립터브혼

오옷! 감사드립니닷

doxa97
2021.07.15
@스크립터브혼

너무 정상적으로 작동이 잘 됩니다! 감사합니다!