VB/VB.Net Destruction d'un personnage

Inscrit
10 Mai 2015
Messages
357
Reactions
55
#1
Bonjour,

mon problème est simple j'aimerais pouvoir supprimer un personnage sur DofusTouch, pour cela j'ai été voir dans les sources du jeu (Dofus au lieu de DofusTouch) pour voir comment construire le packet donc la variable id correspond à celui du personnage pas de soucis par contre la 2e variable du packet est secretAnswerHash qui correspond à un Hash Md5 de l'id du personnage suivis du symbole ~ et de la réponse secrète qui dans mon cas n'existe pas donc je dois juste faire un hash d'un string sauf que celui que j'obtient est différent de celui que le client DofusTouch envoie et j'avais déjà remarqué ça avec Dofus2 si quelqu'un peux m'éclairer ce serait gentil.


JavaScript:
 case msg is CharacterDeletionAction:
               cda = msg as CharacterDeletionAction;
               this._waitingForListRefreshAfterDeletion = true;
               cdrmsg = new CharacterDeletionRequestMessage();
               cdrmsg.initCharacterDeletionRequestMessage(cda.id,MD5.hash(cda.id + "~" + cda.answer));
               ConnectionsHandler.getConnection().send(cdrmsg);
 
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#2
Non c'est pas un problème de majuscule
 
Inscrit
13 Avril 2016
Messages
72
Reactions
0
#4
Tu reçois bien la propriété "answer" dans le message CharacterDeletionAction ?
Possible de nous envoyer un échantillon d'un CharacterDeletionAction et d'un CharacterDeletionRequestMessage stp ?
 
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#5
Quand je sniff sur Dofustouch je supprime un personnage du compte et je vois un CharacterRequestMessage du client j'essaie de reproduire le même avec mon bot sauf que j'arrive pas a la même réponse que le client pour un même personnage supprimé donc j'ai été voir le code de Dofus PC et le characterdeletionaction montre comment le Packet est générer mais j'ai l'impression que le md5 n'est pas le même que celui de Dofus/dofustouch
 
Inscrit
13 Avril 2016
Messages
72
Reactions
0
#6
Bah y a les sources de DofusTouch, tu peux jeter un oeil non ?

Je viens de trouver ça sur une source vieille de 2017:
JavaScript:
function onDelete() {
        var secretQuestion = gui.playerData.identification.secretQuestion;
        var level = self.selectedCharacter.level;
        var id = self.selectedCharacter.id;
        var name = self.selectedCharacter.name;

        // CONFIRM_DELETION_LVL = 20
        if (level >= CONFIRM_DELETION_LVL && secretQuestion) {
            // open DeleteCharacterConfirmWindow
            windowsManager.open('deleteCharacterConfirm', {
                id:             id,
                name:           name,
                secretQuestion: secretQuestion
            });
        } else {
            // deletion confirm popup

            gui.openConfirmPopup({
                title:   getText('ui.popup.warning'),
                message: getText('ui.popup.warnBeforeDelete', name),
                cb:      function (agreed) {
                    if (agreed) {
                        var secretAnswer = md5(id + '~000000000000000000');
                        window.dofus.sendMessage('CharacterDeletionRequestMessage', {
                            characterId:      id,
                            secretAnswerHash: secretAnswer
                        });
                    }
                }
            });
        }
}
JavaScript:
function DeleteCharacterConfirmWindow() {
    Window.call(this, {
        className:     'DeleteCharacterConfirmWindow',
        title:         getText('ui.popup.delete'),
        positionInfo:  {
            left:   'c',
            top:    'c',
            width:  windowSize.w,
            height: windowSize.h
        },
        noCloseButton: true
    });

    var MAX_CHARS = 50;

    var self = this;
    var content = this.windowBody;
    var secretAnswer = '';
    var inputBox;
    var secretQuestionDiv;
    var id;
    var name;

    this.once('open', function () {
        content.createChild('div', {
            text:      getText('ui.charSel.secretQuestion'),
            className: 'explications'
        });

        var attemptDelete = function () {
            window.gui.openConfirmPopup({
                title: getText('ui.popup.warning'),
                message: getText('ui.popup.warnBeforeDelete', name),
                cb: function (agreed) {
                    if (agreed) {
                        window.dofus.sendMessage('CharacterDeletionRequestMessage', {
                            characterId: id,
                            secretAnswerHash: md5(id + '~' + secretAnswer)
                        });
                    }
                    windowsManager.close(self.id);
                }
            });
        };

        secretQuestionDiv = content.createChild('div', { className: 'secretQuestionDiv' });

        inputBox = content.appendChild(new InputBox({
            attr: {
                maxlength: MAX_CHARS,
                value:     ''
            },
            onEnter: function () {
                inputBox.blur();
                attemptDelete();
            }
        }));
        inputBox.addClassNames('inputSecretAnswer');
        inputBox.on('change', function (val) {
            secretAnswer = val;
        });

        var buttonContainer = content.createChild('div', { className: 'buttonContainer' });
        var buttonOk = buttonContainer.appendChild(new Button(getText('ui.common.ok')));
        buttonOk.on('tap', attemptDelete);

        var buttonCancel = buttonContainer.appendChild(new Button(getText('ui.common.cancel')));
        buttonCancel.on('tap', function () {
            windowsManager.close(self.id);
        });

        this.keyboardHeight = dimensions.screenHeight * 0.6;
    });

    this.on('open', function (params) {
        keyboard.disableScroll(true);
        params = params || {};
        id = params.id;
        name = params.name;

        if (!params.secretQuestion) {
            console.error('DeleteCharacterConfirmWindow: missing secretQuestion for characterId', id);
        }
        secretQuestionDiv.setText(params.secretQuestion);
    });

    this.on('opened', function () {
        inputBox.focus();
    });

    this.on('close', function () {
        inputBox.setValue('');
        secretAnswer = '';
        inputBox.blur();
        keyboard.disableScroll(false);
    });

    keyboard.on('show', function (keyboardHeight) {
        self.setPosition(keyboardHeight);
    });
}

inherits(DeleteCharacterConfirmWindow, Window);
module.exports = DeleteCharacterConfirmWindow;

DeleteCharacterConfirmWindow.prototype.setPosition = function (keyboardHeight) {
    var freeVerticalSpace = dimensions.screenHeight - keyboardHeight;
    var positionInfo = {
        left:   'c',
        top:    (freeVerticalSpace - windowSize.h) / 2,
        width:  windowSize.w,
        height: windowSize.h
    };
    windowsManager.positionWindow(this.id, positionInfo);
};
 
Dernière édition:
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#7
Merci beaucoup problème résolus.
 
Haut Bas