Показать сообщение отдельно
Старый 06.01.2010, 09:39   #5
griffonheart
Guest
 
Сообщений: n/a
По умолчанию

Да, с ней большая беда.
Вот с трупожорки:
Код:
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)
#####
Часть пакетов парсится нормально только если он есть, другая только если его нет.
Чтобы вытащить все тексты с ИВК, пришлось пасить всё два раза (с блоком и без него)
  Ответить с цитированием
Пользователь сказал cпасибо:
Konctantin (06.01.2010)