Да, с ней большая беда.
Вот с трупожорки:
Код:
def parse_SMSG_MESSAGECHAT(_stream):
_msg_type = _stream.getB()
f01_msg_type = CHAT(_msg_type)
_lang = _stream.getI()
f02_lang = LANG(_lang)
if _msg_type in (CHAT_MSG_SAY , CHAT_MSG_PARTY, CHAT_MSG_YELL):
f03_1_guid1 = hexQ( _stream.getQ() )
f03_2_lang = LANG(_stream.getI()) #2.1.0
f04_guid2 = hexQ( _stream.getQ() )
f05_text_sz = _stream.getI()
f06_text = _stream.getS(f05_text_sz)
elif _msg_type == CHAT_MSG_CHANNEL:
f03_guid = hexQ( _stream.getQ() ) #2.1.0
f04_shit = _stream.getI() #2.1.0
f05_chanel = _stream.getSZ()
f06_guid = hexQ( _stream.getQ() )
f07_text_sz = _stream.getI()
f08_text = _stream.getS(f07_text_sz)
elif _msg_type in (CHAT_MSG_WHISPER, CHAT_MSG_REPLY, CHAT_MSG_GUILD, CHAT_MSG_BG_SYSTEM_HORDE,CHAT_MSG_BG_SYSTEM_ALLIANCE,CHAT_MSG_BG_SYSTEM_NEUTRAL,CHAT_MSG_BATTLEGROUND):
f03_guid1 = hexQ( _stream.getQ() )
f05_text_sz = _stream.getI()
f06_text = _stream.getS(f05_text_sz)
elif _msg_type in (CHAT_MSG_MONSTER_SAY, CHAT_MSG_MONSTER_PARTY, CHAT_MSG_MONSTER_YELL, CHAT_MSG_MONSTER_WHISPER, CHAT_MSG_MONSTER_EMOTE, CHAT_MSG_RAID_BOSS_WHISPER, CHAT_MSG_RAID_BOSS_EMOTE):
f03_0_guid = _stream.getQ()
f03_0_guid_hex = hexQ(f03_0_guid)
f03_1_unk = _stream.getI() #2.1.0
f04_name_sz = _stream.getI()
f05_name = _stream.getS(f04_name_sz)
f06_TargetGuid = _stream.getQ()
f06_TargetGuid_hex = hexQ(f06_TargetGuid)
### 2_4_1
if f06_TargetGuid and (not IS_PLAYER_GUID(f06_TargetGuid_hex)):
f07_string_unk_sz = _stream.getI()
f08_Target_Name = _stream.getS(f07_string_unk_sz)
#####
f09_text_sz = _stream.getI()
f10_text = _stream.getS(f09_text_sz)
_entry = ENTRY(f03_0_guid)
_toMob=0
_toPlayer=0
if f06_TargetGuid:
if IS_PLAYER_GUID(f06_TargetGuid_hex):
_toPlayer=1
else:
_toPlayer=0
_toMob=ENTRY(f06_TargetGuid)
_creature_chat_sql = CreatureChatSQL(_entry)
_creature_chat_sql.AddChat(_msg_type,_lang,_toPlayer,_toMob,f05_name.replace("'", "\\'").replace(chr(0),""),f10_text.replace("'", "\\'").replace(chr(0),""))
_creature_chat_sql.close()
f20_tag = _stream.getB()
return dict(sys._getframe().f_locals)
Вот с этим блоком проблема:
Код:
### 2_4_1
if f06_TargetGuid and (not IS_PLAYER_GUID(f06_TargetGuid_hex)):
f07_string_unk_sz = _stream.getI()
f08_Target_Name = _stream.getS(f07_string_unk_sz)
#####
Часть пакетов парсится нормально только если он есть, другая только если его нет.
Чтобы вытащить все тексты с ИВК, пришлось пасить всё два раза (с блоком и без него)