NWNX2, obtenir la date et l'heure IRL.

Répondre
Partager Rechercher
Obtenir la date et l'heure IRL peut servir. Sur Faltazia ça servait puisque les saisons étaient callées sur l'IRL (mais la planète tournait 6 fois plus vite, d'où l'alternance jour-nuit rapide) et que les scripts de pousse des fleurs en avaient besoin. Ca peut aussi servir par exemple si vous savez que votre provider va changer l'IP de votre serveur à 19:35, pour prévenir à 19:33 les joueurs connectés. Ou autres, selon votre imagination...
Code PHP:

//::///////////////////////////////////////////////
//:: Name      Date and time library.
//:: FileName  _DateTime
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*

*/
//:://////////////////////////////////////////////
//:: Created By: Daneel
//:: Created On: 30/05/06
//:://////////////////////////////////////////////

#include "Le nom de votre lib avec les fonctions nwnX2 (SQLExecDirect() et autres)."




//==============================================================================
//============================  I N T E R F A C E  =============================
//==============================================================================


//===========================  P R O T O T Y P E S  ============================



//------------------------  Date et heure In Real Life  ------------------------

// Recupere la date et l'heure IRL. A executer avant d'appeler GetIRLYear() et
// autres.
void DateTimeGetIRLDateTime();

// Retourne l'annee IRL courante sur 4 chiffres. Executer GetIRLDateTime avant.
int  DateTimeGetIRLYear();

// Retourne le numero du mois IRL courant. Executer GetIRLDateTime avant.
int  DateTimeGetIRLMonth();

// Retourne le numero du jour IRL courant dans le mois.
//Executer GetIRLDateTime avant.
int  DateTimeGetIRLDay();

// Retourne l'heure IRL courante. Format 24h. Executer GetIRLDateTime avant.
int  DateTimeGetIRLHour();

// Retourne la minute IRL courante. Executer GetIRLDateTime avant.
int  DateTimeGetIRLMinute();

// Retourne la seconde IRL courante. Executer GetIRLDateTime avant.
int  DateTimeGetIRLSecond();

// Retourne le No du jour IRL courant dans la semaine. 0 = dim, 1 = lun...
// Executer GetIRLDateTime avant.
int  DateTimeGetIRLWeekDay();



//--------------------------  Conversion en strings  ---------------------------

// Retourne le nom du mois dont le No est passe en parametre.
string DateTimeGetMonthName(int iMonth);

// Retourne le nom du jour de la semaine dont le numero est passe en parametre.
string DateTimeGetWeekDayName(int iWeekDay);

// Retourne une phrase qui donne la date IRL.
string DateTimeIRLToday();





//==============================================================================
//=======================  I M P L E M E N T A T I O N  ========================
//==============================================================================





//::///////////////////////////////////////////////
//:: Name      DateTimeGetIRLDateTime
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
  C'est cette fonction qui demande l'heure et la
  date à SQL. Le resultat est stocké sur le module
  pour etre analyse plus tard par
  DateTimeGetIRLYear() et autres.
*/
//:://////////////////////////////////////////////
//:: Created By: Daneel
//:: Created On: 30/05/06
//:://////////////////////////////////////////////

