Jump to content
×
×
  • Create New...

SumBox


Recommended Posts

  • Retraité

Centre de Téléchargement

Télécharger ( Interne )

 

SumBox

 

 

I/ Informations

SumBox est une sandbox* Dofus 1.29 codée en C++ à l'aide de la librairie Qt.

Elle est développée par Sgt Fatality et Nicky31, mais est totalement open source. Ainsi, n'importe qui peut apporter son aide en critiquant le code, nous fournissant des correctifs, débugs ...

Nous ne manquerons pas de les remercier.

 

* Sorte de base d'émulateur

 

 

 

II/ Statistiques

- Ohloh -

 

 

 

III/ Avancement

 

  • 1 - Serveur de connexion
    • Fait :
Citation
  • Connexion avec gestion des ips bannies, compte bannis, déjà connectés.
  • Envois des infos du compte dont le temps d'abonnement
  • Envoi de la liste des personnages
  • Fonction recherche d'amie fonctionelle
  • File d'attente gérée
  • Envoi des serveurs de jeux disponibles

 

  1.  
  • A Faire :
Citation

--

 

 

  • 2 - Serveur de jeux
    • Fait :
Citation
  • File d'attente gérée
  • Envoi liste des personnages
  • Création de personnages
    • Avec génération de pseudo aléatoires

    [*] Suppression de personnages

 

 

 

IV/ Sources

- Dépôt Git -

  • J'adore 5
  • Grrr... 1
Link to comment
  • Funkiest

n'importe qui peut apporter son aide en critiquant le code

 

Ton code il est pourri!!!! WAAAIIIIIII !!!!

 

Bref, après cet instant délire, j'vous souhaite bonne chance à tous deux pour ce projet :)

Link to comment
  • 3 weeks later...
  • Retraité

Salut,

 

L'équivalent de libevent est déjà intégré dans la librairie Qt avec les signals et les slots et pareil pour asio (réseau). Qu'entends-tu par un système modulaire ? Étant donné qu'on développe une sandbox et qu'il y a juste le minimum je ne vois pas trop comment rendre plus modulable. Je veux bien des exemples.

 

Sgt Fatality

Link to comment
  • Retraité

Quelques petites remarques pendant les 5 minutes qui m'ont permis de regarder le code.

 

Pourquoi ne pas utiliser un Switch plutôt que la tonne de 'IF' pour le parsage des packets ?

Pourquoi ne pas parser les erreurs ou les packets "non-originaux" ? Je m'explique, si quelqu'un utilise WPE par exemple

et change le packet AX1 en AXA, vous aurez une jolie erreur et fera crash votre serveur...

Link to comment
  • Retraité

Hello,

 

Alors un switch est plus lent que if...else, par contre plus lisible, c'est bien possible qu'on l'utilise pour la partie auth. Ou alors qu'on fasse le même système "d'handling" que pour le world. Il n'y a pas non plus une "tonne" de if.

 

Concernant la vérification sur les paquets on n'y avait pas pensé, il faut qu'on réfléchisse comment implémenter ça.

 

Merci pour les commentaires,

Sgt

  • J'adore 1
Link to comment
  • Retraité

Alors un switch est plus lent que if...else, par contre plus lisible, c'est bien possible qu'on l'utilise pour la partie auth. Ou alors qu'on fasse le même système "d'handling" que pour le world. Il n'y a pas non plus une "tonne" de if.

 

Concernant la vérification sur les paquets on n'y avait pas pensé, il faut qu'on réfléchisse comment implémenter ça.

 

Ce que j'entends par une tonne de 'IF', c'est le fait d'utiliser 3 if différent pour les packets "Af", "Ax" et "AX". Dans ce cas un elseif ? Mais c'est vrai que pour un serveur d'authentification, un switch est plus adapté, il n'a pas 36XXX packets à parser comme le serveur de jeu :)

 

Sinon pour la vérification, c'est ce qui a porté défaut à de nombreux serveurs sous Ancestra ou Vemu pendant certain moment, les failles de duplication, les erreurs fatales du serveur, cela vient de là généralement, l'oublie de vérification d'une variable ;)

Link to comment
  • Retraité

Un switch c'est bien plus rapide qu'un if/else, mais de toutes façons pas possible de switch sur une chaîne de caractère en C++

 

De plus Shaak, il n'y aura absolument aucun problème si quelqu'un envoie "AXA", étant donné que QString::toUint renvoie 0 en cas d'erreur...

 

Autant pour moi, ne faisant pas de C++, je ne savais pas.

