[Source Frage]Items

12/26/2011 14:32 Unleashed!#1
Ich habe 2 Fragen:
Ich würde gerne Code ausführen lassen, wenn ich ein bestimmtes Item einsetze.
z.B. : Item X wird eingesetz, das ausgewählte Mob wird getötet.
Wo muss ich definieren, welches Item mit welcher Funktion ausgeführt wird ?
Und 2. wie kann ich dann das Mob, dass gerade angewählt ist, töten ?

MFG Unleashed!
12/26/2011 15:35 Jopsi332#2
moverskill.cpp
12/26/2011 19:50 yannickFlyff#3
Quote:
Originally Posted by Jopsi332 View Post
moverskill.cpp
Dödel gib ihn doch nich soviel information.. nacher hilfst ihm noch

Moverskill.cpp

Funktion: CMover::DoUseItem()

unter:

CItemBase* pItemBase = GetItemId( dwId );
if( IsUsableItem( pItemBase ) == FALSE )
return FALSE;

packst du einfach:

if( pItemBase->m_dwItemId == DEINE_ITEM_NAME_DEFINIERUNG )
{
CMover* pVictim = prj.GetMover( m_idTargeter );
if( IsValidObj( pVictim ) ) pVictim->Dodie( ((Cctrl*)this) );
}


müsste klappen ka.
12/26/2011 21:31 Unleashed!#4
Code:
pVictim->Dodie( ((Cctrl*)this) );
Hm ? Was soll das Cctrl* ?
Dazu sagt er das :
Code:
Source\_Common\MoverSkill.cpp(1325): error C2065: 'Cctrl' : undeclared identifier
Habs selber gefunden, hab das (Cctrl*)this durch (Cctrl*)pVictim ersetzt.

Edit: So, habe es jetzt mit (Cctrl*)pVictim ersetzt, wenn ich die Scroll einsetze, stirbt das Mob allerdings nicht, und ich kann danach keine Mobs mehr angreifen.
12/26/2011 21:49 srslynub#5
Quote:
Originally Posted by Unleashed! View Post
Code:
pVictim->Dodie( ((Cctrl*)this) );
Hm ? Was soll das Cctrl* ?
Dazu sagt er das :
Code:
Source\_Common\MoverSkill.cpp(1325): error C2065: 'Cctrl' : undeclared identifier
Habs selber gefunden, hab das (Cctrl*)this durch (Cctrl*)pVictim ersetzt.

Edit: So, habe es jetzt mit (Cctrl*)pVictim ersetzt, wenn ich die Scroll einsetze, stirbt das Mob allerdings nicht, und ich kann danach keine Mobs mehr angreifen.
Die Klasse heißt CCtrl, nicht Cctrl.
12/26/2011 22:00 Unleashed!#6
Danke, habe es schon selber gefunden mit der Klasse.
Aber wenn ich das jetzt so einfüge:
Code:
		CMover* pVictim = prj.GetMover( m_idTargeter );
		if( IsValidObj( pVictim ) )
			pVictim->DoDie( ( (CCtrl*)pVictim ) );
Wird zwar der Code den ich danach noch habe ausgeführt (Ich bekomme die Nachricht ausgegeben, die danach ausgegeben werden soll mittels AddText), das Monster läuft aber weiterhin rum. Ich kann keine Monster mehr angreifen und werde von Aggro Monstern nicht angegriffen.
Weiß einer was das sein kann ? :D
12/26/2011 22:19 yannickFlyff#7
mach mal darunter

if( m_idTargeter == m_nIdPlayer ) AddText(bla);

oder benutzt mal anstatt m_idTargeter das hier: m_idSetTarget
12/26/2011 22:29 Unleashed!#8
Habs mal etwas umgeändert, sonst hätte das AddText nicht funktioniert:
Code:
if( m_idTargeter == m_nIdPlayer )((CUser*) this)->AddText("Failed.");
Jetzt findet er aber , m_nIdPlayer nicht.
Code:
Source\_Common\MoverSkill.cpp(1337): error C2065: 'm_nIdPlayer' : undeclared identifier
12/27/2011 00:14 Achileus#9
Quote:
Originally Posted by Unleashed! View Post
Habs mal etwas umgeändert, sonst hätte das AddText nicht funktioniert:
Code:
if( m_idTargeter == m_nIdPlayer )((CUser*) this)->AddText("Failed.");
Jetzt findet er aber , m_nIdPlayer nicht.
Code:
Source\_Common\MoverSkill.cpp(1337): error C2065: 'm_nIdPlayer' : undeclared identifier
versuch mal statt m_nIdPlayer m_IdPlayer