Register for your free account! | Forgot your password?

You last visited: Today at 06:44

  • Please register to post and access all features, it's quick, easy and FREE!

 

[Release]GM Online Liste per Source

Reply
 
Old   #1
 
elite*gold: 0
Join Date: May 2013
Posts: 345
Received Thanks: 600
[Release]GM Online Liste per Source

Hey, hatte vor ein paar Tagen mal wieder diesen Thread gesehen:
[RELEASE]GM Online Liste

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")
könnt ihr euren Messengergruppenname ändern. Ich persönlich würde einfach "Team" reinschreiben.


Serversource:

Ihr öffnet die "messenger_manager.cpp" und sucht nach:

Code:
void MessengerManager::SendLogin(MessengerManager::keyA account, MessengerManager::keyA companion)
und Kommentiert/Löscht das aus:
Code:
if (ch->GetGMLevel() == GM_PLAYER && gm_get_level(companion.c_str(),0,0) != GM_PLAYER)
		return;
Das muss getan werden damit auch ein Spieler über "GM_PLAYER" ein Login sendet.

Weiter gehts mit:
Code:
void MessengerManager::Login(MessengerManager::keyA account)
Die gesamte Funktion ersetzt ihr hiermit:
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)
Komplett ersetzen mit:
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);
}
Nun geht ihr in die
Code:
void MessengerManager::LoadList(SQLMsg * msg)
direkt unter der "Login" Funktion und löscht dort das:
Code:
SendList(account);
Dieses SendList ist nun nämlich mit in der Login drin.


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)
Ihr ersetzt:
Code:
				if (on.connected & MESSENGER_CONNECTED_STATE_ONLINE)
				{
					CPythonMessenger::Instance().OnFriendLogin(char_name);
				}
				else
				{
					CPythonMessenger::Instance().OnFriendLogout(char_name);
				}
durch

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);
					}
				}
Weiter gehts.
Ihr sucht nach
Code:
		case MESSENGER_SUBHEADER_GC_LOGIN:
und macht aus
Code:
CPythonMessenger::Instance().OnFriendLogin(char_name);
Code:
			if (char_name[0] == '[')
			{
				CPythonMessenger::Instance().OnGamemasterLogin(char_name);
			}
			else
			{
				CPythonMessenger::Instance().OnFriendLogin(char_name);
			}
Das selbe bei
Code:
		case MESSENGER_SUBHEADER_GC_LOGOUT:
Dort
Code:
CPythonMessenger::Instance().OnFriendLogout(char_name);
durch
Code:
			if (char_name[0] == '[')
			{
				CPythonMessenger::Instance().OnGamemasterLogout(char_name);
			}
			else
			{
				CPythonMessenger::Instance().OnFriendLogout(char_name);
			}
ersetzen.


Öffnet die "PythonMessenger.cpp" und sucht:
Code:
void CPythonMessenger::OnFriendLogout(const char * c_szKey)
darunter fügt ihr das hinzu:
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));
}
Nun die "PythonMessnger.h" öffnen und suchen:
Code:
MESSENGER_GRUOP_INDEX_GUILD,
darünter fügt ihr hinzu:
Code:
MESSENGER_GRUOP_INDEX_GM,
Nun noch ein ganz kleines Stück weiter unten bei:
Code:
void OnFriendLogout(const char * c_szKey);
noch das anhängen:

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



.Sanii is offline  
Thanks
12 Users
Old   #2
 
elite*gold: 161
Join Date: Dec 2014
Posts: 29
Received Thanks: 39
Nette Sache!


.ViBeZ™ is offline  
Thanks
1 User
Old   #3

 
elite*gold: 100
Join Date: Sep 2009
Posts: 8,094
Received Thanks: 2,729
Quote:
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.
Du lässt also keienrlei Kritik zu ? Wie willst du dich dann verbessern ?
.Marcel' is offline  
Thanks
2 Users
Old   #4
 
elite*gold: 0
Join Date: May 2013
Posts: 345
Received Thanks: 600
Ich lasse Kritik sehrwohl zu, wenn sie angebracht und konstruktiv ist.

Das mit dem "dr. dipl. prof." war an die Leute gemeint, die alle immer gleich nieder machen, nur weil sie z.B :

Code:
if (respekt == 0)
	flame_like_a_vollidiot();
statt:

Code:
if (respekt == 0)
{
  flame_like_a_vollidiot();
}
machen. Mag sein, dass jeder seinen Codestil hat, Verbesserungsvorschläge sind immer gern gesehen, aber ich lese in zu viele Threads direkt geflame, dass ja alles viel besser geht etc. Hat ich einfach kein Turn drauf ^.^