void DateTimeGetIRLDateTime() {
  
object oModule GetModule();
  
SQLExecDirect("SELECT DATE_FORMAT(now(), '%Y/%m/%d %T %w')");
  if (
SQLFetch()) {
    
string sDateTime SQLGetData(1); // ex: 2006/05/30 14:47:54 2
    
int iYear    StringToInt(GetSubString(sDateTime,  04));
    
int iMonth   StringToInt(GetSubString(sDateTime,  52));
    
int iDay     StringToInt(GetSubString(sDateTime,  82));
    
int iHour    StringToInt(GetSubString(sDateTime112));
    
int iMinute  StringToInt(GetSubString(sDateTime142));
    
int iSecond  StringToInt(GetSubString(sDateTime172));
    
int iWeekDay StringToInt(GetSubString(sDateTime201));
    
// iWeekDay = 0 (dimanche) .. 6 (samedi).
    
SetLocalInt(oModule"DateTimeYear"   iYear   );
    
SetLocalInt(oModule"DateTimeMonth"  iMonth  );
    
SetLocalInt(oModule"DateTimeDay"    iDay    );
    
SetLocalInt(oModule"DateTimeHour"   iHour   );
    
SetLocalInt(oModule"DateTimeMinute" iMinute );
    
SetLocalInt(oModule"DateTimeSecond" iSecond );
    
SetLocalInt(oModule"DateTimeWeekDay"iWeekDay);
  } else {
    
SetLocalInt(oModule"DateTimeYear"   , -1);
    
SetLocalInt(oModule"DateTimeMonth"  , -1);
    
SetLocalInt(oModule"DateTimeDay"    , -1);
    
SetLocalInt(oModule"DateTimeHour"   , -1);
    
SetLocalInt(oModule"DateTimeMinute" , -1);
    
SetLocalInt(oModule"DateTimeSecond" , -1);
    
SetLocalInt(oModule"DateTimeWeekDay", -1);
  }
}





//::///////////////////////////////////////////////
//:: Name      DateTimeGetIRL*
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*

*/
//:://////////////////////////////////////////////
//:: Created By: Daneel
//:: Created On: 30/05/06
//:://////////////////////////////////////////////

int  DateTimeGetIRLYear() {
  return 
GetLocalInt(GetModule(), "DateTimeYear");
}

int  DateTimeGetIRLMonth() {
  return 
GetLocalInt(GetModule(), "DateTimeMonth");
}

int  DateTimeGetIRLDay() {
  return 
GetLocalInt(GetModule(), "DateTimeDay");
}

int  DateTimeGetIRLHour() {
  return 
GetLocalInt(GetModule(), "DateTimeHour");
}

int  DateTimeGetIRLMinute() {
  return 
GetLocalInt(GetModule(), "DateTimeMinute");
}

int  DateTimeGetIRLSecond() {
  return 
GetLocalInt(GetModule(), "DateTimeSecond");
}

int  DateTimeGetIRLWeekDay() {
  return 
GetLocalInt(GetModule(), "DateTimeWeekDay");
}





//--------------------------  Conversion en strings  ---------------------------





//::///////////////////////////////////////////////
//:: Name      DateTimeGetMonthName
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
  Convertit un numero de mois en nom de mois.
  Traduisez-ca dans la langue que vous voulez,
  vous pouvez meme utiliser les noms de mois
  zarbi tels qu'ils sont definis dans le backgroud
  de votre monde.
*/
//:://////////////////////////////////////////////
//:: Created By: Daneel
//:: Created On: 30/05/06
//:://////////////////////////////////////////////

string DateTimeGetMonthName(int iMonth) {
  
string sResult;
  switch (
iMonth) {
    case  
sResult "janvier"  ; break;
    case  
sResult "février"  ; break;
    case  
sResult "mars"     ; break;
    case  
sResult "avril"    ; break;
    case  
sResult "mai"      ; break;
    case  
sResult "juin"     ; break;
    case  
sResult "juillet"  ; break;
    case  
sResult "août"     ; break;
    case  
sResult "septembre"; break;
    case 
10 sResult "octobre"  ; break;
    case 
11 sResult "novembre" ; break;
    case 
12 sResult "décembre" ; break;
    default : 
sResult "mois_inconnu";
  }
  return 
sResult;
}





//::///////////////////////////////////////////////
//:: Name      DateTimeGetWeekDayName
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
  Convertit un numero de jour en nom de jour.
  Traduisez-ca dans la langue que vous voulez,
  vous pouvez meme utiliser les noms de jours
  zarbi tels qu'ils sont definis dans le backgroud
  de votre monde.
*/
//:://////////////////////////////////////////////
//:: Created By: Daneel
//:: Created On: 30/05/06
//:://////////////////////////////////////////////

