15 août 2016, 14:15

Aimez vous les bug qui échappe à toute logique ? Alors vous allez être servie…

Tous d’abord, voici 3 log assez technique :
:::

[Server]-SERVER –---------------------------
[Server]-Attaquant : Jodge
[Server]-Cible : Sheep
[Server]-Matrix Base  : @2068792666-4:dirt(true):0.0;@1725563821-0:normal(true):1.0;@806098347-2:water(true):0.0;@182613973-3:wind(true):0.0;@1048539719-7:holy(true):0.0;@190522099-5:wood(true):0.0;@171950935-6:thunder(true):0.0;@135678031-1:fire(true):0.0;@1304356597-8:dark(true):0.0;@1492947136-10:hunger(true):0.0;@807828763-9:poison(true):0.0;
[Server]-Matrix ATK   : @2068792666-4:dirt(true):0.75;@1725563821-0:normal(true):0.75;@806098347-2:water(true):0.75;@182613973-3:wind(true):0.75;@1048539719-7:holy(true):0.75;@190522099-5:wood(true):0.75;@171950935-6:thunder(true):0.75;@135678031-1:fire(true):0.75;@1304356597-8:dark(true):0.75;@1492947136-10:hunger(true):0.75;@807828763-9:poison(true):0.75;
[Server]-Matrix DEF   : @2068792666-4:dirt(true):1.0;@1725563821-0:normal(true):1.0;@806098347-2:water(true):1.0;@182613973-3:wind(true):1.0;@1048539719-7:holy(true):1.0;@190522099-5:wood(true):1.0;@171950935-6:thunder(true):1.0;@135678031-1:fire(true):1.25;@1304356597-8:dark(true):1.0;@1492947136-10:hunger(true):1.0;@807828763-9:poison(true):1.0;
[Server]-Matrix ENVIR : @2068792666-4:dirt(true):1.1;@1725563821-0:normal(true):1.0;@806098347-2:water(true):1.05;@182613973-3:wind(true):1.0;@1048539719-7:holy(true):1.0;@190522099-5:wood(true):1.0;@171950935-6:thunder(true):0.9;@135678031-1:fire(true):0.85;@1304356597-8:dark(true):1.0;@1492947136-10:hunger(true):1.0;@807828763-9:poison(true):1.0;
[Server]-Matrix FINAL : @2068792666-4:dirt(true):0.0;@1725563821-0:normal(true):0.0;@806098347-2:water(true):0.0;@182613973-3:wind(true):0.0;@1048539719-7:holy(true):0.0;@190522099-5:wood(true):0.0;@171950935-6:thunder(true):0.0;@135678031-1:fire(true):0.0;@1304356597-8:dark(true):0.0;@1492947136-10:hunger(true):0.0;@807828763-9:poison(true):0.0;

:::
:::


[Client]-CLIENT –---------------------------
[Client]-Attaquant : Jodge
[Client]-Cible : Sheep
[Client]-Matrix Base  : @1855569945-7:holy(true):0.0;@1798354448-1:fire(true):0.0;@1035781935-4:dirt(true):0.0;@642410431-10:hunger(true):0.0;@1267281520-8:dark(true):0.0;@1104430157-2:water(true):0.0;@410136936-5:wood(true):0.0;@1126963446-6:thunder(true):0.0;@800782929-3:wind(true):0.0;@979993925-0:normal(true):1.0;@858264357-9:poison(true):0.0;
[Client]-Matrix ATK   : @1855569945-7:holy(true):0.75;@1798354448-1:fire(true):0.75;@1035781935-4:dirt(true):0.75;@642410431-10:hunger(true):0.75;@1267281520-8:dark(true):0.75;@1104430157-2:water(true):0.75;@410136936-5:wood(true):0.75;@1126963446-6:thunder(true):0.75;@800782929-3:wind(true):0.75;@979993925-0:normal(true):0.75;@858264357-9:poison(true):0.75;
[Client]-Matrix DEF   : @1855569945-7:holy(true):1.0;@1798354448-1:fire(true):1.25;@1035781935-4:dirt(true):1.0;@642410431-10:hunger(true):1.0;@1267281520-8:dark(true):1.0;@1104430157-2:water(true):1.0;@410136936-5:wood(true):1.0;@1126963446-6:thunder(true):1.0;@800782929-3:wind(true):1.0;@979993925-0:normal(true):1.0;@858264357-9:poison(true):1.0;
[Client]-Matrix ENVIR : @1855569945-7:holy(true):1.0;@1798354448-1:fire(true):0.85;@1035781935-4:dirt(true):1.1;@642410431-10:hunger(true):1.0;@1267281520-8:dark(true):1.0;@1104430157-2:water(true):1.05;@410136936-5:wood(true):1.0;@1126963446-6:thunder(true):0.9;@800782929-3:wind(true):1.0;@979993925-0:normal(true):1.0;@858264357-9:poison(true):1.0;
[Client]-Matrix FINAL : @1855569945-7:holy(true):0.0;@1798354448-1:fire(true):0.0;@1035781935-4:dirt(true):0.0;@642410431-10:hunger(true):0.0;@1267281520-8:dark(true):0.0;@1104430157-2:water(true):0.0;@410136936-5:wood(true):0.0;@1126963446-6:thunder(true):0.0;@800782929-3:wind(true):0.0;@979993925-0:normal(true):0.0;@858264357-9:poison(true):0.0;

