
Und ich dachte mir, versuchst du mal das per Source zu regeln. Et viola, meine geringen C++ Kentnisse haben ausgereicht mir ein wenig Hilfe von Inya.
Also fangen wir an:
Python:
Befolgt Schritt 6 bis 10 aus dem anderem Thread damit ihr die Group im Messenger Window habt.
Bei Schritt 9. unter
Code:
self.SetName("Symeria2-Teamler")
Serversource:
Ihr öffnet die "messenger_manager.cpp" und sucht nach:
Code:
void MessengerManager::SendLogin(MessengerManager::keyA account, MessengerManager::keyA companion)
Code:
if (ch->GetGMLevel() == GM_PLAYER && gm_get_level(companion.c_str(),0,0) != GM_PLAYER) return;
Weiter gehts mit:
Code:
void MessengerManager::Login(MessengerManager::keyA account)
Code:
void MessengerManager::Login(MessengerManager::keyA account)
{
if (m_set_loginAccount.find(account) != m_set_loginAccount.end())
return;
SQLMsg* msg;
msg = DBManager::instance().DirectQuery("SELECT mName FROM common.gmlist%s", get_table_postfix());
if(msg->uiSQLErrno != 0) {
return;
}
MYSQL_ROW row;
while ((row = mysql_fetch_row(msg->Get()->pSQLResult))) {
m_Relation[account.c_str()].insert(row[0]);
};
DBManager::instance().FuncQuery(std::bind1st(std::mem_fun(&MessengerManager::LoadList), this),
"SELECT account, companion FROM messenger_list%s WHERE account='%s'", get_table_postfix(), account.c_str());
m_set_loginAccount.insert(account);
SendList(account.c_str());
if (std::string(account)[0] == '[')
{
for (std::set<keyT>::iterator it = m_set_loginAccount.begin(); it != m_set_loginAccount.end(); ++it)
{
SendLogin(*it, account);
}
}
}
Code:
void MessengerManager::Logout(MessengerManager::keyA account)
Code:
void MessengerManager::Logout(MessengerManager::keyA account)
{
if (m_set_loginAccount.find(account) == m_set_loginAccount.end())
return;
m_set_loginAccount.erase(account);
std::set<MessengerManager::keyT>::iterator it;
for (it = m_InverseRelation[account].begin(); it != m_InverseRelation[account].end(); ++it)
{
SendLogout(*it, account);
}
if (std::string(account)[0] == '[')
{
for (std::set<keyT>::iterator it = m_set_loginAccount.begin(); it != m_set_loginAccount.end(); ++it)
{
SendLogout(*it, account);
}
}
std::map<keyT, std::set<keyT> >::iterator it2 = m_Relation.begin();
while (it2 != m_Relation.end())
{
it2->second.erase(account);
++it2;
}
m_Relation.erase(account);
//m_map_stMobile.erase(account);
}
Code:
void MessengerManager::LoadList(SQLMsg * msg)
Code:
SendList(account);
Mit dem was ihr jetzt hinzugefügt habt, wird die gesamte "gmlist" an eure m_Relation angehängt (ergo. "Beziehungen").
Clientsource:
Ihr öffnet die "PythonNetworkSteamPhaseGame.cpp" und sucht nach:
Code:
if (on.connected & MESSENGER_CONNECTED_STATE_ONLINE)
Code:
if (on.connected & MESSENGER_CONNECTED_STATE_ONLINE)
{
CPythonMessenger::Instance().OnFriendLogin(char_name);
}
else
{
CPythonMessenger::Instance().OnFriendLogout(char_name);
}
Code:
if (on.connected & MESSENGER_CONNECTED_STATE_ONLINE)
{
if (char_name[0] == '[')
{
CPythonMessenger::Instance().OnGamemasterLogin(char_name);
}
else
{
CPythonMessenger::Instance().OnFriendLogin(char_name);
}
}
else
{
if (char_name[0] == '[')
{
CPythonMessenger::Instance().OnGamemasterLogout(char_name);
}
else
{
CPythonMessenger::Instance().OnFriendLogout(char_name);
}
}
Ihr sucht nach
Code:
case MESSENGER_SUBHEADER_GC_LOGIN:
Code:
CPythonMessenger::Instance().OnFriendLogin(char_name);
Code:
if (char_name[0] == '[')
{
CPythonMessenger::Instance().OnGamemasterLogin(char_name);
}
else
{
CPythonMessenger::Instance().OnFriendLogin(char_name);
}
Code:
case MESSENGER_SUBHEADER_GC_LOGOUT:
Code:
CPythonMessenger::Instance().OnFriendLogout(char_name);
Code:
if (char_name[0] == '[')
{
CPythonMessenger::Instance().OnGamemasterLogout(char_name);
}
else
{
CPythonMessenger::Instance().OnFriendLogout(char_name);
}
Öffnet die "PythonMessenger.cpp" und sucht:
Code:
void CPythonMessenger::OnFriendLogout(const char * c_szKey)
Code:
void CPythonMessenger::OnGamemasterLogin(const char * c_szKey/*, const char * c_szName*/)
{
m_GamemasterNameMap.insert(c_szKey);
if (m_poMessengerHandler)
PyCallClassMemberFunc(m_poMessengerHandler, "OnLogin", Py_BuildValue("(is)", MESSENGER_GRUOP_INDEX_GM, c_szKey));
}
void CPythonMessenger::OnGamemasterLogout(const char * c_szKey)
{
m_GamemasterNameMap.insert(c_szKey);
if (m_poMessengerHandler)
PyCallClassMemberFunc(m_poMessengerHandler, "OnLogout", Py_BuildValue("(is)", MESSENGER_GRUOP_INDEX_GM, c_szKey));
}
Code:
MESSENGER_GRUOP_INDEX_GUILD,
Code:
MESSENGER_GRUOP_INDEX_GM,
Code:
void OnFriendLogout(const char * c_szKey);
Code:
void OnGamemasterLogin(const char * c_szKey); void OnGamemasterLogout(const char * c_szKey);
So das sollte eigendlich alles gewesen sein!
Wenn noch was fehlt oder failt einfach bescheid geben.
P.s: Ich weiß über die '[' zu Filtern ist nicht so cool, aber der einfachste weg. Bemängelt meinen Codestil ruhig, juckt mich nicht ihr ganzen Dr. Dipl. Professoren der Informatik hier.
Viel Spaß damit!
Danke an:
Inya für Hilfe beim Senden der Logins/Logouts
Symeria2 für den Python Teil






