• 🏆 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!
  • 🏆 Hive's 6th HD Modeling Contest: Mechanical is now open! Design and model a mechanical creature, mechanized animal, a futuristic robotic being, or anything else your imagination can tinker with! 📅 Submissions close on June 30, 2024. Don't miss this opportunity to let your creativity shine! Enter now and show us your mechanical masterpiece!🔗 Click here to enter!

Unidentified desync problem

Level 5
Joined
Jun 7, 2012
Messages
66
I've got an unidentified desync problem which happens in one same place but is really inconsistent. Checked all instances of GetLocalPlayer before you suggest that.

After checking desync logs from different players, differences are only and always in the same block.

=======================================================================
[Desync - 1768977253 - Turn(00001820) = 247510880]
#0#: 0x000104F0
#1#: 0x00000C7A
#2#: 0x0000DCB1
#3#: 0x019CD1E4
1768977253 equals to 'ipse'. Differences can be randomly in #1#, #2# or #3#. All other tables in logs are equal and never different.
The only info about 'ipse' I got is from old crash logs on hive which corresponds to ipse_thread.cpp

Can anyone tell me what 'ipse' corresponds to so I can try to pinpoint it instead of checking everything at once.

The only difference between players in Desync.txt is in "War3 tempest checksum". All other fields are equal.

Currently working on native function call log which is displayed during replay, but don't know if it will help with pinpointing the issue.
Lua:
local list = {}
local params = {}
local story = defaultArray(function() return 0 end)

if GetGameStatus() == GameStatus.REPLAY then
    for i, v in pairs(Native) do--Native is an array of all Native functions instead of _G
        if type(v) == 'function' then
            local f = v
            Native[i] = function(...)
                if #list > 30 then
                    table.remove(list, 1)
                    table.remove(params, 1)
                end
                table.insert(list, i)
                table.insert(params, {...})
                if GameData.time - story[i] >= 5 then
                    story[i] = GameData.time
                    print(i, ...)
                end
                return v(...)
            end
        end
    end
end

function PrintDesyncInfoOnLeave()
    if GetGameStatus() == GameStatus.REPLAY then
        story = defaultArray(function() return 0 end)
        for i = 1, #list do
            print("DESYNC: " .. list[i], table.unpack(params[i]))
        end
    end
end
 
Top