Changelog
Versions 0.0.16 à 0.0.23
Heureusement que j'ai écourté beaucoup de phrases et ai même supprimé quelques lignes, c'est long tout ça.
En passant, l'emu prend toujours 2~3Mb.
0.0.16 [26 Décembre]
- FIXME faut corriger la gérance des statistiques à la création et chargement
- Remodelé le GHandler.createPerso et deletePerso
- Ajouté method GPerso.createNew
- Ajouté method GStats.createNew
- Ajouté method GStats.terminate
- Ajouté method sqlPerso.deleteCharac
- Modif method sqlPerso.createCharac (mit des setByte pour les PA/PM)
- Ajouté method sqlPerso.saveCharac
- Modifié le Perso.terminate, ajouté la save+termination de charac
- Déplacé le call à sqlPerso.createCharac pour mettre dans GHandler.createPerso à coté du SqlPerso.create()
- Corrigé finalement les stats grâce à des casts.
- Mit l'energy/statspoints/spellpoints dans la map<> stats (dans GStatistiques) au lieu d'un short à part
- Corrigé l'affichage de l'XP dans packet As
- ... ca va assez bien, cest mieux qu'avant en tout cas :)
0.0.17 [27 Décembre 12]
- Mit les Queue en objet à chaque GServer
- Modifié la ScheduleTask pour enlever un compte d'une Queue (Ajouté le parametre obj[1] GServer)
- Modifié tous les rapports à Queue.updateQueueAccounts
- Modifié LWorld.isAccountInQueue pour vérifier dans toutes les queues objets
- Corrigé bug chat, c'tais à cause du message de bienvenue dans le config qui était mal écrit, il manquait un ' dedans.
- Ajouté les Orientations dans une nouvelle enum
0.0.18 [30 Décembre 12]
- Ajouté le parsing des changements d'orientations au complet.
- Ajouté que si le perso est assit et qu'ildemande une orientation non-diagonale (c'qui ferait bug l'affichage), on renvoie l'orientation suivant la demandée (orientation + 1. Ex: demande NORTH, renvoie NORTH_EAST)
- Bougé la constante channels dans CPerso au lieu de Constants
- Ajouté une byte[] pour contenir les ID d'emotes apprises par le perso
- TODO : mettre une colonne emotes dans table perso pour les save
- Ajouté method addEmote et removeEmote dans perso
- Ajouté addByteToArray et removeByteFromArray dans Utils
- Ajouté addElementToArray et removeElementFromArray dans Utils
- Ajouté que si on est assit et qu'on fait l'emote asseoir, le perso se leve debout
- Ajouté une verif de si le destinataire est en combat quand on envoie le packet eD (changeDirection) aux persos de la map.
- Changé les types des valeurs des EmoteEnums de int à byte.
- Ajouté packet BD
- Corrigé un throwException dans les Exceptions. le NumberFormat lancait un NullPointer, erreur de c/c.
- TODO finir les effets des emotes (gagner vie en mangeant pain, faire bouger une drago, etc)
0.0.19 [31 Décembre 12]
- Corrigé/finit systeme de régénération automatique + en étant assi/couché avec pascket As etc.
Le packet As prend 0ms à faire et envoyer au complet
Donc fini la classe LifeRegenerator et le bout dans Factory.UtilityThread.REGENERATE_LIFE
- Mit les pdvMax correctement au chargement des stats dans SqlPerso.loadStats et dans Stats.createNew();
C'est pour avoir la bonne vie de base en fonction du level (+5pdv par niveau)
- Ajouté commande SETPDV dans GM4 dans le consolePlugin.
- Changé la grosseur de base du StringBuilder du packet As de 500 à 400
- Ajouté une petite sous-classe Perfs dans les Utils pour tester le temps d'exécution sde certaines méthodes/actions.
- Modifié le temps entre chaque tick du timer de regen. 1000 au lieu de 2000ms
0.0.20 [1 Janvier 13]
- Commencé à faire les packets de Queue comme il faut
- Ajouté packet Aq
- Vérifié les ref au packet SM.Account.Af
- Ajouté un objet Queue dans le LoginServer [Aussitot enlevé]
- Enlevé les anciens envois d'Af et rajouté:
Une dans LServerSelectionHandler quand on recoit AX
Une dans GHandler quand on recoit Af
- Bon sinon les packets de queue (Af) sont les bons et fonctionnent bien.
Y'a juste les int numberOfPremium dans le LServer qui sont à surveiller
Ex. si qqn se connecte, ca augmente le chiffre et ce dernier redescend lors de l'arrivée au choix de serveur, mais il se peut qu'il ne soit pas
décrémenté si on se déconnecte au bon moment.
- Ajouté packets BAT0, BAT1 et BAT2 dans SM.Basics (BAT_NEUTRAL,FAIL,SUCCESS)
- Faudra changer les SM.Messages.MC pour ces packets là et bien utiliser les fails/success/info
- Remit la grosseur de base du StringBuilder du packet As de 400 à 500
0.0.21 [2 Janvier 13]
- Corrigé le bug des pdv qui arrivait en déconnectant/reconnectant (Les pdv étaient settés au pdvMax)
- Testé la vitesse de String.format VS new StrinbBuilder.append();
Le StringBuilder est presque 20 fois plus vite..(Sur mon vieux portable)
Ajouté la methode pour ce test dans Misc.Tests
- Ajouté addIntToArray/removeIntFromArray adns Utils
- Ajouté methodes add/remove Friend/Ennemy/Ignored dans LAccount
- Minibug: si tu set le lvl à (ex) 47 quand tu étais lvl 1, en te connectant, l'xp reste à 0 mais sur 4 400 000..
ça sera juste simplement à gérer dans une commande SETLVL ou whatever genre perso.incrementXP
- Ajouté classe Formulas
- Ajouté method calculateInitiative dans Formulas (Manque juste d'additionner le bonus d'alignement la dedans)
+ ajouté constante CPerso.gainedInitByIntelAndAgiPoints
- FIXME Ajouté methode calculatePods dans Formulas [TODO: manque calcul avec les métiers]
+ Ajouté constante CPerso.startPods
- Ajouté methode calculateProspection dans Formulas
+ ajouté constante CPerso.gainedProspecByChancePoints
- Modifié le packet SM.Account.As: ajouté la valeur du calcul de l'initiative et de la prospec.
- Modifié la methode GStats.getPacket, enlevé le getValue(INIT, BASE) et prospec au début de la méthode
vu qu'ils sont maintenant dans le SM.Account.As
- Ajouté le boost de characteristiques dans GGameHandler.parseAccounts (RECV Packet AB)
+ Ajouté constante CPerso.characPointsByBoost
L'initiative est bien calculée et affichée chaque fois qu'on boost une charac
Le nombre max de pods aussi en boostant la force
Et la prospec aussi en boostant la chance.
- Créé class SM.Objects
- Ajouté methode Ow dans SM.Objects pour afficher les usedPods sur les maxPods quand on ouvre l'inventaire.
- Renommé LItemTemplate en ItemTemplate
- Ajouté une ArrayList d'itemTemplates dans le GWorld
- Ajouté méthodes getItemTemplate et addItemTemplate dans GWorld
- Créé class GlobalWorld dans GlobalObjects
- Ajouté methode getItemTemplate dans GlobalWorld
- Changé l'int templateID dans GItem pour un ItemTemplate "template"
- Renommé toutes les methodes référant à l'ancien templateID en getTemplate, etc
- Ajouté methode getPods dans GItem (qui va chercher sa valeur dans template.getPods)
- Ajouté methode getPods setPods dans ItemTemplate
- Ajouté variable pods dans l'array "params" dans ItemTemplate
- Ajouté methode getUsedPods dans GInventory pour savoir le poids total utilisé par tous les items de l'inventaire
- Dans la methode SM.Objects.Ow: mit le packet "Ow"+inventory.getUsedPods+'|'+Formulas.calculatePods
- TODO: Faire la table ItemTemplates dans les bdd login ET worlds
(la même structure) (+Mettre tous les items officiels dans celle du login)
À faire en fonction de la methode SQL.Items.loadTemplate que j'ai déjà commencée
- TODO: Finir méthode GInventory.getBonusPods pour avoir le total de bonus de pods sur les items équipés
pour calculer le nombre de pods max du perso.
- TODO: Finir la méthode Formulas.calculteMaxPods utilisant le inventory.getBonusPods (Manque ca et les bonus par les métiers)
- TODO: Finir l'enum des Effects
- Ajouté methode getMap dans GlobalWorld pour pogner une map dans gworld, Gbdd, LWorld ou Lbdd
- Changé la methode perso.getMap pour mettre GlobalWorld.getMap dedans
- Ajouté ref à SM.Objects.Ow dans perso.onSelected et dans le boost de charac dans GGameHandler.parseAccounts (RECV Packet "AB")
Ca fonctionne bien: l'affichage est parfait et quand on boost la force, le maxPods monte.
- TODO: Faire la vérification d'avoir le bon nombre de capital pour booster une charac et retirer ce nombre apres l'avoir booster
0.0.22 [4 Janvier 13]
- Ajouté GMCommand GETCOMMANDS
- Changé tous les SM.Messages.MC dans le ConsoleListener pour des SM.Basics.BAT_XXX
- Ajouté les constantes minimumIDinWorldItemTemplateTable et pour les maps dans CServers.
Les deux à 15000 et modifié GlobalWorld.getXXX()
Il ne sera donc plus possible d'overrider un objet du login dans un world, seulement de l'utiliser ou d'en créer des nouveaux.
- Fini les constantes d'index pour les parametres dans les arrays de GPersonnage
- Installé ces constantes dans GPersonnages à chaque fois qu'on utilisait un call aux arrays[]
- Ajouté des constantes pour des Im messages dans Constants
- Mit le mapID de GPersonnage et ICharacter en int plutôt qu'en short
mais à vrai dire, il faudrait le mettre en short
et interdire aux créateurs d'utiliser des ID > 32000 et < 15000
Pareillement pour les ItemTemplate ID
- Ajouté method parseObjects dans GGameHandler
- Commencé la table ItemTemplate
- Testé Syn sur le dédié: apparemment les GameServers et peut-être meme le Login se OFF pas quand on éteind l'emu
C'est alors que j'ai remarqué que le Syn.closeAll du shutDownHook n'était pas faire donc :
Commencé le Syn.closeAll et le LServer.off();. xd
0.0.23 [5 Janvier 12]
- Étant donné Que le Syn.closeAll et LServer.off n'était pas faits, j'ai du faire beaucoup de travail par rapport à ca :
- Ajouté le .off() dans LServer
- Ajouté saveAll dans LWorld
- Ajouté .save dans SQL.Accounts
- Modifié .load dans SQL.Accounts
- Delete l'array de banques dans LAccount
- Mis une string contenant les serverID des banques du perso dans LAccount (à la place de l'array)
- Changé LBank pour GBank
- Enlevé la table banks de la bdd du login
- Mis la table banks dans les bdd des worlds
- Modifié la table banks: changé colonne id pour accountID, ajouté kamas et ajouté items.
- Mit la table banks nécéssaire aux worlds dans SQL.BDDWorldTemplate et enlevé de SQL.BDDLoginTemplate
- Delete la variable ID dans GBank
- Corrigé methodes GBank.delete et .terminate
- Complété methodes addItem, removeItem, getItems, getItemById, emptyItems, deleteItem dans GBank
- Ajouté variable long kamas dans GBank
- Ajouté methode setKamas et getKamas dans GBank
- Ajouté method getItemsString dans GBank
- Créé une HashMap de dans GWorld
- Ajouté method getBanks, setBanks, getBank(accountID), addBank(accountID,bank), removeBank(accountID)
- Ajouté static String load/create/save/deleteBankQuery dans SQL.Banks
- Ajouté methode create, saveBank, delete et load dans SQL.Banks
- Ajouté la création de banque quand un compte se créé un new perso dans un nouveau world
- Ajouté le delete de banque quand le compte delete son dernier perso dans un world
- Ajouté le chargement de la banque du world du compte à la sélection du personnage
- Ajouté la termination de la banque quand le perso se déconnecte.
- Ajouté la sauvegarde de la banque quand le perso déconnecte.
- Ajouté la sauvegarde des items de la banque quand il se déco.
- Ajouté la sauvegarde du compte quand il se déconnecte.
- Créé interface IStorage.
- Ajouté method getItems(), getItemByID(id), removeItem(item), addItem(item) dans IStorage
- Implémenté IStorage dans GInventory et GBank
- J'ai pas testé, mais les banques devraient maintenant super bien marcher (on s'entend, sans la fonction de parler au pnj et de mettre/enlever des items/kamas, c'est juste la structure qui marche. Après, quand faudra mettre ces fonctions, ça sera hyper facile puisque tout est déjà en place)
- TODO: Finir LWorld.saveAll et .terminate la meme manière que dans GWorld.
Versions 0.0.12 à 0.0.15
0.0.12 [18Dec12]
- Avancé le chat, ça marche bien.
- Ajout de listes des persos ayant floodé dans les canaux commerce/recrutement/global...
- Ajout d'une schedule pour enlever les persos floodeurs des listes apres 1 seconde pour general et 1 minute pour commerce/recrutement..
Ainsi le perso peut pas envoyer de message (ex) en commerce à l'intérieur d'une minute d'intervalle
- Ajouté un utilityTh pour régénérer la vie des persos en permanence (+packet ILF,ILS)
- Ajouté des enums pour les actions de Syn(Comme pour les UtilityThread/Scheduling...)
- Ajouté enum "ChannelEnum" pour les channel. Modifié le ChatParser pour y correspondre.
- Ajouté enum "EmoteEnum" pour les emoticons comme /sit, /rest, /pipo, etc
- Ajouté enum "SmileyEnum" pour les smileys comme :) ou :( ou :'( ou XD
- Ajouté la classe SM.emotes
- Corrigé le packet SM.emotes.eU
- Commencé à ajouter les emotes dans le GGHandler
- Le bug du canal information en chat persiste...bizarre...
- Rename l'interface DofusMap -> IMap
- Ajouté interface ICharacteristics dans src.Interfaces. C'est un début xd,
faut trouver une manière implémenter ca pour les perso/mob/item/pnj...
0.0.13 [19Dec12]
- Ajouté le fonctionnement des smileys
- Ajouté une vérification que le message recu par les L/GHandler est bien une string.
- Modifié les buffers de flooders dans le ChatParser: mit en objet
- Modifié la method modifyFloodLists pour prendre compte du GWorld et accéder aux buffers
Ajouté un objet ChatParser dans GWorld
- Créé un TitleManager qui contient tous les id de perso ayant un titre et l'id du titre
Ajouté un objet TitleManager dans GWorld
- Fait le GameParser.onGameInfos();
- Ajouté classes: GPrism, GMonster, GTaxCollector, GNpc
- Créé interface Character implémentée par GPerso, GNpc, GMonster, GPrism, GDragodinde, GTaxCollector,
- Ajouté getSize, getGMpacket, etc dans l'interface Character
- New Enum CharacterType
- Implémenté la method getGMPacket() dans les GPerso
- Ajouté method SM.Game.GM_ADD_ALL et GM_ADD
- Modifié l'arraylist de perso pour une al de characters dans Map
- Modifié ++ classes qui utilisaient le map.getPersos pour mettre map.getCharacters
- Corrigé des références dans ConsolePlug à SchedulingBufferA qui est renommé CommonAction
- Ajouté champs config pour le niveau de l'aura 100 et 200 et le niveau max.
- Corrigé l'activation/désactivation du canal bleu qui controle les channels TEAM, PARTY et PRIVATE
- Ajouté Interface ICharacteristics.
- Ajouté Class GStatistiques, BaseStatistiques, FightStatistiques, EquipmentStatistiques, GiftStatistiques
- Commencé les statistiques/charactéristiques/effets + packet As
- New Enums: Characteristic/EffectType
- Ajouté method dans GWorld: getFight et getFightByCharacter
- Ajouté var ID dans GFight et method isCharacterInFight et ArrayLists fightersBlue/Red
0.0.14 [20Dec12]
- Ajouté une table sql pour les titres (Qui viennent du lang)
- Ajouté un int[] dans TitleManager pour stocker les titres chargés
- Ajout d'une classe sql.Others pour tout & n'importe quoi.
- Ajout du chargement des titres à la création du monde
- Delete la class sql.Xp, mit le loading des paliers d'xp dans la classe sql.Others
- Delete les actions de Queue qui étaient en static final int, utilisation des CommonAction à la place
- Modifié l'ArrayList characters dans Map pour quelle soit nulle chaque fois que la map est vide.
- Delete method getFightCount dans Map
- Enlevé la save sql des channels chq fois qu'ils étaient updatés
- Ajouté un sql.perso.save(this) dans gperso.terminate
- Fait de la recherche sur les caches, intéréssant..surement bon pour stocker des maps offi, item, montres souvent utilisés
- Finalement trouvé et fait la meilleure manière de coder le stockage des charactéristiques selon moi et delete c'que j'avais fait avant.
- Changé les GConfig.startMaps de int en short et ajouter un peu de sécurité vis-à-vis des mauvaises configurations
- Recommencé le packet SM.Account.As
0.0.15 [21Dec12]
- Refait l'enum CharacteristicType + mit tous leurs VRAI ID (pas les ID des effets)
- Finit le packet As
- TODO: mettre les capital/spellpoint et cie dans l'hashmap au lieu de tous seuls, ils ont bien des ID dans CharacteristicType donc..
- Commencé la vrai enum des Effets.
- Ajouté une table pour les charactéristiques de base, à voir pour la performance s'il faut vraiment que j'la merge dans la table de persos, c'est quand même environ une douzaine de colonnes..
- Ajout de la création de nouvelles statistiques à la création du perso.
- Ajout de la création des statistiques dans la bdd
- Ajout du chargement des statistiques de la bdd
- Commencé les alignements, j'ferai peut-être un objet GAlignment....pour garder les ordres/niveau/grade/quetes/pouvoirs....
Version 0.0.11
0.0.11 [17Dec12]
- Ajouté des nouveaux loggers dans les classes qui en avaient besoin et qui utilisaient (en attente d'en avoir un propre à eux) le Syn.log (Main).
- Ajouté une classe Exceptions pour handler/thrower les exceptions dont j'pourrais avoir besoin.
- Ajout d'un writer pour logger les exceptions lancées par l'handler.
- Dans le package SQL: Enlevé les "extends SQL" pour mettre des import static SQL.SQL.xxx; à la place. J'connaissais pas ça avant o.o
- Pareil dans le SM: remplacé les "extends Sender" par : import static SM.Sender.send;
- Beaucoup avancé le Scheduling et SchedulingBuffer (J'utilise pas les ScheduledTask de Java de base, j'code mon nouveau système au complet moi-même): utilisation de mes UtilityThread pour ticker les buffers. Restart du UT chaque fois (par exemple) qu'on ajoute un compte à la Queue (C'est des threads pausable/réactivables, rien n'est détruit/recréé ici). Pause du UT à chaque fois qu'on le tick (pcq la list de task est clearée à la fin du tick donc rien à faire). Réactivation du bigTimer dans Syn, des UtilityThread et des Pools. Ajout du type SCHEDULED_BUFFER dans UT.
- Queue fonctionnelle avec les nouvelles ScheduledTask: Le compte s'enlève de la queue apres 1 seconde s'il n'est toujours pas retiré.
- Scheduling fonctionnel. Exemple avec commande SCHEDULEDPACKET [message]: Va envoyer un le message en packet à la personne une seconde après la commande. Tous les objets utilisés se terminent/finalize bien. J'utiliserai ce système pour calculer les actions de l'IA et envoyer les packets nécéssaires au bon moment sans utiliser de threads.
- Ajouté le champs SPECIFY_PARAMETER dans l'i18n pour, exemple, des commandes nécéssitant un parametre supplémentaire.
0.0.10
0.0.10 [16Dec12]
- Ajout d'une enum Lang + class LangConfig + i18n.xml = Un petit i18n qui marche en fonction du language de la communauté du monde du serveur. Ex: OtoMustam = anglais. Jiva = francais.
- Ajout du chargement de l'i18n au chargement de l'emu.
- Modifié l'enum GMCommand: Ajouté une valeur GMlvl
- Modifié le ConsoleListener, ajouté la détection et l'envoi d'un message si la commande n'existe pas ou que le GMlvl est trop bas (lvl vérifié grâce à la modif dans l'enum GMCommand)
- Ajout des premiers usages de l'i18n dans la plugin de commandes console.
- Corrigé le bug de nullPointer avec les GInventory.
- Vérification sur YourKit Java Profiler: Les nouveaux objets GInventory et GItem s'en vont bien lorsqu'on se déconnecte.
- Prochains codes que je ferai ça sera pour le scheduling de packets et d'actions, ça va être cool ça aussi ;)
Oh et j'ai fait un peu de recherche sur les languages de scripting, j'me suis intéréssé à Python et Lua, à voir :) Sinon j'en ferai un nouveau moi-même ^^ En fait à part l'IA, je n'ai pas d'idée d'application, mais Syn est un grand terrain de jeu pour moi ou je peux tout tester et j'en profite donc je ferai du scripting même si je n'en ai pas besoin et le désactiverai au pire :3
0.0.9
0.0.9 [13Dec12]
- Continué les items
- Continué les inventaires
- Ajouté des methodes dans GWorld pour get/remove des items et inventory
- Ajouté la sauvegarde de perso et la colonne "items" dans leur table.
- Ajouté un "new GInventory(...)" dans la création de perso
- Ajouté un constructeur GInventory(startItems[][]) qui se remplit automatiquement avec les startItems, créé ces items, les met dans le world, et s'ajoute lui-meme au world.
- Ajouté champs startItems dans G/SConfig avec possibilité de mettre une quantité à chaque item.
- Ajouté méthode de finalization (terminate) dans GInventory et ajouté un call à celle-ci dans GPerso.terminate()
- Ajouté int lastItemID dans GWorld + methode getNextItemID
- Mit les methodes de getNextPerso/ItemID en synchronized pour éviter d'avoir deux persos/items avec le meme ID
- Modifié Items.loadInventoryComplete pour que si world.getInventory est null, on créé un nouveau inventory vide pret à recevoir les GItems du perso.
- Ajouté method getItemsString dans GInventory
- Finit methode GPerso.parseItemToASK et réorganisé SM.Account.ASK
- Finit methode GPerso.parseAccessories
- Modifié le Gclient.kick pour terminer tous les personnages du compte du lieu de juste le current
- Ajouté toutes les maps d'ancestra dans la table de map de la bdd login (Y'a aussi une table map dans chaque bdd de world pour ajouter vos propres maps et même overwriter les maps officielles)
- Ajouté des newPerso.setMap/Cell/Kamas dans la création de perso
- Ajouté SQL.Items.loadLastItemID() dans le construct GWorld
- Ajouté SQL.Items.create() quand on créé les items dans le construct GInventory à la création du perso
- FIXME: Y'a encore un probleme sur les GInventory, en se connectant
et ensuite changer de perso/serveur. En déconnectant le GClient,
la method perso.terminate a toujours un nullpointer sur l'inventaire comme s'il n'avait jamais été ajouté au GWorld ...
0.0.8
0.0.8 [12Dec12]
- Recommencé le système de queue, c'est encore à voir sérieux, j'ai pas passé assez de temps là-dessus ^^
- Créé une nouvelle classe ScheduledTasks, j'ai déjà une petite idée de comment faire ça, mais je sais qu'il me faut quelque chose dans le genre pour, par exemple, vider la queue des comptes qui ne se sont finalement jamais connectés; envoyer les packets pour l'affichage des déplacements/lancement des sorts en combat au bon moment, etc.
- Commencé un systeme de proxy pour permettre de faire des reboots sans perdre les connexions. J'suis pas encore sér pour ce projet...j'ai de doutes quant aux performances. Googleismyfriend
- Un peu leech sur le serveur officiel espanol de fait pour vérifier que tout soit parfait jusqu'à maintenant ^^
- Créé classe GameParser et bougé les methodes onGameCreate et on GameInfo dedans. Faudra faire un plugin pour ca pour pouvoir faire plus de modification au niveau des parsers de packet et tout sans reboot.
- Corrigé le packet AxK pour afficher la liste des serveurs
- Ajouté variable lastConnexionDate dans LAccount + fait les modifications nécéssaire dans onSelected
- Continué le perso.onSelected, ajouté pas mal de packets là dedans et dans le SM (ZS, fC, Im...)
- TODO: Corriger packets AXK/AYK, l'offi utilise l'AXK
- TODO: Continuer la method perso.parseItemsToASK [FINIT]
- Continuer les items et les GInventory
- Continuer le Items.loadInventoryXXX [FINIT]
Versions 0.0.1 à 0.0.7
Bon, j'suis pas très bon en ce qui concerne la tenue d'un changelog surtout lorsque les avancées sont si nombreuses et se font à une telle vitesse, mais bon :
0.0.1 [Septembre]
- Lecture des configs avec StAX terminée. (Elles sont : config, lconfig, gconfig, worldsstatics, PluginConfig (ThxMathias). J'ferai des screenshots un jour)
- Commandes console DOS
- Constants, CWorlds, CServers, CPersos, ...
- Connexion 100%.
- JDBC marche. (Surtout c/c d'ancestra, pour en attendant de voir ce que je peux vraiment faire de bon, j'voulais pas arreter le développement juste pour ça car même si je change le code, les methods resteront à peu près les mêmes et presque rien ne devrait avoir à changer)
- Modification de plusieurs packets dans SM.Accounts. (En passant SM vient de "SocketManager" ca fait très longtemps que j'appelle ce package ainsi et je m'y suis attaché même si le nom original est inexact)
- LServer 100%.
- Gestion des multiples GServers 100%.
- Multi-serveurs disponible.
- Note: hibernate = merde pour un petit emu dofus. déjà mieux jdbc.
- Insertion d'une map avec Colt dans le LWord pour stock les LAccounts {Note: colt = merde aussi, trop vieux :P}
- Générateur de nom aléatoire fonctionnel.
- Création de personnage fonctionnelle.
- Ajout des cadeaux; manque l'intégration des items.
- Delete de GPersoCreation et GPersoSelection Handlers, merged dans GHandler qui se charge de tout ce qui est avant le IG.
- Delete des utilisations de screenIDs, inutile et créé des bugs.
- Ajout de "maxCoPerServer" dans GConfig.
- Début du combo Pools-Timer-Factory dans le package Threads. {Sera à refaire, je l'ai commencé sur Syn et mis au point sur Zen, mais pas mis à jour ici}
0.0.2 [6 Décembre 12] ( Reprise de l'émulateur ! :) )
- Ajouté les methodes SQL.Gift.delete et SQL.Account.updateGift
- Ajouté le coté sql des friends/ennemies/ignored
- Ajouté des variables dans le LItemTemplate
- Commencé la fonction GPersonnage.onSelected.
- Mit les GConfigs en objets au lieu de static, une par GServer (À part pour quelques variables comme )
- Commencé tous les parsers comme on les connait sur Ancestra (GGameHandler). Ai seulement troqué les switch pour un getDeclaredMethode(bla).invoke(ble)
- Commené la structure pour les maps ("Cartes", on s'entend ._.)
- Commencé les plugins de chat et console. (Commandes)
- Ajouté les classes Infos, chat, Messages, Basics, Game dans le SM
- Commandes console et joueurs fonctionnelles. (en plugins)
- Ajouté la possibilité de enlever/ajouter une GConfig+GServer
- Commencé à mettre en place la termination/finalization des objets GServer, GWorld, CWorld, GConfig quand on off un gServ
- Commencé à mettre en place ce qui spasse quand on off un GServeur
- Refonte du systeme de GConfig en cours pour des off/on, ajout/delete plus fluides, simple et tout, là c'était compliqué..
- Mise en place de JDOM à la place de StAX pour les GConfigs {Beaucoup plus polyvalent, direct et maniable}
0.0.3 [7Dec12]
- Mise en commentaire de ce qui avait rapport aux SiteClient et affaires du genre...tellement plein de marde ces affaires là
J'veux développer un émulateur, pas des noobs
Donc je leur mettrai un formulaire de config à remplir lors de leur achat et mettrai en place à la main, c'est plus simple.
Ensuite ils pourront encore modifier les champs config soit par commande pour le xml soit en utilisant "load sqlgconfig" pour le sql.
Et au pire j'recommencerai ce systeme plus tard.
- Dans LWorld.isAccountConnected(): ajouté un autre for pour vérifier aussi dans les comptes qui sont en attentes de connexion (la queue)
- Delete la GConfig de stax / renommé gconfigJDOM en GConfig pour prendre la place de l'ancienne classe.
0.0.4 [8Dec12]
- Ajouté un systeme pour créer des bdd/tables automatiquement si elles sont manquantes (dans SQL.startUp) .
- Réorganisé les dossiers Syn -> Syn_config, Syn_data, Syn_lib, Syn_plugins (Respectivement les configs xml, les templates de tables sql, les libs et les plugins).
- Commencé les paliers d'xp (Une table experience dans chaque bdd de serveur pour leur permettre d'en avoir des différents).
- Commencé la config par bdd (SConfig dans package SQL).
- Les cleanup de L/GClient, LAccount/Gperso quand on déco sont bon -> tout est bien nullisé et supprimé de la ram.
- Ajouté packet de chat pour avoir les canals ouverts à la derniere connexion (pour dans perso.onSelected).
- Ajouté un if(map!=null) dans le packet GDM, faudra ajouté du logging là-dessus.
- Ajouté des constantes dans CPerso.
- Ajouté la classe CJobs mais sera peut-être à delete, à voir avec l'API qui conviendra le mieux pour plus de customization.
- Corrigé un bug au choix du serveur quand l'ID a plusieurs digits (>9, comme 22 pour héroique) change charAt->substring.
0.0.5[9Dec12]
- Continué la methode pour load les configs bdd.
- Refait la structure de la table de config.
- Dans l'initGPerso dans la création de perso, corrigé pour mettre le bon startLvl en fonction de la classeID (Différents lvls possibles pour chaque classe).
- FIXME dans création de perso: si on start à un certain niveau, mettre la bonne xp au départ {FAIT}.
0.0.6[10Dec12]
- Ajouté champs maxPersoPerAccount dans gconfig global (static).
- Ajouté le loading des configs bdd tout de suite après SQL.setUpConnexion.
- Corrigé un bug dans la table config -> ajouté la valeur ' ' au champs ValueBool pour pouvoir mettre des valeurs null.
- Ajouté une vérification de la validité des couleurs dans le packet AA de création de perso.
- Ajouté un GWorld.addPerso(p) dans Perso.onSelected.
- Ajouté un GWorld.removePerso(LAccount.curPerso) dans GClient.kick.
- Commencé une methode perso.terminate pour enlever toute les références à ses variables et les setter à null.
- Création ET Supprimation de perso completement parfaits sur tous les serveurs.
- Ajouté les RATES dans la config bdd + la variable les contenant dans GConfig.
0.0.7 [11Dec12]
- Ajouté commandes GETMEM, GC, RELOADPLUG, dans la ConsolePlugin.
- Modifié la classe Plugin dans la PluginLib: Ajouté methode abstraites "registerEvents" et "unRegisterEvents".
- Ajouté le chargement des paliers d'xp.
- Ajouté newPerso.setChannels et setXP dans la création de perso.
- Passé le projet en UTF-8 et recopié toutes les classes pour ravoir mes accents ><.
- Ajouté un package AS dans Externals pour de la doc sur le client (Loader+core+lang, etc)
-----------
Encore désolé de la pauvre qualité de mon changelog, je tâcherai de faire des screens et peut-être partager quelque lignes de code du même coup pour vous montrer que si je ne m'applique pas ici, c'est parce que je met tout mon temps sur la programmation au lieu de la rédaction.
askdulnc
sdgf
Objets: 1 - 8 Sur 8