사이트 로그인
2016.07.28 15:35
안녕하세요
옛날 바람을 구현하면서 최대한 구현율을 높이고자
기존 CR 에뮬레이터에서 제공하지 않거나
어설프게 제공하는 것들에 대한 해결책을 몇 가지 찾아내었습니다.
혼자만 알고 있기에는 좀 그래서
다른분들이 아실 수 있도록 공유를 하려고 합니다.
CR 에뮬레이터 또한 구현율이 상당하고, 개발이 중단되어 해결할 수 없는 버그가 몇 가지 있지만
주어진 함수들을 조합하고 이용하면 몇 가지 필수 기능들을 구현해 낼 수 있습니다.
CR에도 희망은 있습니다..!
먼저 첫번째로는 중복 사용되는 마법을 제한하는 방법입니다.
CR 에뮬레이터 전반적으로 소수 단위를 인식하지 못하는 문제가 있습니다.
스크립트의 변수 입력이 대부분 int 형으로 한정되어 발생하는 것으로 추정됩니다.
바람 마법 중에는 초당 캐스팅 할 수 있는 횟수가 제한된 것이 있습니다.
주술사의 첨마법, 비영승보, 필살기 등등
CR에서 이것을 구현하려면 다음과 같은 Global Function을 만든 후
마법 함수 스크립트에서 호출해 줍니다.
함수 정의:
FUNC HIDDEN_DELAY {
|
호출 예: 1초에 두번까지 사용하게 하는 경우
callfunc("HIDDEN_DELAY", 500);
매커니즘:
현재 시간(초단위)을 저장할 계정 변수 한개($hidden_delay_time)와
현재 시간의 마법 사용량을 저장할 변수 한개($hidden_delay_value)를 만듭니다.
이후 마법을 캐스팅 할 때의 시간을 gettimetick(1) 함수로 가져와 $hidden_delay_time에 저장합니다.
만약 캐스팅 시간과 $hidden_delay_time 변수의 값이 같은 경우
유저는 현재 시간(초단위)에 이 스킬을 사용한 적이 있는 경우이므로
$hidden_delay_value 를 적당히 증가시킵니다.
이후 $hidden_delay_value 값이 일정량 이상(예에선 1000) 도달한 경우 스킬 사용을 취소합니다.
알려진 버그:
gettimetick 함수에 문제점이 한 가지 있습니다.
시스템 부팅 이후의 시간을 초단위로 반환하는 함수인데,
부팅 시간이 약 24.8일을 지나는 순간부터 시간값을 가지고 있는 변수(int로 추정)의 오버플로가 발생됩니다.
이때부터 함수의 작동이 비정상적으로 이루어집니다. 똑같은 값만 출력하게 됩니다.
따라서 몇 가지 해결책이 존재하는데,
첫째. 24일 이내로 시스템을 재부팅 시킨다.
둘째. gettimetick 함수의 인수를 1대신 0으로 사용한다.
셋째. 시스템의 uptime을 임의로 조절한다.
정도가 있겠습니다.
gettimetick 함수의 인수를 0으로 사용하는 경우는 리턴되는 값은 ms 단위의 초 입니다.
이 값을 1000으로 나누어 사용해도 되겠습니다만,
값 자체가 오버플로우 되어 음수가 나올 수 있으므로 참고하셔야 합니다.