전문기술 재사용 대기시간이 잘못 표시되는 문제를 바로잡기 위해 
테스트 방법과 해결 방법을 기록으로 남깁니다.

게임에서 재사용 대기시간에 사용하는 GetTime() 함수는 플레이어의 Uptime를 반환한다.
Uptime은 시스템이 얼마나 오랫동안 가동되었는지를 타나내고, 사용자 또는 게임 내부적으로 리셋될 수 있다.
윈도우즈를 포함한 대다수 OS는 빠른부팅을 지원하며 OS의 Uptime은 단순 재부팅으로 리셋되지 않는다.
윈도우즈 [재시작 또는 종료] 를 [Shift] 키를 누른 상태로 실행하면 완전한 재시작 및 종료가 되고 Uptime이 리셋된다.

이 경우 GetTime() 1초부터 다시 증가 한다. 문제는 스킬의 재사용 대기시간을 알아보는
GetSpellCooldown() 함수가 GetTime() 기반으로 계산된다는 점이다.

예를들어 [변환식: 아케이나이트]를 Uptime이 10일일때 시전하고, 강제로 Uptime를 리셋하면
리셋전에 GetSpellCooldown()은 시작 시간을 10일, 리셋후엔 46일이 넘는 시간을 반환한다.

46일이란 시간은 어디에서 오는지를 알 수 없다. 그래서 정답인 계산이 오답이 된다.

GetTime()의 최대 값은 2^32 / 1000이고 이 값이 Uptime이 리셋되었을때 GetSpellCooldown의 재계산에 사용된다.

늘 올바른 재사용 대기시간을 알기 위해서는 남은 시간이 스킬의 대기시간을 초과되지 않는다고 가정한다.

-- 변환식: 아케이나이트의 시전이 완료된 때의 Uptime(started)과 대기시간 2일(duration)을 얻는다.
local started, duration = GetSpellCooldown(17187)
-- 현재 플레이어 시스템의 Uptime를 얻는다.
local time = GetTime()
-- 남은 재사용 대기시간을 계산
local left = started + duration - time

-- 이미 시전한 스킬인가?
if started > 0 then
  -- 남은 시간이 2일을 초과하는가?
  if left > duration then
   -- Uptime이 리셋되었다고 가정하고 상수 값을 제외
   left = left - (2^32 / 1000)
  end

 -- 남은 재사용 대기시간 표시
 print(SecondsToTime(left))
end