Çözüldü Global chat sorunu

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

therasmus

Üye
Üye
Mesaj
119
Çözümler
10
Beğeni
69
Puan
729
Ticaret Puanı
0
Merhaba, global chatte bayrak, level, ch gösterme sismini ekledim. Sistemi bağırmada kullanınca hiçbir sıkıntı yok fakat grup,lonca ve normal chatten yazmak istediğimde gerekli eşya içgörü küresi diyor. yani direkt
else
len = snprintf(buf, sizeof(buf), LC_TEXT("%sÀÌ ÇÊ¿äÇÕ´Ï´Ù."), pTable->szLocaleName);

bu bloğa düşüyor.

fakat grup,lonca ve normal chatten item yansıtarak yazdığımda yazabiliyorum. o da şöyle;
test.webp


burda garibime giden ise normal chatte bile ch level göstermesi. input_main.cpp dosyamın chat fonksiyonu ise şöyle;

chat:
Genişlet Daralt Kopyala
int CInputMain::Chat(LPCHARACTER ch, const char * data, size_t uiBytes)
{
    const TPacketCGChat* pinfo = reinterpret_cast<const TPacketCGChat*>(data);

    if (uiBytes < pinfo->size)
        return -1;

    const int iExtraLen = pinfo->size - sizeof(TPacketCGChat);

    if (iExtraLen < 0)
    {
        sys_err("invalid packet length (len %d size %u buffer %u)", iExtraLen, pinfo->size, uiBytes);
        ch->GetDesc()->SetPhase(PHASE_CLOSE);
        return -1;
    }

    char buf[CHAT_MAX_LEN - (CHARACTER_NAME_MAX_LEN + 3) + 1];
    strlcpy(buf, data + sizeof(TPacketCGChat), MIN(iExtraLen + 1, sizeof(buf)));
    const size_t buflen = strlen(buf);

    if (buflen > 1 && *buf == '/')
    {
        interpret_command(ch, buf + 1, buflen - 1);
        return iExtraLen;
    }

#ifdef WJ_SECURITY_SYSTEM
    if (ch->IsActivateSecurity())
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Cannot send message with security key activate"));
        return (iExtraLen);
    }
#endif

    if (ch->IncreaseChatCounter() >= 10)
    {
        if (ch->GetChatCounter() == 10)
        {
            sys_log(0, "CHAT_HACK: %s", ch->GetName());
            ch->GetDesc()->DelayedDisconnect(5);
        }

        return iExtraLen;
    }

    // äÆà ±İÁö Affect ó¸®
    const CAffect* pAffect = ch->FindAffect(AFFECT_BLOCK_CHAT);

    if (pAffect != NULL)
    {
        SendBlockChatInfo(ch, pAffect->lDuration);
        return iExtraLen;
    }

    if (true == SpamBlockCheck(ch, buf, buflen))
    {
        return iExtraLen;
    }

    char chatbuf[CHAT_MAX_LEN + 1];
    int len;

#if defined(ENABLE_GLOBAL_CHAT)
    len = snprintf(chatbuf, sizeof(chatbuf), "[CH%d][|cFF00FF00Lv. %d|r] %s : %s", g_bChannel, ch->GetLevel(), ch->GetName(), buf);
#else
    len = snprintf(chatbuf, sizeof(chatbuf), "%s : %s", ch->GetName(), buf);
#endif

    if (CHAT_TYPE_SHOUT == pinfo->type)
    {
        LogManager::instance().ShoutLog(g_bChannel, ch->GetEmpire(), chatbuf);
    }

    if (LC_IsCanada() == false)
    {
        CBanwordManager::instance().ConvertString(buf, buflen);
    }

    if (len < 0 || len >= (int) sizeof(chatbuf))
        len = sizeof(chatbuf) - 1;

    int processReturn = ProcessTextTag(ch, chatbuf, len);
    if (0!=processReturn)
    {
        const TItemTable* pTable = ITEM_MANAGER::instance().GetTable(ITEM_PRISM);

        if (NULL != pTable)
        {
            if (3==processReturn) //±³È¯Áß
                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("´Ù¸¥ °Å·¡Áß(â°í,±³È¯,»óÁ¡)¿¡´Â °³ÀλóÁ¡À» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù."), pTable->szLocaleName);
            else
                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%sÀÌ ÇÊ¿äÇÕ´Ï´Ù."), pTable->szLocaleName);
                        
        }

        return iExtraLen;
    }

    if (pinfo->type == CHAT_TYPE_SHOUT)
    {
        const int SHOUT_LIMIT_LEVEL = g_iUseLocale ? 15 : 3;

        if (ch->GetLevel() < SHOUT_LIMIT_LEVEL)
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¿ÜÄ¡±â´Â ·¹º§ %d ÀÌ»ó¸¸ »ç¿ë °¡´É ÇÕ´Ï´Ù."), SHOUT_LIMIT_LEVEL);
            return (iExtraLen);
        }

        if (thecore_heart->pulse - (int)ch->GetLastShoutPulse() < passes_per_sec * 15)
            return (iExtraLen);

        ch->SetLastShoutPulse(thecore_heart->pulse);
        char chatbuf_global[CHAT_MAX_LEN + 1];

