Jump to content
Sign in to follow this  
loustique

A deux doigts de résoudre le bug du chat qui remonte sous Dofus 1.29 via le loader.swf

Recommended Posts

Hey hey hey tous le monde, cela va faire quelques jours que je me penche sur le sujet du bug canal qui remonte ainsi que sur le problème du mode plein écran désactivé sur mac.

  • Alors premièrement pour jouer sur Mac en plein écran il suffit simplement d'installer le Flash Player Debugger et de lancer via le dossier dofus le fichier Loader.swf. (solution trouvée suite a diverses recherches, les tests sont concluants, un simple cmd+F suffit a passer le jeux en plein écran !)
  • Deuxièmement il va vous faloir un logiciel Decompiler de fichier swf afin de réécrire une partie du code qui nous intéresse.

Mais voilà que tout ce complique je bloque je tape et retape des codes pour a chaque fois arrivé sur des phasestest qui finissent en échec.

Voici donc le code d'origine que je possède :

Spoiler
class ank.gapi.controls.ChatArea extends ank.gapi.core.UIBasicComponent
{
   var _bSelectable = false;
   var _bWordWrap = true;
   var _sScrollBarSide = "right";
   var _nScrollBarMargin = 0;
   var _bHideScrollBar = false;
   var _bUseMouseWheel = true;
   var _bInvalidateMaxScrollStop = false;
   var _nPreviousMaxscroll = 1;
   static var CLASS_NAME = "ChatArea";
   static var STOP_SCROLL_LENGTH = 6;
   function ChatArea()
   {
      super();
   }
   function __set__selectable(bSelectable)
   {
      this._bSelectable = bSelectable;
      if(this._bInitialized)
      {
         this.addToQueue({object:this,method:this.setTextFieldProperties});
      }
      return this.__get__selectable();
   }
   function __get__selectable()
   {
      return this._bSelectable;
   }
   function __set__wordWrap(bWordWrap)
   {
      this._bWordWrap = bWordWrap;
      if(this._bInitialized)
      {
         this.addToQueue({object:this,method:this.setTextFieldProperties});
      }
      return this.__get__wordWrap();
   }
   function __get__wordWrap()
   {
      return this._bWordWrap;
   }
   function __set__text(sText)
   {
      this._sText = sText;
      if(this.initialized)
      {
         this.setTextFieldProperties();
      }
      return this.__get__text();
   }
   function __get__text()
   {
      return this._tText.text;
   }
   function __get__htmlText()
   {
      return this._tText.htmlText;
   }
   function __set__scrollBarSide(sScrollBarSide)
   {
      this._sScrollBarSide = sScrollBarSide;
      return this.__get__scrollBarSide();
   }
   function __get__scrollBarSide()
   {
      return this._sScrollBarSide;
   }
   function __set__scrollBarMargin(nScrollBarMargin)
   {
      this._nScrollBarMargin = nScrollBarMargin;
      return this.__get__scrollBarMargin();
   }
   function __get__scrollBarMargin()
   {
      return this._nScrollBarMargin;
   }
   function __set__hideScrollBar(bHideScrollBar)
   {
      this._bHideScrollBar = bHideScrollBar;
      return this.__get__hideScrollBar();
   }
   function __get__hideScrollBar()
   {
      return this._bHideScrollBar;
   }
   function __set__useMouseWheel(bUseMouseWheel)
   {
      this._bUseMouseWheel = bUseMouseWheel;
      return this.__get__useMouseWheel();
   }
   function __get__useMouseWheel()
   {
      return this._bUseMouseWheel;
   }
   function init()
   {
      super.init(false,ank.gapi.controls.ChatArea.CLASS_NAME);
      this._tfFormatter = new TextFormat();
   }
   function createChildren()
   {
      this.createTextField("_tText",10,0,0,this.__width - 2,this.__height - 2);
      this._tText._x = 1;
      this._tText._y = 1;
      this._tText.addListener(this);
      this._tText.onSetFocus = function()
      {
         this._parent.onSetFocus();
      };
      this._tText.onKillFocus = function()
      {
         this._parent.onKillFocus();
      };
      this._tText.mouseWheelEnabled = true;
      this.addToQueue({object:this,method:this.setTextFieldProperties});
      ank.utils.MouseEvents.addListener(this);
   }
   function size()
   {
      super.size();
      this.arrange();
   }
   function arrange()
   {
      this._tText._height = this.__height;
      this._tText._width = this.__width;
      this._bInvalidateMaxScrollStop = true;
      this.setTextFieldProperties();
   }
   function draw()
   {
      var _loc2_ = this.getStyle();
      this._tfFormatter = new TextFormat();
      this._tfFormatter.font = _loc2_.font;
      this._tfFormatter.align = _loc2_.align;
      this._tfFormatter.size = _loc2_.size;
      this._tfFormatter.color = _loc2_.color;
      this._tfFormatter.bold = _loc2_.bold;
      this._tfFormatter.italic = _loc2_.italic;
      this._tText.embedFonts = _loc2_.embedfonts;
      this._tText.antiAliasType = _loc2_.antialiastype;
      this._sbVertical.styleName = _loc2_.scrollbarstyle;
      if(_loc2_.filters != undefined)
      {
         this._tText.filters = _loc2_.filters;
      }
   }
   function setTextFieldProperties()
   {
      if(this._tText != undefined)
      {
         this._tText.wordWrap = !this._bWordWrap?false:true;
         this._tText.multiline = true;
         this._tText.selectable = this._bSelectable;
         this._tText.embedFonts = this.getStyle().embedfonts;
         this._tText.type = "dynamic";
         this._tText.html = true;
         if(this._tfFormatter.font != undefined)
         {
            if(this._sText != undefined)
            {
               this._nPreviousMaxscroll = this._tText.maxscroll;
               this.setTextWithBottomStart();
            }
            this._tText.setNewTextFormat(this._tfFormatter);
            this._tText.setTextFormat(this._tfFormatter);
         }
         this.onChanged();
      }
   }
   function addScrollBar()
   {
      if(this._sbVertical == undefined)
      {
         this.attachMovie("ScrollBar","_sbVertical",20,{styleName:this.getStyle().scrollbarstyle,_visible:!this._bHideScrollBar});
         this._sbVertical.addEventListener("scroll",this);
      }
      this._sbVertical.setSize(this.__height - 2);
      this._sbVertical._y = 1;
      this._sbVertical._x = this._sScrollBarSide != "right"?0:this.__width - this._sbVertical._width - 3;
      if(this._bHideScrollBar)
      {
         this._tText._width = this.__width;
         this._tText._x = 0;
      }
      else
      {
         this._tText._width = this.__width - this._sbVertical._width - 3 - this._nScrollBarMargin;
         this._tText._x = this._sScrollBarSide != "right"?this._sbVertical._width + this._nScrollBarMargin:0;
      }
      this.setScrollBarPosition();
      if(Math.abs(this._nPreviousMaxscroll - this._tText.scroll) < ank.gapi.controls.ChatArea.STOP_SCROLL_LENGTH || this._bInvalidateMaxScrollStop)
      {
         this._tText.scroll = this._tText.maxscroll;
      }
      this._bInvalidateMaxScrollStop = false;
   }
   function setScrollBarPosition()
   {
      var _loc2_ = this._tText.textHeight;
      var _loc3_ = 0.9 * this._tText._height / _loc2_ * this._tText.maxscroll;
      this._sbVertical.setScrollProperties(_loc3_,0,this._tText.maxscroll);
      this._sbVertical.scrollPosition = this._tText.scroll;
   }
   function setTextWithBottomStart()
   {
      this._tText.text = "";
      var _loc2_ = 0;
      while(this._tText.maxscroll == 1 && _loc2_ < 50)
      {
         this._tText.text = this._tText.text + "\n";
         _loc2_ = _loc2_ + 1;
      }
      this._tText.htmlText = this._tText.htmlText + this._sText;
   }
   function onMouseWheel(nDelta, mc)
   {
      if(!this._bUseMouseWheel)
      {
         return undefined;
      }
      if(String(mc._target).indexOf(this._target) != -1)
      {
         this._sbVertical.scrollPosition = this._sbVertical.scrollPosition - nDelta;
      }
   }
   function onChanged()
   {
      this.addScrollBar();
   }
   function onScroller()
   {
      this.setScrollBarPosition();
   }
   function scroll(oEvent)
   {
      if(oEvent.target == this._sbVertical)
      {
         this._tText.scroll = oEvent.target.scrollPosition;
      }
   }
   function onHref(sParams)
   {
      this.dispatchEvent({type:"href",params:sParams});
   }
   function onSetFocus()
   {
      getURL("FSCommand:" add "trapallkeys","false");
   }
   function onKillFocus()
   {
      getURL("FSCommand:" add "trapallkeys","true");
   }
}

 