:::
:::

[Client]-CLIENT –---------------------------
[Client]-Attaquant : Jodge
[Client]-Cible : Zombie
[Client]-Matrix Base  : @1162041089-7:holy(true):0.0;@485449132-4:dirt(true):0.0;@1686964043-8:dark(true):0.0;@1820287527-10:hunger(true):0.0;@1129848193-9:poison(true):0.0;@1623399209-0:normal(true):1.0;@941492597-5:wood(true):0.0;@992591748-1:fire(true):0.0;@1593455079-6:thunder(true):0.0;@1388429868-2:water(true):0.0;@618824303-3:wind(true):0.0;
[Client]-Matrix ATK   : @1162041089-7:holy(true):0.75;@485449132-4:dirt(true):0.75;@1686964043-8:dark(true):0.75;@1820287527-10:hunger(true):0.75;@1129848193-9:poison(true):0.75;@1623399209-0:normal(true):0.75;@941492597-5:wood(true):0.75;@992591748-1:fire(true):0.75;@1593455079-6:thunder(true):0.75;@1388429868-2:water(true):0.75;@618824303-3:wind(true):0.75;
[Client]-Matrix DEF   : @1162041089-7:holy(true):1.5;@485449132-4:dirt(true):1.0;@1686964043-8:dark(true):-1.0;@1820287527-10:hunger(true):0.0;@1129848193-9:poison(true):1.0;@1623399209-0:normal(true):1.0;@941492597-5:wood(true):1.0;@992591748-1:fire(true):1.0;@1593455079-6:thunder(true):1.0;@1388429868-2:water(true):1.0;@618824303-3:wind(true):1.0;
[Client]-Matrix ENVIR : @1162041089-7:holy(true):1.0;@485449132-4:dirt(true):1.1;@1686964043-8:dark(true):1.0;@1820287527-10:hunger(true):1.0;@1129848193-9:poison(true):1.0;@1623399209-0:normal(true):1.0;@941492597-5:wood(true):1.0;@992591748-1:fire(true):1.0;@1593455079-6:thunder(true):0.9;@1388429868-2:water(true):1.0;@618824303-3:wind(true):1.0;
[Client]-Matrix FINAL : @1162041089-7:holy(true):0.0;@485449132-4:dirt(true):0.0;@1686964043-8:dark(true):0.0;@1820287527-10:hunger(true):0.0;@1129848193-9:poison(true):0.0;@1623399209-0:normal(true):0.0;@941492597-5:wood(true):0.0;@992591748-1:fire(true):0.0;@1593455079-6:thunder(true):0.0;@1388429868-2:water(true):0.0;@618824303-3:wind(true):0.0;
[Server]-[WARNING] Element :@1623399209-0:normal(true) is not references in Matrix : {@1160004388-6:thunder(true)=1.0, @1759224715-2:water(true)=1.0, @809742897-8:dark(true)=-1.0, @1448204932-4:dirt(true)=1.0, @2088980217-0:normal(true)=1.0, @391874529-10:hunger(true)=0.0, @429965707-7:holy(true)=1.5, @804290859-1:fire(true)=1.0, @1133088354-3:wind(true)=1.0, @502874085-5:wood(true)=1.0, @1111359664-9:poison(true)=1.0}
[Server]-TEST : def = 0… @1623399209-0:normal(true)
[Server]-SERVER –---------------------------
[Server]-Attaquant : Jodge
[Server]-Cible : Zombie
[Server]-Matrix Base  : @1162041089-7:holy(true):0.0;@485449132-4:dirt(true):0.0;@1686964043-8:dark(true):0.0;@1820287527-10:hunger(true):0.0;@1129848193-9:poison(true):0.0;@1623399209-0:normal(true):1.0;@941492597-5:wood(true):0.0;@992591748-1:fire(true):0.0;@1593455079-6:thunder(true):0.0;@1388429868-2:water(true):0.0;@618824303-3:wind(true):0.0;
[Server]-Matrix ATK   : @1162041089-7:holy(true):0.75;@485449132-4:dirt(true):0.75;@1686964043-8:dark(true):0.75;@1820287527-10:hunger(true):0.75;@1129848193-9:poison(true):0.75;@1623399209-0:normal(true):0.75;@941492597-5:wood(true):0.75;@992591748-1:fire(true):0.75;@1593455079-6:thunder(true):0.75;@1388429868-2:water(true):0.75;@618824303-3:wind(true):0.75;
[Server]-Matrix DEF   : @1160004388-6:thunder(true):1.0;@1759224715-2:water(true):1.0;@809742897-8:dark(true):-1.0;@1448204932-4:dirt(true):1.0;@2088980217-0:normal(true):1.0;@391874529-10:hunger(true):0.0;@429965707-7:holy(true):1.5;@804290859-1:fire(true):1.0;@1133088354-3:wind(true):1.0;@502874085-5:wood(true):1.0;@1111359664-9:poison(true):1.0;
[Server]-Matrix ENVIR : @1162041089-7:holy(true):1.0;@485449132-4:dirt(true):1.1;@1686964043-8:dark(true):1.0;@1820287527-10:hunger(true):1.0;@1129848193-9:poison(true):1.0;@1623399209-0:normal(true):1.0;@941492597-5:wood(true):1.0;@992591748-1:fire(true):1.0;@1593455079-6:thunder(true):0.9;@1388429868-2:water(true):1.0;@618824303-3:wind(true):1.0;
[Server]-Matrix FINAL : @1162041089-7:holy(true):0.0;@485449132-4:dirt(true):0.0;@1686964043-8:dark(true):0.0;@1820287527-10:hunger(true):0.0;@1129848193-9:poison(true):0.0;@1623399209-0:normal(true):0.0;@941492597-5:wood(true):0.0;@992591748-1:fire(true):0.0;@1593455079-6:thunder(true):0.0;@1388429868-2:water(true):0.0;@618824303-3:wind(true):0.0;