.Sanii is offline  
Thanks
1 User
Old   #5
 
elite*gold: 50
Join Date: Mar 2013
Posts: 2,393
Received Thanks: 1,602
So wir haben den Code mal etwas korrigiert, sollte jetzt funktionieren! :P
.Inya is offline  
Thanks
1 User
Old   #6
 
elite*gold: 0
Join Date: Sep 2010
Posts: 73
Received Thanks: 31
"m_GamemasterNameMap" Is not defined :x
galetlefrancais is offline  
Old   #7
 
elite*gold: 50
Join Date: May 2011
Posts: 262
Received Thanks: 970
You have to define it in pythonmessenger.h.

Find this:
Code:
typedef std::map<std::string, BYTE> TGuildMemberStateMap;
Add this under:
Code:
typedef std::map<std::string> TGamemasterNameMap;
Now search this:
Code:
TGuildMemberStateMap m_GuildMemberStateMap;
And define the new map:
Code:
TGamemasterNameMap m_GamemasterNameMap
That's all.
xP3NG3Rx is offline  
Thanks
2 Users
Old   #8
 
elite*gold: 65
Join Date: Oct 2014
Posts: 100
Received Thanks: 153
Schon verbaut, vielen Dank.
SA_Yolo is offline  
Old   #9
 
elite*gold: 85
Join Date: Jan 2014
Posts: 26
Received Thanks: 1
With no lag?
.Fr3zy94™ is offline  
Old   #10
 
elite*gold: 0
Join Date: Sep 2010
Posts: 73
Received Thanks: 31
Thanks xP3NG3Rx, I don't know why I don't do this.

Less lag than the actual lua check. ^^
galetlefrancais is offline  
Old   #11
 
elite*gold: 50
Join Date: Mar 2013
Posts: 2,393
Received Thanks: 1,602
Quote:
Originally Posted by Helpering View Post
With no lag?
It extends the friendlist system. So it shouldnt create any laggs
.Inya is offline  
Old   #12
 
elite*gold: 0
Join Date: Aug 2012
Posts: 943
Received Thanks: 86
hab beim client compilen folgende fehler:
1 IntelliSense: Zu wenig Argumente für "Klassenvorlage "std::map"". c:\Server\client_source_clean\source\UserInterface \PythonMessenger.h 8

Fehler 2 error C2976: "std::map": Nicht genügend template-Argumente. c:\server\client_source_clean\source\userinterface \PythonMessenger.h 8
thespeedyy is offline  
Old   #13
 
elite*gold: 0
Join Date: Aug 2012
Posts: 943
Received Thanks: 86
puuush
thespeedyy is offline  
Old   #14
 
elite*gold: 0
Join Date: Jan 2010
Posts: 596
Received Thanks: 440
Quote:
Originally Posted by thespeedyy View Post
hab beim client compilen folgende fehler:
1 IntelliSense: Zu wenig Argumente für "Klassenvorlage "std::map"". c:\Server\client_source_clean\source\UserInterface \PythonMessenger.h 8

Fehler 2 error C2976: "std::map": Nicht genügend template-Argumente. c:\server\client_source_clean\source\userinterface \PythonMessenger.h 8
hab gleichen fehler.
#Kajo is offline  
Old   #15

 
elite*gold: 386
Join Date: Mar 2008
Posts: 2,518
Received Thanks: 1,594
Ist daas nur bei mir so, oder gibt es auch bei anderen seit dem einbauen Probleme mit der normalen freundesliste?

Grüße


Benhero is offline  
Reply



« Previous Thread | Next Thread »

Similar Threads
Dragon Ball Online Release Source
Code Source of Dragon Ball Online , can Anyone make Emulator for it ? ...
8 Replies - Private Server - Discussions / Questions
[RELEASE]GM Online Liste
Hallo leute als erstes möchte ich sagen, dass ich sowas nirgenswo finden konnte! Also lasst das geflame thx ^_^ Ich möchte euch jetzt gar nicht...
19 Replies - Metin2 PServer Guides & Strategies
[Release] Revelation Online Source 2012!
Hello Everyone my name is Nemiic, I was a Following Owner on Revelation Online! I'm gonna release this source because i feel like giving to the...
48 Replies - CO2 PServer Guides & Releases
[BIG RELEASE] Original TQ Conquer Online Source
.
3 Replies - CO2 PServer Guides & Releases



All times are GMT +1. The time now is 06:44.


Powered by vBulletin®
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Abuse
Copyright ©2017 elitepvpers All Rights Reserved.