[SOURCE] Fragen

06/11/2011 23:43 /-/µR€#1
Hey elitepvpers,
ich hätte da mal 2 Source Fragen.

1 Frage:
Wie kann man den Befehl "/out" in "/tschö" umändern?

2. Frage:
Wie kann man es einstellen, dass wenn man "/out" macht, beim gegickten Spieler dann eine Nachricht erscheint; "Tschöö :D".?

Wenn mir erfolgreich weiterhilft, bekommt von mir je Frage 5 E*Gold
06/12/2011 00:50 ~Product~#2
1.
Code:
	ON_TEXTCMDFUNC( TextCmd_outall,                "tschö",            "tschö",         "Á¢¼ÓÀÚ¼ö",       "Á¢¼ÓÀÚ¼ö",TCM_BOTH,   AUTH_ADMINISTRATOR    , "Á¢¼ÓÀÚ Ä«¿îÆ®" )
2.

Quote:
BOOL TextCmd_outall( CScanner& scanner )
{
#ifdef __WORLDSERVER
g_DPCoreClient.SendSystem( "Es wurden gerade alle gekickt zur Sicherheit - Es findet eine Wartung statt" );
g_UserMng.RemoveAllUsers();
#endif // __WORLDSERVER
return TRUE;
}
06/12/2011 01:59 rädsun#3
Das Ganze muss in der FuncText.cpp im Source bearbeitet werden.
Bzgl. 1.) musst du eigentlich nur nach
Quote:
ON_TEXTCMDFUNC( TextCmd_outall,
suchen und das 1 + 2te "outall" in das beliebige Wort ändern.
Die erste Bezeichnung gibt an, wie der Befehl unter "/" inGame heißt, das zweite Wort ist der Kürzel, du kannst also auch beim zweiten einfach "bb" reinschreiben, dann heißt der Befehl mit Kürzel im Endeffekt "/bb USERNAME".

Zu 2.) musst du, wie Product bereits schrieb den Befehl in das was er bereits gepostet hat ändern. Also nicht einfach reinklatschen, sondern die bereits vorhandenen Zeilen zum Outall Befehl ändern. Nur eben in
Quote:
BOOL TextCmd_outall( CScanner& scanner )
{
#ifdef __WORLDSERVER
g_DPCoreClient.SendSystem( "Tschöö" );
g_UserMng.RemoveAllUsers();
#endif // __WORLDSERVER
return TRUE;
}
06/12/2011 15:09 /-/µR€#4
das ist aber /outall, ich will nur /out
06/12/2011 15:18 rädsun#5
Dann bearbeite doch eben einfach in der FuncText.cpp die Out funktion.

Quote:
ON_TEXTCMDFUNC( TextCmd_Out, "tschö", "tschö", "ÅðÃâ", "ÅðÃâ", TCM_SERVER, AUTH_GAMEMASTER2 , "ÅðÃâ" )
und dann eben noch bei der Funktion der /out Funktion das hier einfügen:
Quote:
g_DPCoreClient.SendSystem( "Tschöö" );
Also einfach nach
Quote:
BOOL TextCmd_out( CScanner& scanner )
suchen und dort eben dann die Systemshout Info Funktion einfügen.
06/12/2011 17:05 /-/µR€#6
hm also das mit dem befelh tschö geht nicht, aber das da "Tschoö" steht schon...
abeeer
JEDER sieht dann das, wie macht man das dass nur der jenige das sieht der gekickt wurde?
oder zumindest da steht:
"Tschö, CHARNAME" ?
?
06/12/2011 19:59 Krustenkäse#7
ok das, was du willst ist etwas komplizierter:

