[Source Problem] Klassen

02/26/2012 14:24 Unleashed!#1
Hallo,
Ich habe im Moment ein Problem mit der Klasse CMover.
Ich habe die Variable dwGlow(Public DWORD) in der Klasse CMover hinzugefügt.
(Mover.h)
Code:
public:
	DWORD			m_dwGlow;

	void			SetGlow( DWORD dwGlow ){ this->m_dwGlow = dwGlow; }
	DWORD			GetGlow(){ return this->m_dwGlow; }
Diese habe ich mit dem Befehl "/ChangeGlow <Farbe>" geändert.
(FuncTextCMD.cpp)
Code:
BOOL TextCmd_ChangeGlow( CScanner& scanner )
{
#ifdef __WORLDSERVER
	CUser* pUser = (CUser*)scanner.dwValue;
	CMover *pMover = pUser;

	scanner.GetToken();

	if( scanner.Token == "red" )
	{
		pMover->SetGlow( GLOW_RED );
		pUser->AddText("Glow changed to Red!");
	}
	else 
	{
		pMover->SetGlow( GLOW_NORMAL );
		pUser->AddText("Glow changed to Default!");
	}

	if( pMover->GetGlow() == GLOW_RED ) //Wert von dwGlow zum Test ausgeben.
		pUser->AddText( "Glow is now Red." );
	else
		pUser->AddText( "Glow is now default." );

	return TRUE;
#else	// __WORLDSERVER
	return TRUE;
#endif	// __WORLDSERVER
}
Anschließen lasse ich die Variable wieder auslesen.
(Mover.cpp)
Code:
        //CMover* pMover = GetActiveMover();
	CMover* pMover = (CMover*)this;
        CString str;

	if( pMover->GetGlow() == GLOW_RED )
		dwSfx = XI_GEN_ITEM_SETITEM10_RED;
	else
		dwSfx = XI_GEN_ITEM_SETITEM10;

	str.Format( _T("%08X"), pMover->GetGlow() );
	pMover->DialogOut( str ); //Wert von dwGlow zum Test einmal ausgeben lassen.
Hier wird sowohl bei GetActiveMover(); als auch (CMover*)this; immer der Standard Wert von dwGlow ausgelesen.

Was muss ich daran ändern, dass immer der Wert des Movers, den ich gerade abfrage ausgegeben wird?

MFG Unleashed!
02/26/2012 15:25 Flyff_Service#2
Ist der 2. Part Clientside?
02/26/2012 20:10 Unleashed!#3
Jo, ist das rendern der Set SFX.
02/26/2012 20:39 yannickFlyff#4
private:
DWORD m_dwGlow;
public:
void SetGlow( DWORD dwGlow ){ m_dwGlow = dwGlow; }
DWORD GetGlow(){ return m_dwGlow; }
02/26/2012 20:51 Flyff_Service#5
Warum änderst du dann den Mover im Worldserver ohne dem Client mitzuteilen, dass es eine Änderung vorhanden ist? Ich würde den Command in den Client verfrachten.

@yannick:
Dein Code macht genau das gleiche...
02/28/2012 21:37 Unleashed!#6
So, danke an Flyff_Service und yannik, habt mir echt geholfen. Jetzt muss ich aber irgendwie noch die Variable m_dwGlow an die anderen Client senden (ist im WorldServer und in dem Client, auf dem der Befehl benutzt wird schon richtig), so dass auch die meinen Glow sehen, habe jetzt gehört, man müsse das "Serialisiern" also habe ich mit etwas hilfe von Jopsi in der ObjSerializeOpt.cpp folgende Zeilen geaddet:
Code:
ar << m_dwGlow;
ar >> m_dwGlow;
m_dwGlow =
Halt immer das, was mit der Variable m_dwAuthentication auch gemacht wurde.
Dann habe ich die Funktion SetItemSFX( int nAbilityOption ) zu dem geändert:
Code:
SetItemSFX( int nAbilityOption, DWORD dwGlow
Und habe dann noch in der CMover::ProcessETC()
Das hier geaddet:
Code:
void CMover::ProcessETC()
{
	int nAbilityOption	= GetSetItemClient();
#ifdef __GLOW_CHANGE
	DWORD dwGlow = m_dwGlow;
#endif
	if( nAbilityOption >= 3 && !(m_dwFlag & MVRF_SETITEMSFX))
    {
		m_dwFlag |= MVRF_SETITEMSFX;
		CreateAbilityOption_SetItemSFX( nAbilityOption
#ifdef __GLOW_CHANGE
		, dwGlow
#endif
		);
	}
Mein Glow wird in anderen Clienten aber immer noch blau angezeigt :/
Was muss ich da sonst noch ändern, damit das bei den anderen auch übernommen wird, also die Variable an die restlichen Clients gesendet wird?

MFG Unleashed!