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;
burda garibime giden ise normal chatte bile ch level göstermesi. input_main.cpp dosyamın chat fonksiyonu ise şöyle;
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.
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;
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.