1
package l1j.server.server.model.gametime;

public class GameTime extends BaseTime {
    protected static final long BASE_TIME_IN_MILLIS_REAL = 1751860800000L;

    public GameTime() {
    }

    protected long getBaseTimeInMil() {
        return BASE_TIME_IN_MILLIS_REAL;
    }

    protected int makeTime(long timeMillis) {
        // 1. 차이값을 계산 (long 타입이라 매우 큼)
        long diff = timeMillis - getBaseTimeInMil();
        if (diff < 0L) diff = 0L;

        // 2. 핵심: int 범위를 넘지 않도록 '순환' 시킴 (모듈로 연산)
        // 리니지 게임 시간의 최대 주기(예: 1년치 밀리초)로 나눠버리면 
        // 숫자가 무한히 커지지 않고 다시 0부터 흐릅니다.
        // 여기서는 안전하게 int의 최대치 근처에서 계속 순환하도록 설계합니다.
        
        long gameTimeTicks = (diff * 6L / 1000L);
        
        // 21억(int 한계)이 넘으면 다시 0부터 시작하게 만듦 (나머지 계산)
        int finalTime = (int) (gameTimeTicks % 2147483647L);

        int adjustment = finalTime % 3;
        return finalTime - adjustment;
    }
}

For immediate assistance, please email our customer support: [email protected]

Download RAW File