[Source TuT] /gro mit kosten 'ala' Scroll of Awakening

01/07/2012 17:31 .Crash#1
Damit der /gro Befehl genau wie die Scroll of Awakening einen Betrag für die Erweckung verlangt muss lediglich die Funktion



PHP Code:
BOOL TextCmd_GenRandomOptionCScanner 
in der FuncTextCmd
wie folgt umgeschrieben/ausgetauscht werden werden:


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

    if( 
nCost )
    {
        if( 
nRandomOptionKind >= )
            {
            if( 
pUser->GetGold() > nCost )    
                {    
                if(
pUser->HasActivatedSystemPet() && pItemElem->GetProp()->dwItemKind3 == IK3_EGG || pUser->HasActivatedEatPet() && pItemElem->GetProp()->dwItemKind3 == IK3_PET 
                    {
                            
pUser->AddText"Du kannst dein Pet nicht erwecken während es draußen ist." );
                    } 
            
                else
                    {    
                        
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 hast nicht genug Geld." );
                }
            }
        }
    }
        else
        {
        
pUser->AddText"Das zu erweckende Item muss im ersten Slot deines Inventars liegen!" );
        }
#endif //__WORLDSERVER
    
return TRUE;

Damit der Code für Normale User brauchbar ist muss natürlich noch die Access Stufe des Befehls auf AUTH_GENERAL gesetzt werden.

PHP Code:
ON_TEXTCMDFUNCTextCmd_GenRandomOption,        "GenRandomOption",    "gro",    "°¢¼ºÃູ""°¢Ãà",    TCM_BOTH,    AUTH_GENERAL"" 
01/07/2012 17:35 yannickFlyff#2
if( 0 < nCost )

Was soll dieseo abfrage bewirken lol.
01/07/2012 17:35 Incestus#3
Dann fixx bitte den Stack Bugg noch in dem Release. So wird es eh keiner benutzen.
Mal davon abgesehn, das es totaler Mist ist.

Quote:
Originally Posted by yannickFlyff View Post
if( 0 < nCost )

Was soll dieseo abfrage bewirken lol.
.. xd

PHP Code:
BOOL TextCmd_GenRandomOptionCScanner )
{
#ifdef __WORLDSERVER 
    
CUserpUser = (CUser*)s.dwValue//kaka
//    int i    = s.GetNumber();
    
CItemElempItemElem    pUser->m_Inventory.GetAt);
    if( 
pItemElem )
    {
        
int nRandomOptionKind    g_xRandomOptionProperty->GetRandomOptionKindpItemElem );
        if( 
nRandomOptionKind >= )    // ¾ÆÀÌÅÛ °¢¼º, ¿©½ÅÀÇ ÃູÀÌ °¡´ÉÇÑ ´ë»ó
        
{
            if( 
pUser->GetGold() >= 150000)
            {
                    if(
pUser->HasActivatedSystemPet() && pItemElem->GetProp()->dwItemKind3 == IK3_EGG || pUser->HasActivatedEatPet() && pItemElem->GetProp()->dwItemKind3 == IK3_PET 
                    {
                            
pUser->AddText"Hol dein Pet rein! Sonst kannst du es nicht erwecken!" );
                    }
                    else
                    {
                            
pUser->AddGold( -150000);
                            
g_xRandomOptionProperty->InitializeRandomOptionpItemElem->GetRandomOptItemIdPtr() );
                            
g_xRandomOptionProperty->GenRandomOptionpItemElem->GetRandomOptItemIdPtr(), nRandomOptionKindpItemElem->GetProp()->dwParts );
                            
pUser->UpdateItemEx( (BYTE)( pItemElem->m_dwObjId ), UI_RANDOMOPTITEMIDpItemElem->GetRandomOptItemId() );
                        }
                }
            else
            {
                
pUser->AddText(" Du brachst mehr Geld zum erwecken ");
            }
        }
    }
#endif    // __WORLDSERVER
    
return TRUE;

01/07/2012 17:43 .Crash#4
if( 0 < nCost )

bewirkt bei den einstellungen nichts.

Sollte jedoch jmd es schaffen für einen Überlauf zu sorgen wird die ganze funktion nicht mehr arbeiten anstatt das sonst was passiert, der Server abschmiert oder ähnliches.


.. xD ;)
01/07/2012 17:44 yannickFlyff#5
Wieso generiert er denn schon eine Option für das Item wenn er überhaupt nichtmal weis ob er genug geld hat oder nicht? O_O
01/07/2012 18:33 .Crash#6
hmm danke fürs Feedback habe meinen Code nochmal etwas überarbeitet.

@Incestus Ich würde den Preis immer nur an einer Stelle definieren das wird sonst ziemlich schnell zu einer Fehlerquelle wenn man das nochmal bearbeitet.
01/07/2012 18:45 yannickFlyff#7
Mach das if( 0 nCost ) endlich weg O_O Wenn einer einen Overflow hat meinmst du der gibt sich damit zufrieden Penyas zu erstellen? Ich würdfe da einfach ein Root benutzer erstellen und die kiste Hops nehmen.

Wenn man das nicht kann einfach die Rechte auf Z überschrieben und dann via /gg penyas erstellen.

zu dieser abfrage:
if(pUser->HasActivatedSystemPet() && pItemElem->GetProp()->dwItemKind3 == IK3_EGG || pUser->HasActivatedEatPet() && pItemElem->GetProp()->dwItemKind3 == IK3_PET )

