owner = GameLogic.getCurrentController().getOwner() import time #send request if owner.synctime > 30: if owner.syncpacket < 6: from libpac import * if owner.synctime >= 32 and owner.synctime < 34 and owner.syncpacket == 0: GameLogic.client_sock.write_raw(PAC_OVERHEAD_REQTIME,GameLogic.client_sock.ID, str(time.time())) owner.syncpacket = 1 elif owner.synctime >= 34 and owner.synctime < 36 and owner.syncpacket == 1: GameLogic.client_sock.write_raw(PAC_OVERHEAD_REQTIME,GameLogic.client_sock.ID, str(time.time())) owner.syncpacket = 2 elif owner.synctime >= 36 and owner.synctime < 38 and owner.syncpacket == 2: GameLogic.client_sock.write_raw(PAC_OVERHEAD_REQTIME,GameLogic.client_sock.ID, str(time.time())) owner.syncpacket = 3 elif owner.synctime >= 38 and owner.synctime < 40 and owner.syncpacket == 3: GameLogic.client_sock.write_raw(PAC_OVERHEAD_REQTIME,GameLogic.client_sock.ID, str(time.time())) owner.syncpacket = 4 elif owner.synctime > 40 and owner.synctime < 42 and owner.syncpacket == 4: GameLogic.client_sock.write_raw(PAC_OVERHEAD_REQTIME,GameLogic.client_sock.ID, str(time.time())) owner.syncpacket = 5 elif owner.synctime > 42 and owner.syncpacket == 5: GameLogic.client_sock.write_raw(PAC_OVERHEAD_REQTIME,GameLogic.client_sock.ID, str(time.time())) owner.syncpacket = 6 else: owner.syncpacket = 0 owner.synctime = 0 if hasattr(GameLogic,"client_sock"): if len(GameLogic.client_sock.clockpackets) == 6: from math import * sorteddeltas = GameLogic.client_sock.clockpackets sorteddeltas = sorteddeltas[1:len(sorteddeltas)] sorteddeltas.sort() original = GameLogic.client_sock.clockpackets[0] n = len(sorteddeltas) SDev = 0 mean = 0 sum = 0 gooddeltas = [] mean_delta = 0 for i in sorteddeltas: mean += i mean /= n for i in sorteddeltas: sum += (mean - i) * (mean - i) SDev = sqrt(sum/(n-1)) for i in sorteddeltas: if (mean - i) < SDev: gooddeltas.append(i) for i in gooddeltas: mean_delta += i mean_delta /= n print "Delta aveage: " + str(mean_delta) it = time.time() GameLogic.client_sock.clockdelta = mean_delta GameLogic.client_sock.clockpackets = [] GameLogic.client_sock.clockpackets.append(original) print "Local Time: " + str(time.time()) print "Guessed Server Time: " + str(GameLogic.client_sock.getTimeStamp())