#if defined(ENABLE_GLOBAL_CHAT)
        const char* kingdoms[3] = { "[1]   ","[2]   ","[3]   " };
        if (ch->GetEmpire() > 0 && ch->GetEmpire() == 1 or ch->GetEmpire() == 2 or ch->GetEmpire() == 3)
        {
            int len_global = snprintf(chatbuf_global, sizeof(chatbuf_global), "%s%s", kingdoms[ch->GetEmpire() - 1], chatbuf);
        }
        else
        {
            int len_global = snprintf(chatbuf_global, sizeof(chatbuf_global), "%s", chatbuf);
        }
#endif
        
        
        TPacketGGShout p;

        p.bHeader = HEADER_GG_SHOUT;
        p.bEmpire = ch->GetEmpire();
        strlcpy(p.szText, chatbuf_global, sizeof(p.szText));

        P2P_MANAGER::instance().Send(&p, sizeof(TPacketGGShout));

        SendShout(chatbuf_global, ch->GetEmpire());

        return (iExtraLen);
    }

    TPacketGCChat pack_chat;

    pack_chat.header = HEADER_GC_CHAT;
    pack_chat.size = sizeof(TPacketGCChat) + len;
    pack_chat.type = pinfo->type;
    pack_chat.id = ch->GetVID();

    switch (pinfo->type)
    {
        case CHAT_TYPE_TALKING:
            {
                const DESC_MANAGER::DESC_SET & c_ref_set = DESC_MANAGER::instance().GetClientSet();

                if (false)
                {
                    std::for_each(c_ref_set.begin(), c_ref_set.end(),
                            FYmirChatPacket(pack_chat,
                                buf,
                                strlen(buf),
                                ch->GetName(),
                                strlen(ch->GetName()),
                                ch->GetMapIndex(),
                                ch->GetEmpire(),
                                ch->IsEquipUniqueGroup(UNIQUE_GROUP_RING_OF_LANGUAGE)));
                }
                else
                {
                    std::for_each(c_ref_set.begin(), c_ref_set.end(),
                            FEmpireChatPacket(pack_chat,
                                chatbuf,
                                len,
                                (ch->GetGMLevel() > GM_PLAYER ||
                                 ch->IsEquipUniqueGroup(UNIQUE_GROUP_RING_OF_LANGUAGE)) ? 0 : ch->GetEmpire(),
                                ch->GetMapIndex(), strlen(ch->GetName())));
                }
            }
            break;

        case CHAT_TYPE_PARTY:
            {
                if (!ch->GetParty())
                    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÆÄƼ ÁßÀÌ ¾Æ´Õ´Ï´Ù."));
                else
                {
                    TEMP_BUFFER tbuf;
                    
                    tbuf.write(&pack_chat, sizeof(pack_chat));
                    tbuf.write(chatbuf, len);

                    RawPacketToCharacterFunc f(tbuf.read_peek(), tbuf.size());
                    ch->GetParty()->ForEachOnlineMember(f);
                }
            }
            break;

        case CHAT_TYPE_GUILD:
            {
                if (!ch->GetGuild())
                    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("±æµå¿¡ °¡ÀÔÇÏÁö ¾Ê¾Ò½À´Ï´Ù."));
                else
                    ch->GetGuild()->Chat(chatbuf);
            }
            break;

        default:
            sys_err("Unknown chat type %d", pinfo->type);
            break;
    }

    return (iExtraLen);
}

bu konuda herhangi bi fikri olan ya da elinde düzgün çalışır bayrak level ch gösteren bi sistem var ise onu da ekleyebilirim. bayrak resmi çok da mühim değil.
 
Çözüm
C++:
Genişlet Daralt Kopyala
#if defined(ENABLE_GLOBAL_CHAT)
    len = snprintf(chatbuf, sizeof(chatbuf), "[CH%d][|cFF00FF00Lv. %d|r] %s : %s", g_bChannel, ch->GetLevel(), ch->GetName(), buf);