die ist unübersichtlich und schlecht zu warten!
01/07/2012 19:41 Lumi#8
Quote:
Originally Posted by yannickFlyff View Post
Mach das if( 0 nCost ) endlich weg O_O Wenn einer einen Overflow hat meinmst du der gibt sich damit zufrieden Penyas zu erstellen? Ich würdfe da einfach ein Root benutzer erstellen und die kiste Hops nehmen.

Wenn man das nicht kann einfach die Rechte auf Z überschrieben und dann via /gg penyas erstellen.

zu dieser abfrage:
if(pUser->HasActivatedSystemPet() && pItemElem->GetProp()->dwItemKind3 == IK3_EGG || pUser->HasActivatedEatPet() && pItemElem->GetProp()->dwItemKind3 == IK3_PET )

die ist unübersichtlich und schlecht zu warten!
Anstatt ihn schlechte vorwürfe zu machen, verbessere lieber seine Fehlern.

@TE
Hast du es schonmal ausprobiert ? Funktioniert das auch ?
01/07/2012 20:04 yannickFlyff#9
Quote:
Originally Posted by Lumi' View Post
Anstatt ihn schlechte vorwürfe zu machen, verbessere lieber seine Fehlern.

@TE
Hast du es schonmal ausprobiert ? Funktioniert das auch ?
Was soll man da verbessern wenn er die if abfrage komplett raushauen soll? Ich hab sogar gründe genannt wieso diese unnötig ist also pscht kleiner junge.
01/07/2012 20:30 Lumi#10
Quote:
Originally Posted by yannickFlyff View Post
Was soll man da verbessern wenn er die if abfrage komplett raushauen soll? Ich hab sogar gründe genannt wieso diese unnötig ist also pscht kleiner junge.
Werd mal nicht so frech, Dude.

@.Crash..

Funktioniert das nun ? x_x
01/07/2012 20:46 Flash!#11
Das hier ist um einiges ausgebauter. (Fragt beispielsweise ab, ob das Item auch im ersten Slot liegt, damit die User nicht immer fragen "Wie funktioniert das denn?")
Code:
BOOL TextCmd_GenRandomOption( CScanner & s )
{
#ifdef __WORLDSERVER 
    CUser* pUser = (CUser*)s.dwValue;
    CItemElem* pItemElem    = pUser->m_Inventory.GetAt( 0 );
    if( pItemElem ){
        int nRandomOptionKind    = g_xRandomOptionProperty->GetRandomOptionKind( pItemElem );
        if( nRandomOptionKind >= 0 ){
            if(pUser->HasActivatedSystemPet() && pItemElem->GetProp()->dwItemKind3 == IK3_EGG || pUser->HasActivatedEatPet() && pItemElem->GetProp()->dwItemKind3 == IK3_PET ){
                pUser->AddText( "Bitte deaktiviere dein Pet." );
			}else{
				if( pUser->GetGold() >= 100000 ){
					g_xRandomOptionProperty->InitializeRandomOption( pItemElem->GetRandomOptItemIdPtr() );
					g_xRandomOptionProperty->GenRandomOption( pItemElem->GetRandomOptItemIdPtr(), nRandomOptionKind, pItemElem->GetProp()->dwParts );
					pUser->UpdateItemEx( (BYTE)( pItemElem->m_dwObjId ), UI_RANDOMOPTITEMID, pItemElem->GetRandomOptItemId() );
					pUser->AddGold( -100000 );
					pUser->AddText( "Dir wurden 100.000 Penya für das Erwecken abgezogen." );
				}else{
					pUser->AddText( "Du musst mindestens 100.000 Penya haben um erwecken zu können." );
				}
			}
		}else{
			pUser->AddText ( "Das zu erweckende Item muss im ersten Slot sein." );
		}
	}
#endif    // __WORLDSERVER
    return TRUE;
}
.. von Sedrika (Knutschaaa :D )
01/07/2012 21:02 yannickFlyff#12
pUser->AddText ( "Das zu erweckende Item muss im ersten Slot sein." );

Das failt mal extrem. Das prüft nur was für eine Option das hat (Awakeable oder wie ich das nennen soll) und nicht ob es im ersten slot ist.

Außerdem wird alles geprüft und natürlich fragt man erst am ende ab ob er Geld hat.

Ich mach das auch immer so. Ich verkauf was auf Amazon.de und erst bevor ich kurz vorm absenden des Packets bin frag ich den käufer ob er genug geld hat. Wenn nicht war alles umsonst.

Egal ob der Code vom @TE scheise ist. Ich muss ehrlcih sagen das seiner den von Sedrika um längen in den schatten stellt.
01/07/2012 22:27 .Crash#13
@Lumi ja es funktioniert


Quote:
Originally Posted by Marvin! View Post
Das hier ist um einiges ausgebauter. (Fragt beispielsweise ab, ob das Item auch im ersten Slot liegt, damit die User nicht immer fragen "Wie funktioniert das denn?")


.. von Sedrika (Knutschaaa :D )

Das funktioniert so nicht die else Abfrage ist dafür an der falschen Position. Das solltest du vlt mal selber testen

Die Idee ist aber gut habe sowas mal in meinen code eingebaut, müsste aber im entefeckt auch noch weiter ausgeschrieben werden und auf die awakebarkeit statt nur überhaupt nach einem Item zu schauen.