string DateTimeGetWeekDayName(int iWeekDay) {
  
string sResult;
  switch (
iWeekDay) {
    case 
sResult "dimanche"; break;
    case 
sResult "lundi"   ; break;
    case 
sResult "mardi"   ; break;
    case 
sResult "mercredi"; break;
    case 
sResult "jeudi"   ; break;
    case 
sResult "vendredi"; break;
    case 
sResult "samedi"  ; break;
    default : 
sResult "jour_inconnu";
  }
  return 
sResult;
}





//::///////////////////////////////////////////////
//:: Name      DateTimeIRLToday
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
  Construit une phrase toute prete a afficher, qui
  donne la date.

  Ca donne par exemple :
  "Aujourd'hui, nous sommes le mardi 30 mai 2006."
*/
//:://////////////////////////////////////////////
//:: Created By: Daneel
//:: Created On: 30/05/06
//:://////////////////////////////////////////////

string DateTimeIRLToday() {
  
string sResult "Aujourd'hui, nous sommes le ";

  
DateTimeGetIRLDateTime();
  
sResult += DateTimeGetWeekDayName(DateTimeGetIRLWeekDay()) + " ";
  
sResult += IntToString(DateTimeGetIRLDay()) + " ";
  
sResult += DateTimeGetMonthName(DateTimeGetIRLMonth()) + " ";
  
sResult += IntToString(DateTimeGetIRLYear());
  
sResult += ".";

  return 
sResult;

Et là je vais vraiment me coucher .
Citation :
Publié par Unshine
(mais la planète tournait 6 fois plus vite, d'où l'alternance jour-nuit rapide)
Ah bon, dans le cas-là la force centrifuge risquait pas de devenir plus forte que la force centripète, et tout le monde de se faire éjecter dans l'espace ?

Ok ok j'arrête
Tire la langue
J'avais fait les calculs... http://acrilik.free.fr/falt/sujet.php?FForum=1&idt=2895.

----------
La rotation six fois plus rapide d'Ehildereth par rapport à la Terre produit une force centrifuge trente-six fois plus importante. Pour compenser cette force centrifuge (dans l'hypothèse où la gravité en surface vaut en moyenne la même que sur Terre, ce qui a l'air d'être le cas quand on regarde la carrure des persos), la planète doit peser plus lourd. Soit plus grosse, soit plus dense, soit un mélange des deux.

J'ai supposé que l'étoile autour de laquelle gravitait Ehildereth était une étoile de seconde génération, comme notre Soleil. Pas de première car les premières ne sont pas entourées d'éléments lourds susceptibles de former des planètes telluriques (ya que de l'H ou de l'He dedans). J'aurais pu prendre 3e, 4e, etc., pourquoi pas, ça aurait enrichi le noyau d'Ehildereth en éléments lourds, et l'aurait densifié. Ca dépend juste de l'âge qu'on donne à l'Univers d'Ehildereth, je l'ai pris relativement jeune donc, pour ne pas poser d'hypothèses trop fortes. Bref, la densité d'Ehildereth avoisine les 5500 kg.m-3, soit 31% de Fer-Nickel contre 69% de Silicium (en gros hein). Comme sur Terre encore.

Du coup, c'est la taille d'Ehildereth qui en prend un coup. Après calcul de la géométrie du géoïde (surface équipotentielle de pesanteur), je trouve un aplatissement de la planète bigrement important : 6,18% (contre 0,17% pour la Terre). Pas étonnant avec une rotation aussi rapide. Cet aplatissement correspond à un rayon polaire plus petit que le rayon équatorial. Rayon équatorial : 6770 km. Rayon polaire : 6350 km (pour la Terre, c'est respectivement 6380 et 6370). Ehildereth est donc plus grosse, mais pas de beaucoup (de 1,12). Sa masse est donc de 6.73x1024 kg (1,12 fois de celle de Terre donc). Le sérieux aplatissement rend particulièrement évidente la différence d'attraction gravitationnelle entre l'équateur et le pôle : elle est 1,3 fois plus élevée au pôle (1,006 pour Terre, ça se sent pas). Quand l'Empire lancera des fusées, il aura vraiment intérêt à le faire de l'équateur (surtout que l'orbite Ehilostationnaire est hyper basse par rapport à l'orbite géostationnaire terrestre, c'est super pratique pour les satellites télécom impériaux).