Et voici le patch du code proposé par @piou lors d'une réponse qui date un petit peu.

Spoiler
var _loc1 = ank.gapi.controls.ChatArea.prototype;

_loc1.addScrollBar = function ()
{
    if (this._sbVertical == undefined)
    {
        this.attachMovie("ScrollBar", "_sbVertical", 20, {styleName: this.getStyle().scrollbarstyle, _visible: !this._bHideScrollBar});
        this._sbVertical.addEventListener("scroll", this);
    } // end if
    this._sbVertical.setSize(this.__height - 2);
    this._sbVertical._y = 1;
    this._sbVertical._x = this._sScrollBarSide == "right" ? (this.__width - this._sbVertical._width - 3) : (0);
    if (this._bHideScrollBar)
    {
        this._tText._width = this.__width;
        this._tText._x = 0;
    }
    else
    {
        this._tText._width = this.__width - this._sbVertical._width - 3 - this._nScrollBarMargin;
        this._tText._x = this._sScrollBarSide == "right" ? (0) : (this._sbVertical._width + this._nScrollBarMargin);
    } // end else if
    this.setScrollBarPosition();
    if (Math.abs(this._nPreviousMaxscroll - this._tText.scroll) < ank.gapi.controls.ChatArea.STOP_SCROLL_LENGTH || this._bInvalidateMaxScrollStop)
    {
        this._tText.scroll = this._tText.maxscroll;
        this._nScrollPosition = this._tText.maxscroll;
    } // end if
    this._bInvalidateMaxScrollStop = false;
};

_loc1.setScrollBarPosition = function ()
{
    var _loc2 = this._tText.textHeight;
    var _loc3 = 9.000000E-001 * this._tText._height / _loc2 * this._tText.maxscroll;
    this._sbVertical.setScrollProperties(_loc3, 0, this._tText.maxscroll);
    this._tText.scroll = this._nScrollPosition;
    this._sbVertical.scrollPosition = this._tText.scroll;
};

_loc1.scroll = function (oEvent)
{
    if (oEvent.target == this._sbVertical)
    {
        this._tText.scroll = oEvent.target.scrollPosition;
        this._nScrollPosition = this._tText.scroll;
    } // end if
};

_loc1._nScrollPosition = 1; 

 

Si quelqu'un pouvait m'indiquer comment m'y prendre, car j'ai bel et bien essayé de réintégrer les phrases supplémentaire de code réécrites par @piou, je ne comprend vraiment pas ou dois-je placer la dernière ligne de son code.

Edited by loustique
orthographe

Share this post


Link to post
Share on other sites

faudrais m'expliquer pourquoi vous avez se bug de ''chat qui remonte'' lolz ... depuis que je suis dans l'emulation (donc plusieurs années) j'ai jamais vue se bug et jamais eu ....même en modifient plusieurs fois le client

Share this post


Link to post
Share on other sites

J'aimerais bien pouvoir t'expliquer @ydainna, mais je ne me suis penché dessus que depuis quelques jours, ma version 1.29 tactique antilag marchait tres bien mais pour un confort visuel optimal je voulais pouvoir jouer en pleine écran. Depuis le premier lancement de mon loarder.swf via le flash debugger ce bug est présent, du coup c'est extrêmement agacant. Voici ma config si ca peux t'aidé à comprendre ( Processeur 2,2 GHz Intel core i7, Ram 8 Go 1333 MHz DDR3, Carte Graphique AMD Radeon HD 6750M 1024 Mo, Flash Player Debugger Version 11.2.202.228 (12.0) ) (de plus je ne suis pas sur un serveur émulé mais bel et bien sur les serveurs officiels de 1.29)

Edited by loustique
orthographe

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...