#else
    len = snprintf(chatbuf, sizeof(chatbuf), "%s : %s", ch->GetName(), buf);
#endif

bu kısmı

C++:
Genişlet Daralt Kopyala
    len = snprintf(chatbuf, sizeof(chatbuf), "%s : %s", ch->GetName(), buf);

şu şekilde eski haline çevirdim sorun düzeldi. sistemi yazan eleman normal chate de bunları ekleyince kafayı yemiş iyice

çözülmüştür konu kapanabilir.
Ben zamanında şunu kurmuştum ve sorunsuz çalışmıştı. Gerekli düzenlemeleri yapabilirsiniz.

uichat.py de import player yoksa ekleyin.

Root>uichat.py arat:

Python:
Genişlet Daralt Kopyala
def __SendShoutChatPacket(self, text):

Komple değiştir:
Python:
Genişlet Daralt Kopyala
def __SendShoutChatPacket(self, text):

        if 1 == len(text):
            self.RunCloseEvent()
            return

        if app.GetTime() < self.lastShoutTime + 15:
            chat.AppendChat(chat.CHAT_TYPE_INFO, locale.CHAT_SHOUT_LIMIT)
            self.__ResetChat()
            return

        if net.GetEmpireID() == 1:
            self.__SendChatPacket(constInfo.Vectors+'|cFFFF0000|HVectors:'+str(player.GetName())+'|h[Shinsoo]-[PM]|h|r'+" [Lv: " + str(player.GetStatus(player.LEVEL)) + "] :|cffff6060 "+text[1:], chat.CHAT_TYPE_SHOUT)
        elif net.GetEmpireID() == 2:
            self.__SendChatPacket(constInfo.Vectors+'|cFFFFA500|HVectors:'+str(player.GetName())+'|h[Chunjo]-[PM]|h|r'+" [Lv: " + str(player.GetStatus(player.LEVEL)) + "] :|cffADFF2F "+text[1:], chat.CHAT_TYPE_SHOUT)
        elif net.GetEmpireID() == 3:
            self.__SendChatPacket(constInfo.Vectors+'|cFF0080FF|HVectors:'+str(player.GetName())+'|h[Jinno]-[PM]|h|r'+" [Lv: " + str(player.GetStatus(player.LEVEL)) + "] :|cff00ccff "+text[1:], chat.CHAT_TYPE_SHOUT)

        self.__ResetChat()

        self.lastShoutTime = app.GetTime()


interfacemodule.py arat:
Python:
Genişlet Daralt Kopyala
def MakeHyperlinkTooltip(self, hyperlink):

En alt kısma ekle:
Python:
Genişlet Daralt Kopyala
elif "Vectors" == type:
                self.OpenWhisperDialog(str(tokens[1]))

constinfo.py arat:

Kod:
Genişlet Daralt Kopyala
CONSOLE_ENABLE = 0

Altına ekle:
Kod:
Genişlet Daralt Kopyala
Vectors = ''

Tab düzenine dikkat edin.
 
Ben zamanında şunu kurmuştum ve sorunsuz çalışmıştı. Gerekli düzenlemeleri yapabilirsiniz.

uichat.py de import player yoksa ekleyin.

Root>uichat.py arat:

Python:
Genişlet Daralt Kopyala
def __SendShoutChatPacket(self, text):

Komple değiştir:
Python:
Genişlet Daralt Kopyala
def __SendShoutChatPacket(self, text):

        if 1 == len(text):
            self.RunCloseEvent()
            return

        if app.GetTime() < self.lastShoutTime + 15:
            chat.AppendChat(chat.CHAT_TYPE_INFO, locale.CHAT_SHOUT_LIMIT)
            self.__ResetChat()
            return

        if net.GetEmpireID() == 1:
            self.__SendChatPacket(constInfo.Vectors+'|cFFFF0000|HVectors:'+str(player.GetName())+'|h[Shinsoo]-[PM]|h|r'+" [Lv: " + str(player.GetStatus(player.LEVEL)) + "] :|cffff6060 "+text[1:], chat.CHAT_TYPE_SHOUT)
        elif net.GetEmpireID() == 2:
            self.__SendChatPacket(constInfo.Vectors+'|cFFFFA500|HVectors:'+str(player.GetName())+'|h[Chunjo]-[PM]|h|r'+" [Lv: " + str(player.GetStatus(player.LEVEL)) + "] :|cffADFF2F "+text[1:], chat.CHAT_TYPE_SHOUT)
        elif net.GetEmpireID() == 3:
            self.__SendChatPacket(constInfo.Vectors+'|cFF0080FF|HVectors:'+str(player.GetName())+'|h[Jinno]-[PM]|h|r'+" [Lv: " + str(player.GetStatus(player.LEVEL)) + "] :|cff00ccff "+text[1:], chat.CHAT_TYPE_SHOUT)

        self.__ResetChat()

        self.lastShoutTime = app.GetTime()