C'était simplement de petites remarques pour aider les développeurs si jamais le cas était vrai.

 

Mais sinon, il n'est pas possible de faire un Switch par 'char' ?

Il est toujours possible sur le serveur d'authentification de faire un switch des packets après le parsage du compte. (Af, Ax, AX), seule la deuxième lettre change, donc si ça marche, pourquoi pas.

Link to comment
  • Retraité

Dans tous les cas t'as forcément un gain à utiliser switch, parce qu'au pire le code généré est identique et au mieux t'as une optimisation de la part du compilo.

Et si c'est possible d'utiliser des switch sur des char mais bon quel intérêt pour 3 packets

 

C'est toujours plus beau de voir, et peut être plus performant pour le compilo (excusez pour l'exemple mais je le fais en C#, je pense que vous comprendrez):

switch(packet[1])
{
  case 'f':
     break;   
  case 'x':
     break;  
  case 'X':
     break;
}

 

Que

 

if(packet[1] == 'f');
else if(packet[1] == 'x');
else if(packet[1] == 'X');

 

Question d'organisation dans le code ?

 

Même pour 3 packets, c'est important pour la vue de l'intérieur, pour les personnes qui vont s'intéressés au code (même si moi je m'en fou), ça donne toujours bonne image. De plus, même personnellement, on est plus à l'aise en voyant son code "propre" plutôt que se dire que certains endroits sont dégueulasses.

Link to comment

Contrairement à vous, je préfere utiliser if/elseif

 

Avec switch, on peut faire ceci :

int i = 1;
       switch (i) {
           case 0:
               int j = 0;
               break;
           case 1:
               j = 1;
           case 2:
               j = 2;
               break;
       }

Ce code fonctionne...

Il faudrait donc écrire le switch de cette façon :

int i = 1;
       switch (i) {
           case 0: {
               int j = 0;
           } break;
           case 1: {
               int j = 1;
           } break;
           case 2: {
               int j = 2;
           } break;
       }

Mais personnellement, le break; après } me dérange un peu...

Pour case x:, ça me dérange moins mais ça me fait penser au label... :

label: for (int i = 0; i < 5; i++) {
           continue label;
       }

 

Alors qu'avec if/elseif :

int i = 1;
       if (i == 0) {
           int j = 0;
       } else if (i == 1) {
           j = 1;
       }

Ce code ne compilera pas (heuresement) et je vois pas en quoi le code est moins lisible ou mal organisé...

 

switch sur 0 et 1 : 8 lignes (+ une ligne pour int i = 0:)

if sur 0 et 1 : 5 lignes (+ une ligne pour int i = 0;)

Link to comment
  • 4 months later...
  • Retraité

Je me permet d'up le sujet pour vous dire qu'après une longue période d'inactivité le développement de SumBox redémarre peu à peu !

Ce qui a été fait :

  • Réécriture et centralisation de la réception des packets dans une classe SocketReader
  • Fixage de la récupération du temps d'abonnement
  • Envoi de la liste des personnages auth et world
  • Fonction recherche d'ami sur l'auth
  • Création de personnage avec génération de pseudo aléatoire
  • Suppression de personnage

Link to comment
  • 4 weeks later...
  • Retraité

Hello,

 

Bon on en pas mal avancé sur Sumbox. On peut maintenant se connecter dans le jeu mais on ne voit pas encore son personnage ^^.

La base du système de scripting (C++ et Lua) a été implémenté. Le système de commande via la console également.

 

Entre temps il y a eu une ré-organisation complète du projet et nous allons spécifier des règles pour la syntaxe du code.

 

Cordialement,

Sgt

  • J'adore 1
Link to comment
  • 2 weeks later...
  • Retraité

Bonsoir à tous,

 

Pour les personnes intéressées par SumBox ou globalement par l'émulation Dofus je vais donner un petit "cours" ce dimanche à 18h00

 

Les sujets abordés seront entre autre :

- Fonctionnement client serveur

- Les paquets, opcodes

- Hiérarchie du client, comment trouver les structures des paquets

- Fonctionnement de SumBox et de la gestion des paquets

- Comment ajouter la gestion de nouveaux paquets (on regardera comment implémenter la base du chat)

 

Je pense que le cours sera donné sur Skype (pour l'audio) et je partagerai mon écran en livestream. Je vous redirais, merci de me contacter par MP en me donnant pseudo Skype pour que je puisse vous ajouter.

 

Bonne soirée,

Sgt Fatality

Link to comment
  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.