com.neolao.special.VanadielTime
Calculs sur le temps de Vana'diel
Propriétés
Visibilité | Type | Nom | Status | Description |
---|---|---|---|---|
public | String | vanaDay | Lecture seule | Le nom du jour sur Vana'diel |
public | Number | vanaYear | Lecture seule | L'année sur Vana'diel |
public | String | vanaMonth | Lecture seule | Le mois sur Vana'diel |
public | String | vanaDate | Lecture seule | Le jour sur Vana'diel |
public | String | vanaHour | Lecture seule | L'heure sur Vana'diel |
public | String | vanaMinutes | Lecture seule | Les minutes sur Vana'diel |
public | String | vanaSecondes | Lecture seule | Les secondes sur Vana'diel |
public | String | vanaMoon | Lecture seule | La lune sur Vana'diel |
public | Date | vanaNextNewMoonStart | Lecture seule | Date du début de la prochaine New Moon |
public | Date | vanaNextNewMoonEnd | Lecture seule | Date de la fin de la prochaine New Moon |
public | Date | vanaNextFullMoonStart | Lecture seule | Date du début de la prochaine Full Moon |
public | Date | vanaNextFullMoonEnd | Lecture seule | Date de la fin de la prochaine Full Moon |
public | Array | pageRSE | Lecture seule | Liste des RSE |
public | Object | ballista | Lecture seule | Détails du match Ballista courant (indiqué dans l'update) |
public | Object | nextDay | Lecture seule | Détails du prochain jour Vanadiel |
Méthodes
Visibilité | Return | Nom | Param 1 | Param 2 | Param 3 | Param 4 | Description |
---|---|---|---|---|---|---|---|
public | Void | update | ARGnextDay:Number | ARGnextMoon:Number | ARGnextRSE:Number | ARGnextBallista:Number | Faire tous les calculs |
public | Void | updateNextMoon | ARGnext:Number | Calcule les dates des prochaines New Moon et Full Moon | |||
public | Void | updateRSE | ARGpage:Number | Met à jour la liste des dates RSE |
Change log
[24/03/2004] Version 1.1
- Onglet Vana'diel Time. Affichage du jour, de la date, de la lune et de l'heure mis à jour en continu
- Onglet Vana'diel Moon. Affichage des dates IRL de débuts et fins des New Moon et Full Moon
- Onglet Créneaux RSE. Affichage des dates IRL, de la race et du lieu où se déroule la RSE (Elle dure 8h IRL)
[02/09/2004] Version 1.2
Onglet Créneaux Ballista. Affichage des dates IRL, du restriction de level et des nations en conflit.
[02/09/2004] Version 1.3
Onglet Créneaux Ballista. Mauvaise source d'informations de Ballista. De nouveaux calculs ont été fait.
[03/09/2004] Version 1.4
Onglet Vana'diel Time. Ajout d'une visualisation des prochains jours vanadiel.
Source
/** * Calculs sur le temps de Vana'diel * @author neolao <neo@neolao.com> * @version 1.4 (03/09/2004) * @link http://resources.neolao.com/flash/classes/special/vanadieltime * @license http://creativecommons.org/licenses/by-sa/2.0/ */ class com.neolao.special.VanadielTime { public var className:String = "VanadielTime"; public var version:String = "1.4"; // ----------------------------- CONSTANTES -------------------------------- /** * Les Nations */ private static var NATION = new Array("San d'Oria", "Bastok", "Windurst"); /** * Date utilisé pour convertir le temps IRL en temps IGL */ private static var BASIS_DATE:Date = new Date(Date.UTC(2002, 5, 23, 15, 0, 0, 0)); /** * Date utilisé pour obtenir les phases de la lune */ private static var MOON_DATE:Date = new Date(Date.UTC(2004, 0, 25, 2, 31, 12, 0)); /** * Date utilisé pour les calculs RSE */ private static var RSE_DATE:Date = new Date(Date.UTC(2004, 0, 28, 9, 14, 24, 0)); /** * Date utilisé pour calculer le jour IGL */ private static var DAY_DATE:Date = new Date(Date.UTC(2004, 0, 28, 9, 14, 24, 0)); /** * Les jours de Vana'diel */ private static var VANADIEL_DAY:Array = new Array("Firesday", "Earthsday", "Watersday", "Windsday", "Iceday", "Lightningday", "Lightsday", "Darksday"); /** * Liste des races pour les RSE */ private static var RSE_RACE:Array = new Array("M. Hume","F. Hume","M. Elvaan","F. Elvaan","M. TaruTaru","F. TaruTaru","Mithra","Galka"); /** * Lieux pour les RSE */ private static var RSE_LOCATION:Array = new Array("Gusgen Mines","Shakrami Maze","Ordelle Caves"); /** * Millisecondes en une journée IGL */ private static var MS_GAMEDAY:Number = (24 * 60 * 60 * 1000 / 25); /** * Millisecondes en une journée IRL */ private static var MS_REALDAY:Number = (24 * 60 * 60 * 1000); /** * Nombre de RSE affiché */ private static var NB_RSE:Number = 1; /** * Les levels de restriction pour Ballista (30 jours, que les nombres pair) */ private static var BALLISTA_LEVEL = new Array("30", "30", "30", "40", "40", "40", "50", "50", "50", "60", "60", "60", "Free", "Free", "Free"); /** * Les lieux possibles du Ballista */ private static var BALLISTA_AREA_STR = new Array("Jugner", "Pashhow", "Meriphataud"); /** * Les lieux du Ballista dans le mois (30 jours, que les nombres pair) */ private static var BALLISTA_AREA = new Array(0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2); /** * Les Versus du Ballista sur l'année (12 mois, 3 tranches (1-4, 5-8, 9-12)) */ private static var BALLISTA_VERSUS = new Array([{area:0, nation1:1, nation2:0}, {area:1, nation1:1, nation2:2}, {area:2, nation1:0, nation2:2}], [{area:0, nation1:1, nation2:2}, {area:1, nation1:0, nation2:2}, {area:2, nation1:1, nation2:0}], [{area:0, nation1:0, nation2:2}, {area:1, nation1:0, nation2:1}, {area:2, nation1:1, nation2:2}]); // ----------------------------- VARIABLES --------------------------------- private var _vanaDay:Number; private var _vanaYear:Number; private var _vanaMonth:String; private var _vanaDate:String; private var _vanaHour:String; private var _vanaMin:String; private var _vanaSec:String; private var _vanaMoon:String; private var _vanaNextNewMoon:Date; private var _vanaNextNewMoonEnd:Date; private var _vanaNextFullMoon:Date; private var _vanaNextFullMoonEnd:Date; private var _pageRSE:Array; private var _ballista:Object; private var _nextDay:Object; /*============================= CONSTRUCTEUR =============================*/ /*========================================================================*/ /** * Active une update à l'instanciation de la class */ public function VanadielTime(){ update(); } /*======================= FIN = CONSTRUCTEUR = FIN =======================*/ /*========================================================================*/ /*=========================== METHODES PRIVEES ===========================*/ /*========================================================================*/ /** * Convertion d'une date IRL en date IGL * @param pTime Le temps IRL * @return Un object avec les propriétés .day, .year, .month, .date, .hour, .min, .sec */ private function realTimeToVanaTime(pTime:Date):Object{ var vNowDate:Date = pTime; var vVanaDate:Number = ((898 * 360 + 30) * MS_REALDAY) + (vNowDate.getTime() - BASIS_DATE.getTime()) * 25; var vYear = Math.floor(vVanaDate / (360 * MS_REALDAY)); var vMonth = Math.floor((vVanaDate % (360 * MS_REALDAY)) / (30 * MS_REALDAY)) + 1; var vDate = Math.floor((vVanaDate % (30 * MS_REALDAY)) / (MS_REALDAY)) + 1; var vHour = Math.floor((vVanaDate % (MS_REALDAY)) / (60 * 60 * 1000)); var vMin = Math.floor((vVanaDate % (60 * 60 * 1000)) / (60 * 1000)); var vSec = Math.floor((vVanaDate % (60 * 1000)) / 1000); var vDay = Math.floor((vVanaDate % (8 * MS_REALDAY)) / (MS_REALDAY)); var vResult:Object = new Object(); //vYear = NumberUtils.nChar(vYear, 4); vMonth = NumberUtils.nChar(vMonth, 2); vDate = NumberUtils.nChar(vDate, 2); vHour = NumberUtils.nChar(vHour, 2); vMin = NumberUtils.nChar(vMin, 2); vSec = NumberUtils.nChar(vSec, 2); vResult.day = vDay; vResult.year = vYear; vResult.month = vMonth; vResult.date = vDate; vResult.hour = vHour; vResult.min = vMin; vResult.sec = vSec; return vResult; } private function getVanadielTime(){ var vNowDate:Date = new Date(); var vVanaTime:Object = realTimeToVanaTime(vNowDate); _vanaDay = vVanaTime.day; _vanaYear = vVanaTime.year; _vanaMonth = vVanaTime.month; _vanaDate = vVanaTime.date; _vanaHour = vVanaTime.hour; _vanaMin = vVanaTime.min; _vanaSec = vVanaTime.sec; } /** * Chaque cycle lunaire dure exactement 84 jours IGL (3 jours, 8 heures, 38 minutes, 24 secondes) * New moon commence au jour 38 (-10%) et fini au jour 47 (12%) * Full moon commence au jour 80 (90%) et fini au jour 5 (-88%) * @param pNext La prochaine phase demandée */ private function getMoonPhase(pNext:Number){ var vNext:Number = (pNext != null)?pNext:1; var vFullMoonBasis:Number = MOON_DATE.getTime() + (3 * MS_GAMEDAY); var vNowDate:Date = new Date(); var vLocalTime:Number = vNowDate.getTime(); var vMoonDays:Number = (Math.floor((vLocalTime - MOON_DATE.getTime()) / MS_GAMEDAY)) % 84; var vMoonPercent:Number = - Math.round((42 - vMoonDays) / 42 * 100); // Lune courante if (vMoonPercent == -100){ _vanaMoon = "100% Full Moon"; } else if (vMoonPercent == 0){ _vanaMoon = "0% New Moon"; } else if (vMoonPercent < 0){ _vanaMoon = -(vMoonPercent) + "% Waning"; } else if (vMoonPercent > 0){ _vanaMoon = vMoonPercent + "% Waxing"; } // Lune demandée var vElapsedCycles:Number = Math.floor( (vLocalTime - vFullMoonBasis) / (84 * MS_GAMEDAY) ) + vNext; var vFullMoonEnd:Number = vFullMoonBasis + (vElapsedCycles * 84 * MS_GAMEDAY); var vFullMoonStart:Number = vFullMoonEnd - 7 * MS_GAMEDAY; var vNewMoonStart:Number = vFullMoonEnd - 49 * MS_GAMEDAY; var vNewMoonEnd:Number = vFullMoonEnd - 42 * MS_GAMEDAY; _vanaNextNewMoon = new Date(vNewMoonStart); _vanaNextNewMoonEnd = new Date(vNewMoonEnd); _vanaNextFullMoon = new Date(vFullMoonStart); _vanaNextFullMoonEnd = new Date(vFullMoonEnd); } /** * Met à jour la liste _pageRSE * @param pStart Le départ de la liste */ private function getRSE(pStart:Number){ var vShowNb:Number = NB_RSE; var vTimeNow:Date = new Date(); var vLocalTime:Number = vTimeNow.getTime(); var vTimeRSE = RSE_DATE.getTime(); var vElapsedWeeks:Number; var vStartRSE:Number; var vDateStartRSE:Date; var vRaceRSE:String; var vLocationRSE:String; var vObjRSE:Object; var i:Number; _pageRSE = new Array(); for(i=pStart; i<pStart + vShowNb; i++){ vElapsedWeeks = Math.floor( (vLocalTime - vTimeRSE) / (8 * MS_GAMEDAY) ) + i; vStartRSE = vTimeRSE + (vElapsedWeeks * 8 * MS_GAMEDAY); vDateStartRSE = new Date(vStartRSE); vRaceRSE = RSE_RACE[vElapsedWeeks % 8]; vLocationRSE = RSE_LOCATION[vElapsedWeeks % 3]; vObjRSE = new Object(); vObjRSE.date = vDateStartRSE; vObjRSE.race = vRaceRSE; vObjRSE.location = vLocationRSE; _pageRSE.push(vObjRSE); } } /** * Met à jour la liste _ballista * Les match sont tous les 2 jours IGL * @param pStart Le départ de la liste */ private function getBallista(pStart:Number){ var vNext:Number = (pStart != null)?pStart:1; var vTimeNow:Date = new Date(); var vLocalTime:Number = vTimeNow.getTime(); var vTimeBasis:Number = BASIS_DATE.getTime(); var vNextTime:Date; var vNextVanaTime:Object; var vNextMonth:Number; var vNextDate:Number; var vAreaTemp:Number; // Match demandé var vNextMatch = Math.floor( (vLocalTime - vTimeBasis) / (2 * MS_GAMEDAY) ) + vNext; vNextTime = new Date(vTimeBasis + (vNextMatch * 2 * MS_GAMEDAY) + MS_GAMEDAY); vNextVanaTime = realTimeToVanaTime(vNextTime); vNextDate = Number(vNextVanaTime.date); vNextMonth = Number(vNextVanaTime.month); vAreaTemp = BALLISTA_AREA[vNextDate / 2 - 1]; _ballista = new Object(); _ballista.date = vNextTime; _ballista.level = BALLISTA_LEVEL[vNextDate / 2 - 1]; _ballista.area = BALLISTA_AREA_STR[vAreaTemp]; if(vNextMonth >= 1 && vNextMonth <= 4){ _ballista.versus = NATION[BALLISTA_VERSUS[0][vAreaTemp].nation1] + " VS " + NATION[BALLISTA_VERSUS[0][vAreaTemp].nation2]; }else if(vNextMonth >= 5 && vNextMonth <= 8){ _ballista.versus = NATION[BALLISTA_VERSUS[1][vAreaTemp].nation1] + " VS " + NATION[BALLISTA_VERSUS[1][vAreaTemp].nation2]; }else{ _ballista.versus = NATION[BALLISTA_VERSUS[2][vAreaTemp].nation1] + " VS " + NATION[BALLISTA_VERSUS[2][vAreaTemp].nation2]; } } /** * La date d'un jour de Vanadiel (permet aux crafteurs de s'organiser à l'avance) * @param pNext Le nombre de jour à partir d'aujourd'hui */ private function getVanaDay(pNext:Number):Object{ var vNext:Number = (pNext != null)?pNext:1; var vTimeNow:Date = new Date(); var vLocalTime:Number = vTimeNow.getTime(); var vTimeBasis:Number = BASIS_DATE.getTime(); // Jour demandé var vNextDay:Number = Math.floor( (vLocalTime - vTimeBasis) / MS_GAMEDAY ) + vNext; var vNextTime:Date = new Date(vTimeBasis + (vNextDay * MS_GAMEDAY)); var vNextVanaTime:Object = realTimeToVanaTime(vNextTime); _nextDay = new Object(); _nextDay.day = VANADIEL_DAY[vNextVanaTime.day]; _nextDay.date = vNextTime; return _nextDay; } /*===================== FIN = METHODES PRIVEES = FIN =====================*/ /*========================================================================*/ /*============================ GETTER SETTER ============================*/ /*========================================================================*/ /** * Le nom du jour sur Vana'diel */ public function get vanaDay():String { return VANADIEL_DAY[_vanaDay]; } /** * L'année sur Vana'diel */ public function get vanaYear():Number { return _vanaYear; } /** * Le mois sur Vana'diel */ public function get vanaMonth():String { return _vanaMonth; } /** * Le jour sur Vana'diel */ public function get vanaDate():String { return _vanaDate; } /** * L'heure sur Vana'diel */ public function get vanaHour():String { return _vanaHour; } /** * Les minutes sur Vana'diel */ public function get vanaMinutes():String { return _vanaMin; } /** * Les secondes sur Vana'diel */ public function get vanaSecondes():String { return _vanaSec; } /** * La lune sur Vana'diel */ public function get vanaMoon():String { return _vanaMoon; } /** * Date du début de la prochaine New Moon */ public function get vanaNextNewMoonStart():Date{ return _vanaNextNewMoon; } /** * Date de la fin de la prochaine New Moon */ public function get vanaNextNewMoonEnd():Date{ return _vanaNextNewMoonEnd; } /** * Date du début de la prochaine Full Moon */ public function get vanaNextFullMoonStart():Date{ return _vanaNextFullMoon; } /** * Date de la fin de la prochaine Full Moon */ public function get vanaNextFullMoonEnd():Date{ return _vanaNextFullMoonEnd; } /** * Liste des RSE * Chaque élément de la liste a 3 propriétés : * - date au format Date qui donne le début du créneaux RSE * - race au format String qui donne la race pour ce créneaux * - location au format String qui donne le lieu */ public function get pageRSE():Array{ return _pageRSE; } /** * Détails du match Ballista courant (indiqué dans l'update) * L'objet retourné a les propriétés suivantes : * - date au format Date qui donne le début du match * - level au format String : "30", "40", "50", "60", "Free" * - area au format String : "Jugner", "Pashhow", "Meriphataud" * - versus au format String : "San d'Oria VS Bastok", "Bastok VS Windurst", "San d'Oria VS Windurst" */ public function get ballista():Object{ return _ballista; } /** * Détails du prochain jour Vanadiel * L'objet retourné a les propriétés suivantes : * - day au format String qui indique l'élément du jour * - date au format Date qui donne le début de ce jour */ public function get nextDay():Object{ return _nextDay } /*====================== FIN = GETTER SETTER = FIN ======================*/ /*========================================================================*/ /*========================== METHODES PUBLIQUES ==========================*/ /*========================================================================*/ /** * Faire tous les calculs * @param pNextMoon Numéro de prochaine Lune à partir de maintenant [option=1] * @param pNextRSE Numéro de la prochaine RSE à partir de maintenant [option=1] * @param pNextBallista Numéro du prochain Ballista à partir de maintenant [option=1] */ public function update(pNextDay:Number, pNextMoon:Number, pNextRSE:Number, pNextBallista:Number){ var vNextDay:Number = (pNextDay != null)?pNextDay:1; var vNextMoon:Number = (pNextMoon != null)?pNextMoon:1; var vNextRSE:Number = (pNextRSE != null)?pNextRSE:1; var vNextBallista:Number = (pNextBallista != null)?pNextBallista:1; getVanadielTime(); getVanaDay(vNextDay); getMoonPhase(vNextMoon); updateRSE(vNextRSE); getBallista(vNextBallista); } /** * Calcule les dates des prochaines New Moon et Full Moon */ public function updateNextMoon(pNext:Number){ getMoonPhase(pNext); } /** * Met à jour la liste des dates RSE */ public function updateRSE(pPage:Number){ getRSE(pPage * NB_RSE); } /*==================== FIN = METHODES PUBLIQUES = FIN ====================*/ /*========================================================================*/ }