interfacemodule.py arat:
Python:
Genişlet Daralt Kopyala
def MakeHyperlinkTooltip(self, hyperlink):

En alt kısma ekle:
Python:
Genişlet Daralt Kopyala
elif "Vectors" == type:
                self.OpenWhisperDialog(str(tokens[1]))

constinfo.py arat:

Kod:
Genişlet Daralt Kopyala
CONSOLE_ENABLE = 0

Altına ekle:
Kod:
Genişlet Daralt Kopyala
Vectors = ''

Tab düzenine dikkat edin.
ilginize teşekkür ederim. sanırım bu karakterin isminden sonra ekliyor. ben başında olsun bu tarz şeyler istiyorum karışıklık olmaması adına. acaba player.getName i sona yazsak yer mi?
 
Eğer eskisi gibi düzenleyecekseniz ENABLE_GLOBAL_CHAT definesini devredışı bırakın.

Ya da şurayı düzenleyebilirsiniz.
C++:
Genişlet Daralt Kopyala
#if defined(ENABLE_GLOBAL_CHAT)
    len = snprintf(chatbuf, sizeof(chatbuf), "[CH%d][|cFF00FF00Lv. %d|r] %s : %s", g_bChannel, ch->GetLevel(), ch->GetName(), buf);
#else

Mesela leveli kaldırmak isterseniz şöyle olacak;
C++:
Genişlet Daralt Kopyala
#if defined(ENABLE_GLOBAL_CHAT)
    len = snprintf(chatbuf, sizeof(chatbuf), "[CH%d] %s : %s", g_bChannel, ch->GetName(), buf);
#else
 
Eğer eskisi gibi düzenleyecekseniz ENABLE_GLOBAL_CHAT definesini devredışı bırakın.

Ya da şurayı düzenleyebilirsiniz.
C++:
Genişlet Daralt Kopyala
#if defined(ENABLE_GLOBAL_CHAT)
    len = snprintf(chatbuf, sizeof(chatbuf), "[CH%d][|cFF00FF00Lv. %d|r] %s : %s", g_bChannel, ch->GetLevel(), ch->GetName(), buf);
#else

Mesela leveli kaldırmak isterseniz şöyle olacak;
C++:
Genişlet Daralt Kopyala
#if defined(ENABLE_GLOBAL_CHAT)
    len = snprintf(chatbuf, sizeof(chatbuf), "[CH%d] %s : %s", g_bChannel, ch->GetName(), buf);
#else
bunda hemfikiriz. ana sorun normal chatte bile ch level göstermesi. haa bu gösterdiğiniz yer normal chat yeriyse ona bişey diyemem denemem lazım.

test-png.4536
 
Size sadece bir kod ile örnek gösterdim. Birkaç tane daha kod vardır. Onlardan da düzenlemeniz gerekecek.
 
[CH%d][|cFF00FF00Lv. %d|r] %s : %s", g_bChannel, ch->GetLevel(), ch->GetName(), buf örnek olarak bu koda bakarak sizdeki hatayı bulun, büyük ihtimale sıralama veya % ile değeri yazdırırken hata yaptınız, daha önce bende yaşamıştım fakat kesin sonucunu tam olarak hatırlayamıyorum
 
C++:
Genişlet Daralt Kopyala
#if defined(ENABLE_GLOBAL_CHAT)
    len = snprintf(chatbuf, sizeof(chatbuf), "[CH%d][|cFF00FF00Lv. %d|r] %s : %s", g_bChannel, ch->GetLevel(), ch->GetName(), buf);
#else
    len = snprintf(chatbuf, sizeof(chatbuf), "%s : %s", ch->GetName(), buf);
#endif

bu kısmı

C++:
Genişlet Daralt Kopyala
    len = snprintf(chatbuf, sizeof(chatbuf), "%s : %s", ch->GetName(), buf);

şu şekilde eski haline çevirdim sorun düzeldi. sistemi yazan eleman normal chate de bunları ekleyince kafayı yemiş iyice

çözülmüştür konu kapanabilir.
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst