Pet's Donaten lassen?

03/03/2014 16:02 Kiseku#16
Quote:
Originally Posted by ©ross View Post
//edid @Arctic: Und was bringt den Spieler an einem Rechtsklick um???? Ungleiche Mausabnutzung oder was? xDD
ich denke mal das es die Switcher im Gw sehr nerven würde wenn man das so macht :D
03/03/2014 16:30 ©ross#17
Dann müssen die Switcher damit leben :P Wenn man es von anfang an in einen Server bauen würde kämen die damit auch klar^^

@Native: Einfach mal gucken - würde den Befehl, wie bereits gesagt, kopieren sodass du ihn 2x in der FuncText hast.

Dann einfach Probieren, mehr als Kaputtmachen kannst du nix :D
03/03/2014 17:27 NativeGermany#18
wie denn ich verstehe kaum / gar nichts vom source ...
Code:
BOOL TextCmd_Pet1( CScanner & s )
{
	// /pet 1 100
#ifdef __WORLDSERVER
	CUser* pUser	= (CUser*)s.dwValue;
	s.GetToken();
	if( s.tok == FINISHED )
		return TRUE;
#if __VER >= 11 // __SYS_PLAYER_DATA
	DWORD idPlayer	= CPlayerDataCenter::GetInstance()->GetPlayerId( s.token );
#else	// __SYS_PLAYER_DATA
	DWORD idPlayer	= prj.GetPlayerID( s.token );
#endif	// __SYS_PLAYER_DATA
	if( idPlayer == 0 )	//
		return TRUE;
	CUser* pTarget	= (CUser*)prj.GetUserByID( idPlayer );
	if( IsValidObj( pTarget ) == FALSE )
		return TRUE;
	CPet* pPet	= pTarget->GetPet();
	if( pPet == NULL )	//
		return TRUE;

	// kind
	s.GetToken();
	if( s.tok == FINISHED )
		return TRUE;
	BYTE nKind	= atoi( s.token );
	if( nKind >= PK_MAX )
		return TRUE;

	// exp
	s.GetToken();
	if( s.tok == FINISHED )
		return TRUE;
	BYTE nExpRate	= atoi( s.token );

	s.GetToken();
	if( s.tok == FINISHED )
		return TRUE;
	BYTE nLevel		= s.Token.GetLength();

	if( nLevel > PL_S )
		return TRUE;

	BYTE anAvail[PL_MAX - 1]	= { 0,};
	char sAvail[2]	= { 0,};
	
	for( int i = 0; i < nLevel; i++ )
	{
		sAvail[0]	= s.Token.GetAt( i );
		sAvail[1]	= '\0';
		anAvail[i]	= atoi( sAvail );
		if( anAvail[i] < 1 || anAvail[i] > 9 )
			return TRUE;
	}

	s.GetToken();
	if( s.tok == FINISHED )
		return TRUE;
	BYTE nLife	= atoi( s.token );
	if( nLife > 99 )
		nLife	= 99;

	CItemElem* pItemElem	= pTarget->GetPetItem();
	pPet->SetKind( nKind );
	pPet->SetLevel( nLevel );
	if( nLevel == PL_EGG )
		pPet->SetKind( 0 );	// initialize
	pItemElem->m_dwItemId	= pPet->GetItemId();
	pPet->SetEnergy( pPet->GetMaxEnergy() );
	DWORD dwExp		= pPet->GetMaxExp() * nExpRate / 100;
	pPet->SetExp( dwExp );

	for( i = PL_D; i <= nLevel; i++ )
		pPet->SetAvailLevel( i, anAvail[i-1] );
	for( i = nLevel + 1; i <= PL_S; i++ )
		pPet->SetAvailLevel( i, 0 );

	pPet->SetLife( nLife );

	if( pTarget->HasPet() )
		pTarget->RemovePet();

	g_dpDBClient.CalluspPetLog( pTarget->m_idPlayer, pItemElem->GetSerialNumber(), 0, PETLOGTYPE_LEVELUP, pPet );

	pTarget->AddPet( pPet, PF_PET_GET_AVAIL );	// í»
	g_UserMng.AddPetLevelup( pTarget, MAKELONG( (WORD)pPet->GetIndex(), (WORD)pPet->GetLevel() ) );	// öâ
#endif	// __WORLDSERVER
	return TRUE;
kann da keiner schnell schreiben was man da ausklammern muss?
03/11/2014 13:49 Thejin#19
Ich hab versucht die TextCmd_Pet() Funktion als Beispiel zu nehmen und habe daraus eine App gemacht, die ein perfektes (13579) Pet erstellt. Allerdings wird die Scroll nicht gelöscht. (Vllt hat jemand eine Idee wie man die löschen kann.) Da ich mich erst seit kurzem mit C++ und der FlyFF Source näher beschäftige, sieht das wahrscheinlich noch nicht so gut aus. Daher wenn njemand das anders machen würde und einen Verbesserungsvorschlag hat, dann her damit.


Wenn jemand das gebrauchen möchte, soll er/sie das tun. Wenn Fehler auftreten, meldet sie bitte.
03/11/2014 15:04 raventh1984#20
That system from jopsi is only bugging cause you need to add an extra code.
So it works like it should be. I also have released this based on Jopsi's source snippets.

[spoiler]
DEFINEITEM.H
PHP Code:
#define II_SYS_LION                     224931
#define II_SYS_RABBIT                     224932
#define II_SYS_TIGER                     224933
#define II_SYS_FOX                         224934
#define II_SYS_DRAGON                     224935
#define II_SYS_HIPPOGRIPH                 224936
#define II_SYS_HORSE                    224937 
DPSrvr.cpp
Beneath
PHP Code:
case II_SYS_SYS_SCR_LEVELDOWN01:
case 
II_SYS_SYS_SCR_LEVELDOWN02:
b    DoUseItemTarget_ItemLevelDownpUserpMaterialpTarget );
break; 
ADD
PHP Code:
#ifdef __SUPER_PETS
case II_SYS_LION:
case 
II_SYS_RABBIT:
case 
II_SYS_TIGER:
case 
II_SYS_FOX:
case 
II_SYS_DRAGON:
case 
II_SYS_HIPPOGRIPH:
case 
II_SYS_HORSE:
DoUseItemTarget_PerfectPet(pUserpMaterialpTarget);
break;
#endif 
At the end of DPSrvr.cpp
Put this

