Hier ein /awake Befehl der nach Art der Scroll of Awakening arbeitet und pro Awakening erweckungskosten nimmt.
Das ganze ist so aufgebaut das es ingame völlig Idiotensicher zu benutzen ist sobald man den Befehl /awake kennt.
Alles was man falsch machen kann wird vom System automatisch beantwortet.
PetStack Fixxed |||| Baruna Crash Bug Fixxed
Falls ihr eure Baruna Waffen awakebar habt und mit /awake nutzbar machen wollt alle Zeilen die Mit //Baruna kommentiert sind komplett auskommentieren bzw löschen.
FuncTextCmd.cpp
PHP Code:
ON_TEXTCMDFUNC( TextCmd_AwakeItem, "AwakeItem", "awake", "°¢¼ºÃູ", "°¢Ãà", TCM_BOTH, AUTH_GENERAL , "" )
PHP Code:
BOOL TextCmd_AwakeItem( CScanner & s )
{
#ifdef __WORLDSERVER
CUser* pUser = (CUser*)s.dwValue;
CItemElem* pItemElem = pUser->m_Inventory.GetAt( 0 );
if( pItemElem )
{
int nCost = 150000;
int nRandomOptionKind = g_xRandomOptionProperty->GetRandomOptionKind( pItemElem );
if( 0 < nCost )
{
if( pItemElem->GetProp()->dwItemKind1 == IK1_WEAPON ||
pItemElem->GetProp()->dwItemKind1 == IK1_ARMOR ||
pItemElem->GetProp()->dwItemKind3 == IK3_PET ||
pItemElem->GetProp()->dwItemKind3 == IK3_EGG )
{
if( !pItemElem->IsEgg( ) )
{
if( !pItemElem->GetProp()->IsBaruna() ) //Baruna
{ //Baruna
if( pUser->GetGold() >= nCost )
{
if ( !pUser->HasActivatedEatPet() && !pUser->HasPet() )
{
pUser->AddGold( -( nCost ) );
g_xRandomOptionProperty->InitializeRandomOption( pItemElem->GetRandomOptItemIdPtr() );
g_xRandomOptionProperty->GenRandomOption( pItemElem->GetRandomOptItemIdPtr(), nRandomOptionKind, pItemElem->GetProp()->dwParts );
pUser->UpdateItemEx( (BYTE)( pItemElem->m_dwObjId ), UI_RANDOMOPTITEMID, pItemElem->GetRandomOptItemId() );
}
else
{
pUser->AddText( "Du musst dein Pet zum erwecken einpacken." );
}
}
else
{
pUser->AddText( "Du hast nicht genug Geld um ein Item zu erwecken." );
}
}
else //Baruna
{ //Baruna
pUser->AddText( "Sorry aber Baruna Waffen kann man zurzeit nicht erwecken." ); //Baruna
} //Baruna
} //Baruna
else
{
pUser->AddText( "Du kannst das Pet erst erwecken wenn es geschlüpft ist." );
}
}
else
{
pUser->AddText( "Du kannst dieses Item nicht erwecken." );
pUser->AddText( "Lege ein Erweckbares Item in den ersten Slot deines Inventars um es zu erwecken!" );
}
}
}
else
{
pUser->AddText( "Das zu erweckende Item muss im ersten Slot deines Inventars liegen!" );
}
#endif //__WORLDSERVER
return TRUE;
}
randomoption.h
PHP Code:
//Innerhalb von :
//
//class CRandomOptionProperty
//{
//public:
BOOL GenAwakeItem( __int64* pnRandomOptItemId, int nRandomOptionKind, int nParts, bool bDecreaseFlag = false );
randomoption.cpp
PHP Code:
BOOL CRandomOptionProperty::GenAwakeItem( __int64* pnRandomOptItemId, int nRandomOptionKind, int nParts, bool bDecreaseFlag /* = false */ )
{
if( GetRandomOptionSize( *pnRandomOptItemId ) > 0 )
{
return FALSE;
}
int nRandomOptionSize = DetermineRandomOptionSize( nRandomOptionKind );
int nDecreaseNumber = -1;
if( bDecreaseFlag == true )
{
nDecreaseNumber = xRandom( nRandomOptionSize );
}
while( nRandomOptionSize-- > 0 )
{
RANDOM_OPTION* pRandomOption = DetermineRandomOptionDst( nRandomOptionKind, nParts );
ASSERT( pRandomOption );
bool bDecreaseAdj = false;
if( nRandomOptionSize == nDecreaseNumber )
{
bDecreaseAdj = true;
}
else
{
bDecreaseAdj = false;
}
short nAdj = DetermineRandomOptionAdj( pRandomOption, bDecreaseAdj );
SetParam( pnRandomOptItemId, pRandomOption->nDst, nAdj );
}
return TRUE;
}