本帖最后由 locbytes 于 2018-10-19 12:29 编辑
本分析贴旨在讲解如何获取FGO网络封包中的个体数据,包括英灵个体数据,礼装的个体数据
Q:这个有什么用?
A:用得上的人自然知道...比如做wiki的,一次可以抓取六个英灵的数据,还能知道对应的数据都是谁的。
代码是python的,直接上代码
[Python] 纯文本查看 复制代码
friendNum = len(json_data["cache"]["replaced"]["battle"][0]["battleInfo"]["myDeck"]["svts"])
equipNum = len(json_data["cache"]["replaced"]["battle"][0]["battleInfo"]["myUserSvtEquip"])
usrSvtIds=[0,0,0,0,0,0]
i=0
while i < friendNum :
svt=json_data["cache"]["replaced"]["battle"][0]["battleInfo"]["myDeck"]["svts"][i]
usrSvtIds[i]=int(svt["userSvtId"])
i+=1
usrSvtListId=[0,0,0,0,0,0]
i=0
while i < friendNum :
j=0
while j < friendNum :
svt=json_data["cache"]["replaced"]["battle"][0]["battleInfo"]["userSvt"][j]
if int(svt["id"])==usrSvtIds[i] :
usrSvtListId[i]=j
break
j+=1
i+=1
equip=[0,0,0,0,0,0]
i=0
while i < friendNum :
svt = json_data["cache"]["replaced"]["battle"][0]["battleInfo"]["myDeck"]["svts"][i]
if svt["isFollowerSvt"] :
friednSvtId=i
if int(svt["userSvtEquipIds"][0]) > 0 :
equip[0]=friendNum
break
i+=1
tempEquipId = friendNum
if equip[0] == 0 :
tempEquipId-=1
i=0
while i < friendNum :
svt = json_data["cache"]["replaced"]["battle"][0]["battleInfo"]["myDeck"]["svts"][i]
if not svt["isFollowerSvt"] :
if int(svt["userSvtEquipIds"][0]) > 0 :
tempEquipId+=1
usrSvtId=i+1
if i > friednSvtId :
usrSvtId-=1
equip[usrSvtId]=tempEquipId
i+=1
获取userSvt里的英灵位次的方法就是先读取userSvtId,然后通过userSvtId来获得英灵位次的排序
即usrSvtListId里的0~5号的值依次对应队伍从左往右的1-6号位在userSvt数组里的index
对于不满6个英灵的情况,比如只有3个英灵,usrSvtListId的[3:5]就是0,使用时可以通过比较friendNum进行判断
礼装装备情况就是助战的礼装位于userSvt[friendNum],当然你得判断助战到底有没有礼装,然后其他的礼装顺序就是队伍从左往右依次index+1
同理通过equipNum进行判断
即equip[0]为助战带的礼装在userSvt中的index,[1-5]为从队伍从左往右除去助战的英灵带的礼装,没带就是0
|