1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 19:17:38 +08:00

feat: market face parser & dice face support

This commit is contained in:
Mrs4s 2021-10-29 00:15:57 +08:00
parent 0ef4c01861
commit a8e6d4b945
No known key found for this signature in database
GPG Key ID: 3186E98FA19CE3A7
4 changed files with 1002 additions and 333 deletions

File diff suppressed because it is too large Load Diff

View File

@ -196,10 +196,10 @@ message Elem {
optional OnlineImage onlineImage = 3; optional OnlineImage onlineImage = 3;
optional NotOnlineImage notOnlineImage = 4; optional NotOnlineImage notOnlineImage = 4;
optional TransElem transElemInfo = 5; optional TransElem transElemInfo = 5;
//MarketFace marketFace = 6; optional MarketFace marketFace = 6;
//ElemFlags elemFlags = 7; //ElemFlags elemFlags = 7;
optional CustomFace customFace = 8; optional CustomFace customFace = 8;
//ElemFlags2 elemFlags2 = 9; optional ElemFlags2 elemFlags2 = 9;
//FunFace funFace = 10; //FunFace funFace = 10;
//SecretFileMsg secretFile = 11; //SecretFileMsg secretFile = 11;
optional RichMsg richMsg = 12; optional RichMsg richMsg = 12;
@ -246,6 +246,53 @@ message Elem {
optional CommonElem commonElem = 53; optional CommonElem commonElem = 53;
} }
message MarketFace {
optional bytes faceName = 1;
optional uint32 itemType = 2;
optional uint32 faceInfo = 3;
optional bytes faceId = 4;
optional uint32 tabId = 5;
optional uint32 subType = 6;
optional bytes key = 7;
optional bytes param = 8;
optional uint32 mediaType = 9;
optional uint32 imageWidth = 10;
optional uint32 imageHeight = 11;
optional bytes mobileparam = 12;
optional bytes pbReserve = 13;
}
message ElemFlags2 {
optional uint32 colorTextId = 1;
optional uint64 msgId = 2;
optional uint32 whisperSessionId = 3;
optional uint32 pttChangeBit = 4;
optional uint32 vipStatus = 5;
optional uint32 compatibleId = 6;
repeated Inst insts = 7;
optional uint32 msgRptCnt = 8;
optional Inst srcInst = 9;
optional uint32 longtitude = 10;
optional uint32 latitude = 11;
optional uint32 customFont = 12;
optional PcSupportDef pcSupportDef = 13;
optional uint32 crmFlags = 14;
message Inst {
optional uint32 appId = 1;
optional uint32 instId = 2;
}
}
message PcSupportDef {
optional uint32 pcPtlBegin = 1;
optional uint32 pcPtlEnd = 2;
optional uint32 macPtlBegin = 3;
optional uint32 macPtlEnd = 4;
repeated uint32 ptlsSupport = 5;
repeated uint32 ptlsNotSupport = 6;
}
message CommonElem { message CommonElem {
optional int32 serviceType = 1; optional int32 serviceType = 1;
optional bytes pbElem = 2; optional bytes pbElem = 2;

View File

@ -38,6 +38,19 @@ type FaceElement struct {
Name string Name string
} }
type MarketFaceElement struct {
Name string
ItemType int32
SubType int32
EncryptKey []byte // tea + xor, see EMosmUtils.class::a maybe useful?
MagicValue string
}
type DiceElement struct {
*MarketFaceElement
Value int32
}
type AtElement struct { type AtElement struct {
Target int64 Target int64
Display string Display string
@ -224,6 +237,10 @@ func (e *FaceElement) Type() ElementType {
return Face return Face
} }
func (e *MarketFaceElement) Type() ElementType {
return Face
}
func (e *AtElement) Type() ElementType { func (e *AtElement) Type() ElementType {
return At return At
} }

View File

@ -467,6 +467,28 @@ func ParseMessageElems(elems []*msg.Elem) []IMessageElement {
Md5: elem.CustomFace.Md5, Md5: elem.CustomFace.Md5,
}) })
} }
if elem.MarketFace != nil {
face := &MarketFaceElement{
Name: utils.B2S(elem.MarketFace.GetFaceName()),
ItemType: int32(elem.MarketFace.GetItemType()),
SubType: int32(elem.MarketFace.GetSubType()),
EncryptKey: elem.MarketFace.GetKey(),
MagicValue: utils.B2S(elem.MarketFace.Mobileparam),
}
if face.Name == "[骰子]" {
return []IMessageElement{
&DiceElement{
MarketFaceElement: face,
Value: func() int32 {
v := strings.SplitN(face.MagicValue, "=", 2)[1]
t, _ := strconv.ParseInt(v, 10, 32)
return int32(t) + 1
}(),
},
}
}
return []IMessageElement{face}
}
if elem.NotOnlineImage != nil { if elem.NotOnlineImage != nil {
var img string var img string
if elem.NotOnlineImage.GetOrigUrl() != "" { if elem.NotOnlineImage.GetOrigUrl() != "" {