[Src Release] Awake User Befehl Stackfixxed

01/11/2012 06:55 .Crash#16
Das Awaken von Baruna Waffen falls diese nicht anderweitig bearbeitet sind führt zu einem World Crash.

kommt später noch in FP hab jetzt keine Zeit mehr.

if( !pItemElem->GetProp()->dwReferStat1 == BARUNA_D )
{


}
else
{
pUser->AddText( "Baruna Waffen kann man nicht awaken." );
}
01/11/2012 14:43 Lumi#17
Quote:
Originally Posted by Domina1990 View Post
Habe ich immer wenn ich was veränder erstelle ich eine neue solution ist bei mir gang ung gebe. mfg
Versuch es mal zu rebuilden.
01/11/2012 14:49 Domina1990#18
hab ich auch schon :( kein erfolg...
01/11/2012 15:23 Lumi#19
FuncTextCmd.cpp
Suche:
PHP Code:
    ON_TEXTCMDFUNCTextCmd_shoutrefuse,           "shoutrefuse",       "hr",             "¿ÜÄ¡±âÇØÁ¦",     "¿ÜÇØ",    TCM_CLIENTAUTH_GENERAL      "¿ÜÄ¡±â °ÅÀý [/¸í·É] " 
darunter das hier hinzufügen:
PHP Code:
ON_TEXTCMDFUNCTextCmd_AwakeItem,                "AwakeItem",    "awake",          "°¢¼ºÃູ",         "°¢Ãà",       TCM_BOTH,    AUTH_GENERAL     "" 
In der gleichen Datei..
Suche:
PHP Code:
BOOL TextCmd_shoutrefuseCScanner scanner 
dort müsste das hier stehen
PHP Code:
{
    
g_Option.m_bShout 0;
    
g_WndMng.PutStringprj.GetTextTID_GAME_SHOUTREFUSE ), NULLprj.GetTextColorTID_GAME_SHOUTREFUSE ) );
    return 
TRUE;

darunter das hier hinzufügen:
PHP Code:
BOOL TextCmd_AwakeItemCScanner )
{
#ifdef __WORLDSERVER
    
CUserpUser    = (CUser*)s.dwValue;
    
CItemElempItemElem    pUser->m_Inventory.GetAt);
    if( 
pItemElem )
    {
    
    
int nCost 150000;
    
int nRandomOptionKind    g_xRandomOptionProperty->GetRandomOptionKindpItemElem );

    if( 
nCost )
    {
        if ( 
pItemElem->GetProp()->dwItemKind1 == IK1_WEAPON ||
            
pItemElem->GetProp()->dwItemKind1 == IK1_ARMOR ||
            
pItemElem->GetProp()->dwItemKind3 == IK3_PET ||
            
pItemElem->GetProp()->dwItemKind3 == IK3_EGG )
            {
                    if( !
pItemElem->GetProp()->dwID == II_PET_EGG )
            {
            if( 
pUser->GetGold() >= nCost )
                {    
                if ( !
pUser->HasActivatedEatPet() && !pUser->HasPet() ) 
                    {    
                        
pUser->AddGold( -( nCost ) );
                        
g_xRandomOptionProperty->InitializeRandomOptionpItemElem->GetRandomOptItemIdPtr() );
                        
g_xRandomOptionProperty->GenRandomOptionpItemElem->GetRandomOptItemIdPtr(), nRandomOptionKindpItemElem->GetProp()->dwParts );
                        
pUser->UpdateItemEx( (BYTE)( pItemElem->m_dwObjId ), UI_RANDOMOPTITEMIDpItemElem->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
                {
                
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
Suche:
PHP Code:
BOOL    GetParam__int64 nRandomOptItemIdint iintpnDstintpnAdj ); 
darunter:
PHP Code:
BOOL    GenAwakeItem__int64pnRandomOptItemIdint nRandomOptionKindint nPartsbool bDecreaseFlag false ); 
randomoption.cpp
Suche:
PHP Code:
void    CRandomOptionProperty::SetParam__int64pnRandomOptItemIdint nDstint nAdj 
Dort müsste dann das hier stehen
PHP Code:
void    CRandomOptionProperty::SetParam__int64pnRandomOptItemIdint nDstint nAdj )
{
    
int nSize    GetRandomOptionSize( *pnRandomOptItemId );
    
ASSERTnSize MAX_RANDOM_OPTION );

    
__int64 nRandomOptionItemId        nDst;
    
nRandomOptionItemId        nRandomOptionItemId << 10;        // 2 | 8 | 10 | 8 | 10 | 8 | 10 | 8
    //    2 : 

    //    1 :
    //    7 :
    //    10 :

    //    8 :

    
if( nAdj )
    {
        
nRandomOptionItemId    |= 0x0200;    // À½¼öÀΠ°æ¿ì ÃÖ»óÀ§ ºñÆ® 1
        
nRandomOptionItemId    nRandomOptionItemId | ( -nAdj );
    }
    else
        
nRandomOptionItemId    nRandomOptionItemId nAdj;

    
nRandomOptionItemId    nRandomOptionItemId << ( 18 nSize );    // ÇØ´ç À§Ä¡·Î ½ÃÇÁÆ®
    
*pnRandomOptItemId    |= nRandomOptionItemId;        // °á°ú °ª ÀúÀå
}

int CRandomOptionProperty::GetRandomOptionKindCItemElempItemElem )
{
    
ItemProppProp        pItemElem->GetProp();
    switch( 
pProp->dwParts )
    {
        case 
PARTS_UPPER_BODY:
        case 
PARTS_RWEAPON:
        case 
PARTS_SHIELD:
        case 
PARTS_MASK:
        case 
PARTS_BULLET:
#if __VER >= 12 // __J12_0
        // °¢¼º °¡´É ÆÄÃ÷ Ãß°¡
        
case PARTS_HAND:    // ¼Õ
        
case PARTS_FOOT:    // ¹ß
        
case PARTS_CAP:        // ¸Ó¸®
#endif    // __J12_0
#ifdef __NEW_ITEM_VARUNA
            
{
                if( 
pItemElem->GetProp()->IsBaruna() )
                    return -
1;
                else
                    return 
static_cast<int>( eAwakening );
            }
#endif // __NEW_ITEM_VARUNA
        
case PARTS_CLOTH:
        case 
PARTS_CLOAK:
#if __VER >= 12 // __J12_0
        
case PARTS_HAT:        // °Ñ¿Ê ¸Ó¸®
        
case PARTS_GLOVE:    // °Ñ¿Ê ¼Õ
        
case PARTS_BOOTS:    // °Ñ¿Ê ¹ß
#endif    // __J12_0
            
return static_cast<int>( eBlessing );
#if __VER >= 12 // __PET_0519
        
default:
            {
                
// C±Þ ÀÌ»óÀÇ ½Ã½ºÅÛ ÆêÀΰ¡?
                
if( pProp->dwItemKind3 == IK3_EGG && pItemElem->m_pPet && pItemElem->m_pPet->GetLevel() >= PL_C )
                    return 
static_cast<int>( eSystemPet );
                
// ¸ÔÆêÀΰ¡?
                
else if( pProp->dwItemKind3 == IK3_PET )
                    return 
static_cast<int>( eEatPet );
                break;
            }
#endif    // __PET_0519
    
}
    return -
1;

darunter:

PHP Code:
BOOL    CRandomOptionProperty::GenAwakeItem__int64pnRandomOptItemIdint nRandomOptionKindint nPartsbool bDecreaseFlag /* = false */ )


    if( 
GetRandomOptionSize( *pnRandomOptItemId )  > )
    {
        return 
FALSE;
    }
    
