. */ /* Basic constants */ /* 1 IG hour = 3 IRL minutes = 1800 ticks */ define('RYTIME_HOUR_TICKS', 1800); define('RYTIME_DAY_HOURS', 24); define('RYTIME_SEASON_DAYS', 90); define('RYTIME_MONTH_DAYS', 30); define('RYTIME_CYCLE_MONTHS', 12); define('RYTIME_JY_CYCLES', 4); define('RYTIME_WEEK_DAYS', 6); /* 0 = spring, 1 = summer, 2 = automn, 3 = winter */ define('RYTIME_CYCLE_SEASONS', 4); /* Tick is offset on server of 61 days. */ define('RYTIME_TICK_OFFSET', 61 * RYTIME_DAY_HOURS * RYTIME_HOUR_TICKS); define('RYTIME_START_JY', 2568); /* Helpers */ define('RYTIME_CYCLE_DAYS',RYTIME_CYCLE_MONTHS * RYTIME_MONTH_DAYS); define('RYTIME_JY_DAYS', RYTIME_CYCLE_DAYS * RYTIME_JY_CYCLES); define('RYTIME_JY_MONTHS', RYTIME_CYCLE_MONTHS * RYTIME_JY_CYCLES); // Takes a server tick and returns a computed array function ryzom_time_array($tick) { $out = array(); $out["server_tick"] = $tick; $time_in_hours = ($tick-RYTIME_TICK_OFFSET) / RYTIME_HOUR_TICKS; $day = $time_in_hours / RYTIME_DAY_HOURS; $out["jena_year"] = floor($day / RYTIME_JY_DAYS) + RYTIME_START_JY; if ($day < 0) $day = RYTIME_JY_DAYS - abs($day) % RYTIME_JY_DAYS; $out["day_of_jy"] = $day % RYTIME_JY_DAYS; $out["month_of_jy"] = floor($out["day_of_jy"] / RYTIME_MONTH_DAYS); $out["cycle"] = floor($out["day_of_jy"] / RYTIME_CYCLE_DAYS); $out["day_of_cycle"] = $day % RYTIME_CYCLE_DAYS; $out["month_of_cycle"] = $out["month_of_jy"] % RYTIME_CYCLE_MONTHS; $out["day_of_month"] = $out["day_of_jy"] % RYTIME_MONTH_DAYS; $out["day_of_week"] = $day % RYTIME_WEEK_DAYS; $out["season"] = ($day / RYTIME_SEASON_DAYS) % RYTIME_CYCLE_SEASONS; $out["day_of_season"] = $day % RYTIME_SEASON_DAYS; $out["time_of_day"] = abs($time_in_hours) % RYTIME_DAY_HOURS; if ($time_in_hours < 0 && $out["time_of_day"]) $out["time_of_day"] = RYTIME_DAY_HOURS - $out["time_of_day"]; return $out; } function ryzom_time_xml_without_cache($rytime) { $out = new SimpleXMLElement(''); foreach($rytime as $key => $value) { $out->addChild($key, $value); } return $out; } /** * Take number of the month (0-11) and returns its name */ function ryzom_month_name($month_number) { if ($month_number < 0 || $month_number > 11) return "bad month"; $RYTIME_MONTHS = array( 'Winderly', 'Germinally', 'Folially', 'Floris', 'Medis', 'Thermis', 'Harvestor', 'Frutor', 'Fallenor', 'Pluvia', 'Mystia', 'Nivia' ); return $RYTIME_MONTHS[(int)$month_number]; } /** * Take number of the day of week (0-5) and returns its name */ function ryzom_day_name($day_number) { if ($day_number < 0 || $day_number > 5) return "bad day of week"; $RYTIME_DAYS = array( 'Prima', 'Dua', 'Tria', 'Quarta', 'Quinteth', 'Holeth' ); return $RYTIME_DAYS[(int)$day_number]; } /** * Take a computed ryzom time array and returns the formatted date * (Official 2004 Format without trailing JY) */ function ryzom_time_txt($rytime, $lang = "en") { if ($lang != "en" && $lang != "fr" && $lang != "de") $lang = "en"; $RYTIME_AC = array( "de" => array("1. AZ", "2. AZ", "3. AZ", "4. AZ"), "en" => array("1st AC", "2nd AC", "3rd AC", "4th AC"), "fr" => array("1er CA", "2e CA", "3e CA", "4e CA") ); # Day, Month DayOfMonth, CycleNth AC JY return sprintf("%sh - %s, %s %d, %s %d", $rytime["time_of_day"], ryzom_day_name($rytime["day_of_week"]), ryzom_month_name($rytime["month_of_cycle"]), $rytime["day_of_month"] + 1, $RYTIME_AC[$lang][$rytime["cycle"]], $rytime["jena_year"]); } ?>