comparison AskMrRobot-Serializer/AskMrRobot-Serializer.lua @ 112:57c6cac5143c v52

7.3 update, preparation for reading crucible.
author yellowfive
date Mon, 28 Aug 2017 19:33:14 -0700
parents 5021d5125484
children 4cd98aa90d78
comparison
equal deleted inserted replaced
111:2f78f6c96183 112:57c6cac5143c
1 -- AskMrRobot-Serializer will serialize and communicate character data between users. 1 -- AskMrRobot-Serializer will serialize and communicate character data between users.
2 -- This is used primarily to associate character information to logs uploaded to askmrrobot.com. 2 -- This is used primarily to associate character information to logs uploaded to askmrrobot.com.
3 3
4 local MAJOR, MINOR = "AskMrRobot-Serializer", 51 4 local MAJOR, MINOR = "AskMrRobot-Serializer", 52
5 local Amr, oldminor = LibStub:NewLibrary(MAJOR, MINOR) 5 local Amr, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
6 6
7 if not Amr then return end -- already loaded by something else 7 if not Amr then return end -- already loaded by something else
8 8
9 -- event and comm used for player snapshotting on entering combat 9 -- event and comm used for player snapshotting on entering combat
881 --ret.Talents[pos] = getTalents(pos) 881 --ret.Talents[pos] = getTalents(pos)
882 end 882 end
883 end 883 end
884 end 884 end
885 885
886 -- TODO: hopefully we can read artifact here when there is an API to get info when the artifact UI is not open
887 -- get artifact info
888 local function readArtifact()
889
890 end
891
892 -- get currently equipped items, store with currently active spec 886 -- get currently equipped items, store with currently active spec
893 local function readEquippedItems(ret) 887 local function readEquippedItems(ret)
894 local equippedItems = {}; 888 local equippedItems = {};
895 for slotNum = 1, #Amr.SlotIds do 889 for slotNum = 1, #Amr.SlotIds do
896 local slotId = Amr.SlotIds[slotNum] 890 local slotId = Amr.SlotIds[slotNum]
945 939
946 ret.Specs = {} 940 ret.Specs = {}
947 ret.Talents = {} 941 ret.Talents = {}
948 readSpecs(ret) 942 readSpecs(ret)
949 943
950 ret.Artifacts = {} 944 ret.Artifacts = {}
951 readArtifact()
952 945
953 ret.Equipped = {} 946 ret.Equipped = {}
954 readEquippedItems(ret) 947 readEquippedItems(ret)
955 948
956 return ret 949 return ret
1047 1040
1048 table.insert(fields, table.concat(itemParts, "")) 1041 table.insert(fields, table.concat(itemParts, ""))
1049 end 1042 end
1050 end 1043 end
1051 1044
1045 local function serializeCrucibleInfo(fields, info, pos, prevPowerId)
1046
1047 if not info.Powers or not info.Active then
1048 return prevPowerId
1049 end
1050
1051 local parts = {}
1052
1053 if pos < 4 then
1054 table.insert(parts, pos)
1055 else
1056 local relic = Amr.ParseItemLink(info.ItemLink)
1057 table.insert(parts, Amr.GetItemUniqueId(relic) or "0")
1058 end
1059
1060 for i,powerId in ipairs(info.Powers) do
1061 table.insert(parts, (powerId - prevPowerId) .. "")
1062 prevPowerId = powerId
1063 end
1064
1065 for i,active in ipairs(info.Active) do
1066 table.insert(parts, active and "1" or "0")
1067 end
1068
1069 table.insert(fields, table.concat(parts, ","))
1070
1071 return prevPowerId
1072 end
1073
1052 -- Serialize just the identity portion of a player (region/realm/name) in the same format used by the full serialization 1074 -- Serialize just the identity portion of a player (region/realm/name) in the same format used by the full serialization
1053 function Amr:SerializePlayerIdentity(data) 1075 function Amr:SerializePlayerIdentity(data)
1054 local fields = {} 1076 local fields = {}
1055 table.insert(fields, MINOR) 1077 table.insert(fields, MINOR)
1056 table.insert(fields, data.Region) 1078 table.insert(fields, data.Region)
1121 table.insert(fields, data.Specs[spec]) 1143 table.insert(fields, data.Specs[spec])
1122 table.insert(fields, data.Talents[spec] or "") 1144 table.insert(fields, data.Talents[spec] or "")
1123 1145
1124 local powerids = {} 1146 local powerids = {}
1125 local powerranks = {} 1147 local powerranks = {}
1126 local reliclinks = {} 1148 local reliclinks = {}
1149 local crucibleinfos = {}
1127 1150
1128 local artifactInfo = data.Artifacts and data.Artifacts[spec] 1151 local artifactInfo = data.Artifacts and data.Artifacts[spec]
1129 if artifactInfo and artifactInfo.Powers then 1152 if artifactInfo and artifactInfo.Powers then
1130 for k, v in spairs(artifactInfo.Powers) do 1153 for k, v in spairs(artifactInfo.Powers) do
1131 table.insert(powerids, k) 1154 table.insert(powerids, k)
1136 for i, link in ipairs(artifactInfo.Relics) do 1159 for i, link in ipairs(artifactInfo.Relics) do
1137 local relic = Amr.ParseItemLink(link) 1160 local relic = Amr.ParseItemLink(link)
1138 table.insert(reliclinks, Amr.GetItemUniqueId(relic) or "") 1161 table.insert(reliclinks, Amr.GetItemUniqueId(relic) or "")
1139 end 1162 end
1140 end 1163 end
1164 if artifactInfo and artifactInfo.Crucible then
1165 local prevPowerId = 0
1166 for i = 1,3 do
1167 local relicInfo = #artifactInfo.Crucible.Equipped >= i and artifactInfo.Crucible.Equipped[i]
1168 if relicInfo then
1169 prevPowerId = serializeCrucibleInfo(crucibleinfos, relicInfo, i, prevPowerId)
1170 end
1171 end
1172 for k,relicInfo in pairs(artifactInfo.Crucible.Inventory) do
1173 if relicInfo then
1174 prevPowerId = serializeCrucibleInfo(crucibleinfos, relicInfo, 4, prevPowerId)
1175 end
1176 end
1177 end
1141 1178
1142 table.insert(fields, toCompressedNumberList(powerids)) 1179 table.insert(fields, toCompressedNumberList(powerids))
1143 table.insert(fields, table.concat(powerranks, ",")) 1180 table.insert(fields, table.concat(powerranks, ","))
1144 table.insert(fields, table.concat(reliclinks, ",")) 1181 table.insert(fields, table.concat(reliclinks, ","))
1182 table.insert(fields, table.concat(crucibleinfos, "/"))
1145 1183
1146 --table.insert(fields, toCompressedNumberList(data.Glyphs[spec])) 1184 --table.insert(fields, toCompressedNumberList(data.Glyphs[spec]))
1147 end 1185 end
1148 end 1186 end
1149 1187