int nRandomOptionSize    DetermineRandomOptionSizenRandomOptionKind );
    
int    nDecreaseNumber    = -1;

    if( 
bDecreaseFlag == true )
    {
        
nDecreaseNumber xRandomnRandomOptionSize );
    }
    while( 
nRandomOptionSize-- > )
    {
        
RANDOM_OPTIONpRandomOption    DetermineRandomOptionDstnRandomOptionKindnParts );
        
ASSERTpRandomOption );
        
bool    bDecreaseAdj    false;
        if( 
nRandomOptionSize == nDecreaseNumber )
        {
            
bDecreaseAdj true;
        }
        else
        {
            
bDecreaseAdj false;
        }

        
short nAdj    DetermineRandomOptionAdjpRandomOptionbDecreaseAdj );
        
SetParampnRandomOptItemIdpRandomOption->nDstnAdj );
    }
    return 
TRUE;

Das wars auch schon..
01/11/2012 17:53 .Crash#20
die unstabile Egg abfrage ausgetauscht und Baruna fix.

Nu isses fertig.

@Lumi pack sowas doch zukünftig bitte in einen Spoiler :)
03/10/2012 11:53 lolix3#21
Neuer Crash Bug gefunden,
wenn man eine Brille awaked crashts, weil Brillen nicht Awakebar sind dennach auf IK1_Armor sind. Also neue IK1_MASK adden und jede Brille umändern oder im Source code mal ändern.
03/10/2012 12:09 Shikura#22
Gibt es doch schon von Jopsi oder nicht?

Sogar viel besser :P
03/10/2012 12:44 Jopsi332#23
jap
04/06/2012 15:33 inteL96#24
What does this do? Can you please tell me how it works?

Thanks.
08/06/2012 09:23 SonGoku.#25
wo leigen den die dateien ?
08/06/2012 09:29 Bloodyrain™#26
in der Source einfach im Hauptvereichnis nach den Datein suchen.
08/06/2012 10:14 SonGoku.#27
und wie soll man das genau ändern da stehtn beim ersten 2 codes? eifnachd as drinne löschen und das einfpgen?
08/06/2012 13:01 Bloodyrain™#28
lass es lieber. bevor du hier was falsches machst.
01/05/2013 10:43 Blader1974#29
ich bin auch schon am machen vieleicht kann mir einer sagen wie ich die Brillen im source addy das man die erwecken kann und das der world server nicht mehr crasht

oder kann man es abstellen so das der world server nicht mehr crasht

danke schonmal im vorraus
01/05/2013 22:26 yannick2008#30
PHP Code:
CItemElempItem    pUser->m_Inventory.GetAtIdnItem );
int nRandomOptionKind    g_xRandomOptionProperty->GetRandomOptionKindpItem );

            if( 
nRandomOptionKind != CRandomOptionProperty::eAwakening )
                
//item ist nicht awakable
            
else
                
//item isit awakable 
Damit prüfst ob das Item Awakable ist.

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 );

[COLOR="Red"][B]    if( nRandomOptionKind != CRandomOptionProperty::eAwakening )
    {
	pUser->AddText( "Dieses Item kannst du nicht erwecken!" );
	return FALSE;
    }[/B][/COLOR]
    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;
}
Das einfach mit dem in der FuncTextCmd.cpp ersetzen und es können keine Brillen mehr awaked werden.