Pour la Lune. Il a été joué que la révolution lunaire durait 28 jours, afin de la caller sur notre calendrier lunaire IRL. Par jour, j'entends "durée de 24h", et pas "rotation d'Ehildereth" pour laquelle j'emploie le mot "journée". Sachant la masse d'Ehil et la période de révolution de sa Lune, Kepler me dit que la Lune orbite à 399 millions de km du centre d'Ehildereth (contre 383 environ pour Terre).

Connaissant la distance de la Lune au centre d'Ehildereth, et décrétant que la Lune peut éclipser totalement de Soleil de temps en temps (j'ignore si des éclipses totales ont été jouées sur Falt, mais rien ne s'y oppose a priori), je me retrouve avec une contrainte sur le diamètre angulaire de la Lune, et donc son diamètre réel, et donc sa masse (hypothèse standard sur sa densité). La masse de la Lune d'Ehildereth est de 8,94x10^22 kg.

Deux corps massifs dont on connaît les masses ainsi que la distance les séparant. Le centre de gravité du système est facile à localiser (barycentre coefficienté des masses) : il se trouve sur la droite Ehildereth-Lune, à exactement 5230 km du centre d'Ehildereth en direction de la Lune (presque à la surface de la planète en fait). Donc Akhoran, tu as le centre de révolution du système que tu cherchais.

...
----------

Suivent des considérations sur les forces de marée qui ralentissent la planète, l'âge de la planète, le degré de coplanarité des orbites... cf le lien. Mais j'ai pas terminé mes calculs. Je pourrais le faire, ça pourrait être marrant.
Ah ouais, mais si la masse du système lune-planète est différente dans Faltazia, ça veut dire que son inertie aussi, et donc sa trajectoire orbitale sera différente, ce qui devrais donc changer les dates des saisons.

D'autre part, avec une telle différence de gravité entre l'équateur et les pôles, je suppose que les habitants des régions des pôles doivent avoir une morphologie très différente des autres, et de grosses difficultés à agir normalement à l'équateur (et inversement). Et même peut-être tout simplement à respirer, vu que la gravité influe également sur la composition de l'atmosphère, notamment la concentration en oxygène.

Enfin, les courants marins doivent aussi avoir une ampleur très importante comparée à la réalité, de par cette différence de gravité. Qui dit courants marins dit variations de température, phénomènes météorologiques macroscopiques (tempêtes etc.), et tout le tremblement.

Enfin bon après tout c'est qu'un jeu
Pour les saisons, ya que la masse du Soleil et la distance Terre-Soleil qui compte (et l'inclinaison de la Terre). Pas la masse de la Lune ni celle de la Terre.

Et vi, t'as raison pour ce qui est de la vie au pôle ou à l'équateur, ou les courants, ou le champ magnétique (la boussole existe ?), ou tout un tas de trucs auxquels j'ai pensé et qu'on n'a pas mentionnés, plus le reste... Je voulais faire ces calculs pour enrichir le background. Parce que justement, c'est un jeu, et qu'il faut tout inventer. Si des équations peuvent inventer des trucs cohérents à ma place, pourquoi pas essayer ? Rien à perdre, tfaçon, sinon quelques heures. Je sais que j'arriverais jamais à un résultat 100 % crédible. Mais ça ne m'empêche pas de viser quelques pour-cents quand même, parce que ça fait se poser plein de questions et ça donne plein d'idées originales. Et j'aime bien les mondes qui donnent une sensation de cohérence.

Mais vous pouvez utiliser cette lib qui donne la date IRL sans vous lancer dans la mécanique céleste, hein !
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés