# 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의 값을 가집니다.
스크립터브혼
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.13on damage:
set {_ACL} to cooldown of diamond sword for attacker
if {_ACL} is set:
cancel event
message "C" to attacker
제 능력으로 구문이 이렇게 나오게 되었습니다만, skjade 에서 돌출되는 값은 공격시 나오는 지연시간이 아닌, 따로 적용되는 즉, 엔더 진주의 사용 쿨타임을 받아오는 것 같습니다.
공격 캔슬은 어려울 것 같네요 ㅠㅠ
스크립터브혼
2021.07.13추천하는 방식은 아니지만... [skript-reflect] 애드온으로 간단하게 구현해 봤습니다.
reflect를 사용한 구현 코드는 사용할 코드보다 먼저 로드되어야 합니다.
한 파일에 구현과 사용이 같이 되어있다면 구현이 위에, 사용이 아래에 있어야합니다.
reflect 구현 코드를 다른 파일로 나눈다면 파일 이름순(특수문자 > a-z > 가-힣)으로 읽게 됩니다.
reflect 구현 코드가 먼저 로드될 수 있는 이름으로 하셔야합니다.
attack cooldown of %player% 패턴으로 받아온 플레이어 쿨다운은 0 ~ 1의 값을 가집니다.
1인 경우 공격력의 100%가 적용됩니다.
doxa97
2021.07.14오옷! 감사드립니닷
doxa97
2021.07.15너무 정상적으로 작동이 잘 됩니다! 감사합니다!