:::

chaque élément est représenté de la façon suivante : @pointeurMémoire-id:nom(estActif).

Maintenant passons à la description du fonctionnement :

Chaque Elément est supposé être unique. On utilise les fonction addOrGet(String name) et findById(int id) pour obtenir nos instance.

On initialise les éléments coté serveur grâce à VanillaInitialization
qui est appeler sur CommonElementalConstante sur la fonction onServerStart(MinecraftServer server)

Coté client, on les initialises sur DataEvent dans la fonction onClientConnectToServer(ServerConnectionFromClientEvent event).

Quelque soit la méthode utilisé, un élément est ajouté dans une variable LIST_OF_ELEMENT qui est de type map, ce qui n’autorise qu’une seul instance par clé (la clé étant le nom)

Ceci initialise donc nos éléments. La liste des éléments est ensuite appeler dans plusieurs fonction. Celle qui nous intéresse est celle de la fonction completeArray(float defaultValue) dans ElementalMatrix. Cette dernier remplis un autre map qui assosie Element (clé) et Float (valeur). Elle assure que nos matrice soit correctement remplis avec tout les éléments existant. Elle est systématiquement appeler à la création d’une matrice.

Sur les log précédent, en serveur intégrer, pour une raison échappant à toute logique, la matrice de défense n’utilise pas la même liste que celle en attaque.

Tournons nous donc vers la méthode de création :
MonsterStats et PlayerStats sont assez similaire.
Le premier constructeur (coté client) n’initialise rien (le second coté serveur initialise notre objet via la classe AbstractStats en lisant le fichier json)
joueurs et entité sont séparer a cause d’un problème que j’avais récemment abordé sur la non synchronisation des id d’entité player, néanmoins le fonctionnement reste strictement similaire.

La class MonsterStatsPacket est reçu coté client et permet d’initialisé le monstre. Une liste MONSTER_STATS, disponible sur Variable, puis initialisé sur CommonElementalConstante permet d’obtenir la liste de toute les class à implémenter au monstre. On créer donc une nouvelle instance grâce à clazz.newInstance();, puis on utilise la fonction fromByte(buf); disponible dans chaque objet.

Dans le cas d’un monstre, on implémente deux matrice (AttackMatrix et DefenceMatrix) qui sont très similaire.
La fonction fromByte de toute à l’heure est disponible sur la classe mère ElementalMatrix.

La fonction est donc strictement similaire entre les deux objet.
Revenons à la fonction. Elle utilise la fonction Element.findById(key). key étant un entier reçu. Revenons donc à notre class Element. La fonction vas regardé si il existe une correspondance sur la variable REF_INT_STRING. cette dernier est initialisé au même moment que notre liste d’élément. elle permet en faite d’associer l’id et le string en dehors des objets pour une recherche simplifié (et accéléré).

Voila le fonctionnement.

Pour finir, parlons du problème :

Sur serveur intégré uniquement, la matrice de défense uniquement (et toujours elles), est initialisé grâce a des instances d’éléments fantôme… Ces éléments ne sont pas référencé, il n’existe pas (ou ne sont pas accessible), mais pourtant… Il sont la…
C’est assez gênant…

Oui, je pourrait bêtement corrigé le problème en remplaçant la clé Element par String dans mes matrice mais cela me gène : j’ai des variables fantôme qui sont créer sans raison apparente… De plus, rien ne me prouve que ces éléments soit correctement initialisé (l’affichage ne montre que la base)…