Çö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
67
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.PNG


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

chat:
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++:
#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++:
    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:
def __SendShoutChatPacket(self, text):

Komple değiştir:
Python:
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:
def MakeHyperlinkTooltip(self, hyperlink):

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

constinfo.py arat:

Kod:
CONSOLE_ENABLE = 0

Altına ekle:
Kod:
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:
def __SendShoutChatPacket(self, text):

Komple değiştir:
Python:
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:
def MakeHyperlinkTooltip(self, hyperlink):

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

constinfo.py arat:

Kod:
CONSOLE_ENABLE = 0

Altına ekle:
Kod:
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?
 
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?
Sistemin çalışma şekli şu şekilde;
1.jpg
 
Eğer eskisi gibi düzenleyecekseniz ENABLE_GLOBAL_CHAT definesini devredışı bırakın.

Ya da şurayı düzenleyebilirsiniz.
C++:
#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++:
#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++:
#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++:
#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++:
#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++:
    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