Jump to content

Search the Community

Showing results for tags 'coroutines'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Multi Theft Auto: San Andreas 1.x
    • Support for MTA:SA 1.x
    • User Guides
    • Open Source Contributors
    • Suggestions
    • Ban appeals
  • General MTA
    • News
    • Media
    • Site/Forum/Discord/Mantis/Wiki related
    • MTA Chat
    • Other languages
  • MTA Community
    • Scripting
    • Maps
    • Resources
    • Other Creations & GTA modding
    • Competitive gameplay
    • Servers
  • Other
    • General
    • Multi Theft Auto 0.5r2
    • Third party GTA mods
  • Archive
    • Archived Items
    • Trash

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Member Title


Gang


Location


Occupation


Interests

Found 1 result

  1. Hola buenas, a falta de la necesidad de un descompresor de archivos zip en mta (lo cual me sorprende que en pleno 2018 aun no tenga uno), me vi en la obligacion de usar una libreria existente. Necesito saber como reescribir parte de la funcion getb() puesto que el loop que genera en archivos superiores a 2mb puede llegar a ser realmente gigantesco y MTA por consiguiente termina abortandolo. He visto que hay formas de hacerlo con coroutines (pausandolas y resumiendolas), pero no logro entender como adaptar parte de las funciones que estan dentro de la funcion principal, puesto que estan en OOP, lo cual para mi sigue siendo medio chino. Ojalas me puedan echar una mano con esto, mas alla de que parte del codigo ya haya estado hecho, la verdad es que me tomo bastante tiempo adaptarlo a las funciones de MTA y escribir todo el resto, horas y horas de testeo. Se tambien que con debug.setHook(nil) se pueden forzar loops largos pero el lag que generaria realmente no lo compensa. -- file = string obtenido desde fileRead local function bitstream_init(file) local bs = { file = file, buf = nil, len = nil, pos = 1, b = 0, n = 0, } function bs:flushb(n) self.n = self.n - n self.b = bitRShift(self.b,n) end function bs:getb(n) while self.n < n do if self.pos > self.len then self.buf = self.file:read(4096) self.len = self.buf:len() self.pos = 1 end self.b = self.b + bitLShift(self.buf:byte(self.pos),self.n) self.pos = self.pos + 1 self.n = self.n + 8 end local ret = bitAnd(self.b,bitLShift(1,n)-1) self.n = self.n - n self.b = bitRShift(self.b,n) return ret end function bs:getv(hufftable,n) while self.n < n do if self.pos > self.len then self.buf = self.file:read(4096) self.len = self.buf:len() self.pos = 1 end self.b = self.b + bitLShift(self.buf:byte(self.pos),self.n) self.pos = self.pos + 1 self.n = self.n + 8 end local h = reverse[bitAnd(self.b,255)] local l = reverse[bitAnd(bitRShift(self.b,8),255)] local v = bitAnd(bitRShift(bitLShift(h,8)+l,16-n),bitLShift(1,n)-1) local e = hufftable[v] local len = bitAnd(e,15) local ret = bitRShift(e,4) self.n = self.n - len self.b = bitRShift(self.b,len) return ret end function bs:close() if self.file then self.file:close() end end if type(file) == "string" then bs.file = nil bs.buf = file end bs.len = bs.buf:len() return bs end Gracias de antemano!
×
×
  • Create New...