C# UnixTime Dofus 2.34

Inscrit
6 Avril 2016
Messages
85
Reactions
40
#1
Bonjour/Bonsoir, je travaille actuellement un projet d'émulateur (toujours Symbioz) que je reprend de 0 vus que certaine partie de la 2.30 ont été bâclés (notamment les combats, console unique etc..)

Je rencontre un problème:

J'ai remarqué qu'en 2.34 pour des raisons d'optimisation d'affichage compréhensibles Ankama a modifier le fonctionnement de l'AgeBonus des monstres (Partie Roleplay). Il faut a présent spécifier la date de création du groupe de monstre ainsi que la rate d'AgeBonus. (avant, il y avait uniquement un AgeBonus a spécifier (de 0 a 1000) , maintenant c'est une rate.

Mon problème est le suivant: je n'arrive pas a spécifier la date de création du groupe au client correctement...

Voici le message a envoyer (GameRolePlayGroupMonsterInformations.as)

Code:
  public static const protocolId:uint = 160;
 
      public var staticInfos:com.ankamagames.dofus.network.types.game.context.roleplay.GroupMonsterStaticInformations;

      public var creationTime:Number = 0;

      public var ageBonusRate:uint = 0;

      public var lootShare:int = 0;

      public var alignmentSide:int = 0;

      public var keyRingBonus:Boolean = false;

      public var hasHardcoreDrop:Boolean = false;

      public var hasAVARewardToken:Boolean = false;

La variable 'creationDate' est un numéro donc j'ai supposé qu'il s'agissait de l'implémentation C# de GetTime(); en Java (code qui fonctionne pour le timeStamp a specifier pour le chat)

Code:
 public static int GetUnixTimeFromDate(DateTime date)
        {
            return (int)(date - new DateTime(1970, 1, 1, 0, 0, 0).ToLocalTime()).TotalSeconds;
        }
Mais ici, ça ne fonctionne pas client reçoit une mauvaise date et considère que le groupe de monstre possède 5 étoiles ^^'.. et même après avoir regardé le code source client, je n'arrive pas a cerner le problème.

(Ma rate AgeBonus = 1)


Si quelqu'un a une idée, je suis preneur ^^
 
Inscrit
24 Juin 2015
Messages
53
Reactions
0
#2
Official age bonus 180000

The unixtime is totalmiliseconds like send ankama

I don't understand all French to help you sorry
 
Inscrit
18 Février 2015
Messages
228
Reactions
7
#3
Comme a essayé de te l'expliquer Genesis le UnixTime que tu veux envoyer est en milliseconde et non pas en secondes comme tu l'as ici
Code (Text): public static int GetUnixTimeFromDate(DateTime date)
{
return (int)(date - new DateTime(1970, 1, 1, 0, 0, 0).ToLocalTime()).TotalSeconds;
}
car en fait ton creation date est un double ou long et non pas un int ^^

Essaye avec ça
Code:
public static long GetUnixTimeFromDate(DateTime date)
        {
            return (long)(date - new DateTime(1970, 1, 1, 0, 0, 0,0).ToLocalTime()).TotalMilliseconds;
        }
Bonne chance pour Symbioz :D
 
Inscrit
6 Avril 2016
Messages
85
Reactions
40
#4
Comme a essayé de te l'expliquer Genesis le UnixTime que tu veux envoyer est en milliseconde et non pas en secondes comme tu l'as ici

car en fait ton creation date est un double ou long et non pas un int ^^

Essaye avec ça
Code:
public static long GetUnixTimeFromDate(DateTime date)
        {
            return (long)(date - new DateTime(1970, 1, 1, 0, 0, 0,0).ToLocalTime()).TotalMilliseconds;
        }
Bonne chance pour Symbioz :D
le création date correspond a double, et non ça ne fonctionne pas :/
 
Inscrit
6 Avril 2016
Messages
85
Reactions
40
#5
Official age bonus 180000

The unixtime is totalmiliseconds like send ankama

I don't understand all French to help you sorry
It doesn't work :/



I got this evrytime a send the message
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#6
C#:
public static class DateExtensions
  {
  public static double DateTimeToUnixTimestamp(this DateTime dateTime)
  {
  return (dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalMilliseconds;
  }

  public static int DateTimeToUnixTimestampSeconds(this DateTime dateTime)
  {
  return (int)(dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds;
  }

  public static DateTime UnixTimestampToDateTime(this double unixTimeStamp)
  {
  var dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
  dtDateTime = dtDateTime.AddMilliseconds(unixTimeStamp).ToLocalTime();
  return dtDateTime;
  }

  public static DateTime UnixTimestampToDateTime(this int unixTimeStamp)
  {
  var dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
  dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).ToLocalTime();
  return dtDateTime;
  }
  }
Faudrait revoir tes conversions, il suffisait de changer le type en double dans la fonction.

C#:
  public static double DateTimeToUnixTimestamp(this DateTime dateTime)
  {
  return (dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalMilliseconds;
  }
Si cela ne fonctionne pas, le problème est ailleurs.
 
Inscrit
6 Avril 2016
Messages
85
Reactions
40
#7
C#:
public static class DateExtensions
  {
  public static double DateTimeToUnixTimestamp(this DateTime dateTime)
  {
  return (dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalMilliseconds;
  }

  public static int DateTimeToUnixTimestampSeconds(this DateTime dateTime)
  {
  return (int)(dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds;
  }

  public static DateTime UnixTimestampToDateTime(this double unixTimeStamp)
  {
  var dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
  dtDateTime = dtDateTime.AddMilliseconds(unixTimeStamp).ToLocalTime();
  return dtDateTime;
  }

  public static DateTime UnixTimestampToDateTime(this int unixTimeStamp)
  {
  var dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
  dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).ToLocalTime();
  return dtDateTime;
  }
  }
Faudrait revoir tes conversions, il suffisait de changer le type en double dans la fonction.

C#:
  public static double DateTimeToUnixTimestamp(this DateTime dateTime)
  {
  return (dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalMilliseconds;
  }
Si cela ne fonctionne pas, le problème est ailleurs.
Merci, je vais essayer de chercher un peu plus loin et de comprendre un peu a quoi correspond ce ratio 'AgeBonus' merci !
 
Dernière édition par un modérateur:
Inscrit
24 Juin 2015
Messages
53
Reactions
0
#8
C#:
var elapsedTime:Number = ((this.timeApi.getTimestamp() - this.timeApi.getTimezoneOffset()) - data.creationTime);
            var ageBonus:int = Math.min(200, (((data.ageBonusRate == 0)) ? 0 : (elapsedTime / data.ageBonusRate)));


ageBonusStars = ageBonus;
                if (ageBonusStars > 100)
                {
                    color = 2;
                    ageBonusStars = (ageBonusStars - 100);
                } else
                {
                    color = 1;
                };
                numStars = Math.round((ageBonusStars / 20));
                i = 0;
                while (i < numStars)
                {
                    this[((("star" + color) + "") + i)].visible = true;
                    i++;
                };
                while (i < 5)
                {
                    this[((("star" + (color - 1)) + "") + i)].visible = true;
                    i++;
                };

var groupData:MonstersGroupData = this.getMonstersGroupData(data.staticInfos, playerData, formulaGroupMembers, ageBonus);
etc...

Good luck.
 
Dernière édition par un modérateur:
Haut Bas