Wenn du diese Funktion aufrufst ( TextCMD_out ), dann schickt der LoginServer ein Packet und schliest dann die Verbindung...
Im Endeffeckt landet man dann bei dieser Funktion in der DPLoginClient.cpp:
Code:
void CDPLoginClient::SysMessageHandler( LPDPMSG_GENERIC lpMsg, DWORD dwMsgSize, DPID idFrom )
{
    switch( lpMsg->dwType )
    {
        case DPSYS_CREATEPLAYERORGROUP:
            m_fConn        = TRUE;
            break;

        case DPSYS_DESTROYPLAYERORGROUP:
            {
                #ifdef __INFO_SOCKLIB0516
                {
                    LPDPMSG_DESTROYPLAYERORGROUP lpDestroyPlayer    = (LPDPMSG_DESTROYPLAYERORGROUP)lpMsg;
                    m_lError = lpDestroyPlayer->dwFlags;
                }
                #endif



                CNetwork::GetInstance().OnEvent( LOGIN_DISCONNECT );

                [COLOR=Red]g_WndMng.PutString( "Tschö", NULL, 0xff00ff00 );[/COLOR]

                m_fConn        = FALSE;
                g_DPlay.DeleteDPObject();

                if( m_bShowDisconnectMsg )
                    g_WndMng.OpenMessageBoxUpper( prj.GetText(TID_DIAG_0023), MB_OK, TRUE );    //¼*¹ö·ÎºÎÅÍ Á¢¼ÓÀÌ ÇØÁ¦µÇ¾ú½À´Ï´Ù.          
                m_bShowDisconnectMsg = TRUE;
                break;
            }
    }
}
Das würde dir dann einen Text ausgeben, wenn die Verbindung unterbrochen wird ( Kick, als auch TimeOut )
So denke ich jedenfalls dass das funktioniert, habe es aber noch nicht getestet^^
06/12/2011 20:46 Deda94#8
Genau gebt ihm C&P Ready Code... <.<
06/12/2011 23:15 /-/µR€#9
hm @krustenkäse:
geht lieder nicht
da steht dann: "error C2228: left of '.PutString' must have /class/struct/union type type is "unknown.type"

was ist der fehler?
06/12/2011 23:26 XSedrikX#10
omg ihr verwirrt mich <3 xDD! Also welches war jetzt denn das richtige?
06/13/2011 09:49 Krustenkäse#11
Quote:
Originally Posted by /-/µR€ View Post
hm @krustenkäse:
geht lieder nicht
da steht dann: "error C2228: left of '.PutString' must have /class/struct/union type type is "unknown.type"

was ist der fehler?
Du musst etwas falsch abgeschrieben haben :p , denn bei mir funktioniert alles
Post doch mal deine Funktion^^
06/13/2011 12:25 /-/µR€#12
joa ich hab da schon mehreres versucht, kam aber immer auf das selbe ergebniss; endweder es kam ein error, oder es funktionierte nicht so ganz wie ich es wollte.

Quote:
#ifdef __WORLDSERVER
// TCHAR lpszPlayer[MAX_PLAYER];
scanner.GetToken();

CUser* pUser = (CUser*)scanner.dwValue;
g_WndMng.PutString( "Tschö", NULL, 0xff00ff00 );
if( strcmp( pUser->GetName(), scanner.Token) )
06/13/2011 13:58 Krustenkäse#13
LOL so geht das natürlich nicht...
g_WndMng ist die "Oberflächenklasse" der neuz.exe und kann im Worldserver nicht verwendet werden.
Desweiteren war diese g_WndMng.PutString( "Tschö", NULL, 0xff00ff00 ); für die Funktion die ich genannt habe gedacht, also in der DPLoginClient.cpp und hatte nichts mit der FuncTextCMD zu tun
Wenn du die Ausgabe in der FuncTextCMD haben willst und das vom Worldserver aus steuern willst, dann musst du pUser->AddText("Tschö") verwenden.
06/13/2011 19:40 /-/µR€#14
nochmal vielen dank, abeeer,
wenn man jemanden kickt, bekomm NUR ich die nachricht "tschö" und nicht der andere .. :/ wie stellt man des ein das der gekickte spieler das sieht? O:
06/13/2011 19:47 Jackygirl#15
das wird ja kompilziert ;)

da muss man ja in der kickanweisung den textcmd geben und dann 5sek später den kickbefehl,
damit der entsprechende user das auch noch lesen kann...oder nicht?!