PHP Code:
#ifdef __SUPER_PETS
BOOL CDPSrvr::DoUseItemTarget_PerfectPetCUserpUserCItemElempMaterialCItemElempTarget )
{
    
BOOL bPet;
    
BYTE nKind;
    
BYTE nExpRate    99//EXP RATE
    
BYTE nLevel        5;// S KLASSE
    
BYTE nLife      25;//Life is 25

    
CPet*  pPet     pUser->GetPet();

    if( 
pTarget->GetProp()->dwItemKind1 == IK1_GENERAL && pTarget->GetProp()->dwItemKind3 == IK3_EGG )
    {
        if( 
pPet == NULL )
        {
            
pUser->AddText"You dont have an summoned Egg!" );
            return 
FALSE;
        }
        else if( 
pPet && pUser->GetPet()->GetLevel() != PL_EGG )
        {
            
pUser->AddText"You can only use an scroll of Perfect pets on Eggs!" );
            return 
FALSE;
        }
        else
        {
            switch( 
pMaterial->m_dwItemId )
            {
                case 
II_SYS_LION:
                    
nKind 1;
                    
bPet TRUE;
                    break;
                case 
II_SYS_RABBIT:
                    
nKind 2;
                    
bPet TRUE;
                    break;
                case 
II_SYS_TIGER:
                    
nKind 0;
                    
bPet TRUE;
                    break;
                case 
II_SYS_HORSE:
                    
nKind 6;
                    
bPet TRUE;
                    break;
                case 
II_SYS_DRAGON:
                    
nKind 4;
                    
bPet TRUE;
                    break;
                case 
II_SYS_HIPPOGRIPH:
                    
nKind 5;
                    
bPet TRUE;
                    break;
                case 
II_SYS_FOX:
                    
nKind 3;
                    
bPet TRUE;
                    break;
    
                default:
                    break;
            }

            if( 
bPet == TRUE )
            {
                if( 
nLevel PL_S )
                return 
TRUE;

                if( 
IsValidObjpUser ) == FALSE )//FEHLER ABGFRAGE
                    
return TRUE;
    
                if( 
pPet == NULL )    //FEHLER ABFRAGE
                    
return TRUE;

                
// kind
                
if( nKind >= PK_MAX //FEHLER ABFRAGE
                    
return TRUE;
                    
                
CItemElempItemElem2 pUser->GetPetItem();
                
pPet->SetKindnKind );
                
pPet->SetLevelnLevel );
                
pItemElem2->m_dwItemId pPet->GetItemId();
                
pPet->SetEnergypPet->GetMaxEnergy() );
                
DWORD dwExp pPet->GetMaxExp() * nExpRate 100;
                
pPet->SetExpdwExp );

                for( 
int i 06i++ )
                    
pPet->SetAvailLevel(i); //Here it will generate the Perfect pets with stats 9/9/9/9/9

                
pPet->SetLifenLife );
                if( 
pUser->HasPet() )
                    
pUser->RemovePet();

                
g_dpDBClient.CalluspPetLogpUser->m_idPlayerpItemElem2->GetSerialNumber(), 0PETLOGTYPE_LEVELUPpPet ); //Log the change into database
                
pUser->AddPetpPetPF_PET_GET_AVAIL );    // PET EINFÜGEN
                
g_UserMng.AddPetLeveluppUserMAKELONG( (WORD)pPet->GetIndex(), (WORD)pPet->GetLevel() ) );
                
pUser->UpdateItem( (BYTE)pMaterial->m_dwObjIdUI_NUM);//Remove the scroll
                //return TRUE;
            
}
        }
    }
    return 
FALSE;
}
#endif 
VersionCommon.h Worldserver
#define __SUPER_PETS
05/22/2014 17:40 elmo142008#21
Quote:
[SPOILER]That system from jopsi is only bugging cause you need to add an extra code.
So it works like it should be. I also have released this based on Jopsi's source snippets.

defined in DPSrvr.h
defined in defineitem.h

error

im using blessed source