• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!

Integers Compression

Status
Not open for further replies.
Level 6
Joined
Jul 22, 2009
Messages
214
I'm currently working on implant a save/load system in my map. the problem I have is that I have a lot of small integer to store. I want to know if there is a way to ''merge'' them and store a bigger integer, and after being able to retrieve each value when loading.

This is the range of possible value of the 12 integers I want to store
0-6
0-6
0-5
0-5
0-4
0-4
0-3
0-3
0-2
0-2
0-1
0-1

If someone can help me I will be very happy.
 
Level 31
Joined
Jul 10, 2007
Messages
6,306
Use http://www.hiveworkshop.com/forums/spells-569/encoder-2-0-2-0-a-189883/?prev=mmr=6

#1 save/load system and can do exactly what you want.

If you seriously do want to do it by yourself (pointless), you could read this tutorial.

http://www.hiveworkshop.com/forums/jass-ai-scripts-tutorials-280/saving-loading-192851/

And use this
http://www.hiveworkshop.com/forums/jass-functions-413/system-bigint-188973/

edit
JASS:
local Encoder encoder = Encoder.create(Base["0123456789abcdefghijlkmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"], 124921, 39291)

local CodeRange r1 = CodeRange.create(0,6)
local CodeRange r2 = CodeRange.create(0,6)
local CodeRange r3 = CodeRange.create(0,5)
local CodeRange r4 = CodeRange.create(0,5)
local CodeRange r5 = CodeRange.create(0,4)
local CodeRange r6 = CodeRange.create(0,4)
local CodeRange r7 = CodeRange.create(0,3)
local CodeRange r8 = CodeRange.create(0,3)
local CodeRange r9 = CodeRange.create(0,2)
local CodeRange r10 = CodeRange.create(0,2)
local CodeRange r11 = CodeRange.create(0,1)
local CodeRange r12 = CodeRange.create(0,1)

call encoder.add(r1)
call encoder.add(r2)
call encoder.add(r3)
call encoder.add(r4)
call encoder.add(r5)
call encoder.add(r6)
call encoder.add(r7)
call encoder.add(r8)
call encoder.add(r9)
call encoder.add(r10)
call encoder.add(r11)
call encoder.add(r12)

Done

And writing to it and reading from it couldn't be easier
JASS:
local DataBuffer buffer = encoder.write(1) //player 1
local string code
call buffer.write(5)
call buffer.write(5)
call buffer.write(4)
call buffer.write(4)
call buffer.write(3)
call buffer.write(3)
call buffer.write(2)
call buffer.write(2)
call buffer.write(1)
call buffer.write(1)

set code = buffer.code

JASS:
local DataBuffer buffer = encoder.read(code, 1) //player 1
local integer v1 = call buffer.read()
local integer v2 = call buffer.read()
local integer v3 = call buffer.read()
local integer v4 = call buffer.read()
local integer v5 = call buffer.read()
local integer v6 = call buffer.read()
local integer v7 = call buffer.read()
local integer v8 = call buffer.read()
local integer v9 = call buffer.read()
local integer v10 = call buffer.read()
local integer v11 = call buffer.read()
local integer v12 = call buffer.read()

???
 
Level 6
Joined
Jul 22, 2009
Messages
214
Seriously, I've read all the documentation, take more than one complete week for trying to understand your Encoder. It's look very nice, but I'm not able to make it work. Have you another solution, more easy to understand?
 
Last edited:
Level 6
Joined
Jul 22, 2009
Messages
214
No longer require this(for moment) I've think about and I conclude that I don't really need to store all these integer. I will just store the total value of them. It's will allow the player to change his specialization each time he play. (These integers are the levels of talents). I will probably try again to use the Encoder, this summer I will have more time for understand it.
 
Status
Not open for further replies.
Top