antiblock
https://arwen2.global/
  • Chatbox

    You don't have permission to chat.
    Load More
Sign in to follow this  
M2Kingdoms

/messenger_auth e player_name fix

1 post in this topic

Boa tarde a todos!

 

Boas, existe um comando que no servidor que  é o /messenger_auth t player_name que por consequência envia vários erros causando assim a sua desconectação causando o servidor offline. Claro que nem todos sabem disto aqueles (paneleirados nerds que só desgraçam a vida as pessoas e acham isto bueeeeda fixe) por exemplo. 

Mas para dar um fix basta seguir direito o tópico em baixo: 

 

Vamos procurar por :

no messenger_manager.cpp:

 

Code (Text):
void MessengerManager::AuthToAdd(MessengerManager::keyA account, MessengerManager::keyA companion, bool bDeny)

 

E Substituem por este código:

 

Code (Text):
bool MessengerManager::AuthToAdd(MessengerManager::keyA account, MessengerManager::keyA companion, bool bDeny)
{
    DWORD dw1 = GetCRC32(companion.c_str(), companion.length());
    DWORD dw2 = GetCRC32(account.c_str(), account.length());

    char buf[64];
    snprintf(buf, sizeof(buf), "%u:%u", dw1, dw2);
    DWORD dwComplex = GetCRC32(buf, strlen(buf));

    if (m_set_requestToAdd.find(dwComplex) == m_set_requestToAdd.end())
    {
        sys_log(0, "MessengerManager::AuthToAdd : request not exist %s -> %s", companion.c_str(), account.c_str());
        return false;
    }

    m_set_requestToAdd.erase(dwComplex);

    if (!bDeny)
    {
        AddToList(companion, account);
        AddToList(account, companion);
    }
    return true;
}

 

Depois no ficheiro cmd_general.cpp procuram por:

Code (Text):
ACMD(do_messenger_auth)

 

E substitui por:

Code (Text):
ACMD(do_messenger_auth)
{
    if (ch->GetArena())
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장에서 사용하실 수 없습니다."));
        return;
    }

    char arg1[256], arg2[256];
    two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));

    if (!*arg1 || !*arg2)
        return;

    char answer = LOWER(*arg1);
    bool bIsDenied = answer != 'y';
    bool bIsAdded = MessengerManager::instance().AuthToAdd(ch->GetName(), arg2, bIsDenied); // DENY
    if (bIsAdded && bIsDenied)
    {
        LPCHARACTER tch = CHARACTER_MANAGER::instance().FindPC(arg2);

        if (tch)
            tch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님으로 부터 친구 등록을 거부 당했습니다."), ch->GetName());
    }

}

 

Agora no messenger_manager.h
 

Code (Text):
void    AuthToAdd(keyA account, keyA companion, bool bDeny);

 

Substituem por:
 

Code (Text):
bool    AuthToAdd(keyA account, keyA companion, bool bDeny);

 

--- Autor: Mr. Tiger

-- Abraço!

Tópico original:

 

 

 


 

Deci sa incepem ...
Exista o comanda in server /messenger_auth t nume_player care ii printeaza playerului nume_player un mesaj in chat "a respins cererea de prietenie " .
Asta o puteti pune intr-un modul python care o repeta de 1000/s si deconecteaza jucatorul.(sau ar trebui sa il deconecteze :laugh ).
Acum rezolvarea:
In messenger_manager.cpp cauta functia :

 

Code (Text):
void MessengerManager::AuthToAdd(MessengerManager::keyA account, MessengerManager::keyA companion, bool bDeny)

Si inlocuieste-o cu :

Code (Text):
bool MessengerManager::AuthToAdd(MessengerManager::keyA account, MessengerManager::keyA companion, bool bDeny)
{
    DWORD dw1 = GetCRC32(companion.c_str(), companion.length());
    DWORD dw2 = GetCRC32(account.c_str(), account.length());

    char buf[64];
    snprintf(buf, sizeof(buf), "%u:%u", dw1, dw2);
    DWORD dwComplex = GetCRC32(buf, strlen(buf));

    if (m_set_requestToAdd.find(dwComplex) == m_set_requestToAdd.end())
    {
        sys_log(0, "MessengerManager::AuthToAdd : request not exist %s -> %s", companion.c_str(), account.c_str());
        return false;
    }

    m_set_requestToAdd.erase(dwComplex);

    if (!bDeny)
    {
        AddToList(companion, account);
        AddToList(account, companion);
    }
    return true;
}

Apoi in cmd_general.cpp cauta comanda :

Code (Text):
ACMD(do_messenger_auth)

si inlocuieste-o cu :

Code (Text):
ACMD(do_messenger_auth)
{
    if (ch->GetArena())
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장에서 사용하실 수 없습니다."));
        return;
    }

    char arg1[256], arg2[256];
    two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));

    if (!*arg1 || !*arg2)
        return;

    char answer = LOWER(*arg1);
    bool bIsDenied = answer != 'y';
    bool bIsAdded = MessengerManager::instance().AuthToAdd(ch->GetName(), arg2, bIsDenied); // DENY
    if (bIsAdded && bIsDenied)
    {
        LPCHARACTER tch = CHARACTER_MANAGER::instance().FindPC(arg2);

        if (tch)
            tch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님으로 부터 친구 등록을 거부 당했습니다."), ch->GetName());
    }

}

Edit:
In messenger_manager.h cautati:
 

Code (Text):
void    AuthToAdd(keyA account, keyA companion, bool bDeny);

Si modificati in:
 

Code (Text):
bool    AuthToAdd(keyA account, keyA companion, bool bDeny);

Sursa: Mr. Tiger 

 

 

Edited by LynM2 (see edit history)

Share this post


Link to post
Share on other sites
antiblock
Elveron

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this