--Around The World Sylvester V.1.1 by chill --also thx to plop,tezlo,notrabidwombat --------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------- --You need this Folder in the ScriptsFolder ATWFolder = "txt" --This is the ascii in the Folder ASCIIFile = "SYLVESTER.txt" SylYear,SylMonth,SylDay = 03,12,31 File1 = "ATWSCity.txt" --------------------------------------------------------------------------------------------------------- host = "www.timeanddate.com" --get = "worldclock/index.html" get = "worldclock/full.html" GETHTML = "GET /"..get.." HTTP/1.1\r\nHost: "..host.."\r\nUser-Agent: Mozilla/4.0 (compatible; LUA 4.0; LUA 4.0)\r\n" CityGMT = {} Set = 1 dofile(ATWFolder.."/"..File1) --------------------------------------------------------------------------------------------------------- function Main() sylday,sylsec = jdate(SylDay,SylMonth,SylYear,24,0,0) if not LGMT then GetCityGMT() else if (tonumber(date("%M"))~=0) then SetTimer((60 - tonumber(date("%M"))) *60*1000 - tonumber(date("%S"))*1000) else SetTimer(1) end end ASCII = ReadFile() StartTimer() end function OnTimer() if (tonumber(date("%d")) == SylDay or (tonumber(date("%d")) == 1 and tonumber(date("%y")) == SylYear + 1)) and Set == 1 then SetTimer(60*60*1000) for i,v in CityGMT do if (tonumber(date("%H")) + GMT + i == 0) or (tonumber(date("%H")) + GMT + i == 24) then local cities = "" for i2 = 1,getn(CityGMT[i]) do cities = cities..CityGMT[i][i2]..", " end SendToAll("Happy New Year to :\r\n"..cities) end end end local curday,cursec = jdate(tonumber(date("%d")),tonumber(date("%m")),tonumber(date("%y")),tonumber(date("%H")),tonumber(date("%M")),tonumber(date("%S"))) local tmp = sylsec-cursec local hours, minutes,seconds = floor(mod(tmp/3600, 60)), floor(mod(tmp/60, 60)), floor(mod(tmp/1, 60)) if sylday-curday > 0 then SendToAll(" *** Still "..sylday-curday.." Days till Sylvester.") SetTimer(60*60*1000) elseif sylday-curday == 0 and hours ~= 0 then SendToAll(" *** Still "..sylday-curday.." Days and "..hours.." till Sylvester.") SetTimer(60*60*1000) elseif sylday-curday == 0 and hours == 0 and minutes ~= 0 then SendToAll(" *** Still "..sylday-curday.." Days, "..hours.." Hours and "..minutes.." Minutes till Sylvester.") Set = 0 SetTimer(60*1000) elseif sylday-curday == 0 and hours == 0 and minutes == 0 and sec > 20 then SendToAll(" *** Still "..sylday-curday.." Days, "..hours.." Hours, "..minutes.." Minutes and "..seconds.." Seconds till Sylvester.") Set = 0 SeTimer(10*1000) elseif sylday-curday == 0 and hours == 0 and minutes == 0 and sec <= 20 then SendToAll(" *** Still "..sylday-curday.." Days, "..hours.." Hours, "..minutes.." Minutes and "..seconds.." Seconds till Sylvester.") Set = 0 SeTimer(1*1000) elseif sylday-curday == 0 and hours == 0 and minutes == 0 and sec == 0 then SendToAll(ASCII) Set = 1 SetTimer(1000) end end function GetCityGMT() socket, e = connect(host, 80) if not e then local line1 = "" socket:timeout(2) socket:send(GETHTML..strchar(13,10)) local da,ho,mi = "",0,0 while not e do line1, e = socket:receive("*l") local line = gsub(gsub(line1,"%b<>","$"),"%s%*+","") if strfind(line1,"Date:%s+(%w+),%s+%d+%s+%w+%s%d+%s(%d+):(%d+):%d+%s+GMT") then _,_,da,ho,mi = strfind(line1,"Date:%s+(%w+),%s+%d+%s+%w+%s%d+%s(%d+):(%d+):%d+%s+GMT") elseif strfind(line,& quot;$$$([^$]*)$$$(%w+)%s+(%d+):(%d+)%s+(%w+)$$$([^$]*)$$$(%w+)%s+(%d+):(%d +)%s+(%w+)$$$([^$]*)$$$(%w+)%s+(%d+):(%d+)%s+(%a+)") then _,_,city1,day1,ho1,mi1,PA1,city2,day2,ho2,mi2,PA2,city3,day3,ho3,mi3,PA 3 = strfind(line,& quot;$$$([^$]*)$$$(%w+)%s+(%d+):(%d+)%s+(%w+)$$$([^$]*)$$$(%w+)%s+(%d+):(%d +)%s+(%w+)$$$([^$]*)$$$(%w+)%s+(%d+):(%d+)%s+(%a+)") for i = 1,3 do dostring("city,day,hou,min,PA = city"..i..",day"..i..",ho"..i..",mi"..i..",PA"..i) if (min == mi) or ((min-mi)==-30) or ((min-mi)==30) then if PA == "PM" and tonumber(hou)~=12 then hou = hou + 12 elseif PA == "AM" and tonumber(hou)==12 then hou = 0 end local diff = 0 if da ~= day and tonumber(ho) >= 12 then diff = 24 - ho + hou elseif da~=day and tonumber(ho) < 12 then diff = -24 + hou - ho else diff = hou - ho end if not CityGMT[diff] then CityGMT[diff] = {} end tinsert(CityGMT[diff],city) end end elseif line1 == "" then break end end socket:close() for i,v in CityGMT do sort(CityGMT[i]) end if da ~= date("%a") and tonumber(ho) >= 12 then LGMT = 24 - ho + tonumber(date("%H")) elseif da~=date("%a") and tonumber(ho) < 12 then LGMT = -24 + tonumber(date("%H")) - ho else LGMT = tonumber(date("%H")) - ho end if (tonumber(date("%M"))~=0) then SetTimer((60 - tonumber(date("%M"))) *60*1000 - tonumber(date("%S"))*1000) else SetTimer(1) end WriteFile(CityGMT,"CityGMT",File1) end end ---------------------------------------------------------------------------------------------------------------------------------------------- function WriteFile(table,tablename,file) local handle = openfile("txt/"..file,"w") Serialize(table,tablename,handle) write(handle,"\r\nLGMT = "..LGMT) closefile(handle) end ---------------------------------------------------------------------------------------------------------------------------------------------- function Serialize(tTable,sTableName,hFile,sTab) sTab = sTab or ""; write(hFile,sTab..sTableName.." = {\n"); for key,value in tTable do local sKey = (type(key) == "string") and format("[%q]",key) or format("[%d]",key); if(type(value) == "table") then Serialize(value,sKey,hFile,sTab.."\t"); else local sValue = (type(value) == "string") and format("%q",value) or tostring(value); write(hFile,sTab.."\t"..sKey.." = "..sValue); end write(hFile,",\n"); end write(hFile,sTab.."}"); end ---------------------------------------------------------------------------------------------------------------------------------------------- function jdate(d, m, y,ho,mi,se) local a, b, c = 0, 0, 0 if m <= 2 then y = y - 1 m = m + 12 end if (y*10000 + m*100 + d) >= 15821015 then a = floor(y/100) b = 2 - a + floor(a/4) end if y <= 0 then c = 0.75 end return floor(365.25*y - c) + floor(30.6001*(m+1) + d + 1720994 + b),ho*3600+mi*60+se end ---------------------------------------------------------------------------------------------------------------------------------------------- function ReadFile() local handle = openfile(ATWFolder.."/"..ASCIIFile, "r") if handle then local contents = gsub(read(handle, "*a"),strchar(10), "\r\n") closefile (handle) return contents end end