[Source] Auto Buff in GW Arena

08/02/2012 16:12 マリブ#1
Tach,
hab mal euch mal was schönes für GW Server.
Auto Buffen in GW Arena, sobald mal unten Spawnt.

Hier mal nen Screen:

Nun zum Source teil:
DPSrvr.cpp (Worldserver)
Komplette Funktion ersetzen:
Code:
void CDPSrvr::OnGCJoin( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
{
    CUser* pUser    = g_UserMng.GetUser( dpidCache, dpidUser );
    if( IsValidObj( pUser ) )
    {
        if( !CNpcChecker::GetInstance()->IsCloseNpc( MMI_GUILDWAR_JOIN, pUser->GetWorld(), pUser->GetPos() ) )
            return;
        g_GuildCombatMng.GuildCombatEnter( pUser );
    }
#ifdef    __GW_BUFF
    
            pUser->DoBuff(SI_ASS_CHEER_HEAPUP, 20, pUser); 
            pUser->DoBuff(SI_ASS_CHEER_QUICKSTEP, 20, pUser); 
            pUser->DoBuff(SI_ASS_HEAL_PATIENCE, 20, pUser); 
            pUser->DoBuff(SI_ASS_CHEER_CATSREFLEX, 20, pUser); 
            pUser->DoBuff(SI_ASS_CHEER_CANNONBALL, 20, pUser);
            pUser->DoBuff(SI_ASS_CHEER_MENTALSIGN, 20, pUser); 
            pUser->DoBuff(SI_ASS_CHEER_BEEFUP, 20, pUser); 
            pUser->DoBuff(SI_ASS_CHEER_ACCURACY, 20, pUser); 
            pUser->DoBuff(SI_RIN_SUP_SPIRITUREFORTUNE, 10, pUser); 
            pUser->DoBuff(SI_ASS_CHEER_HASTE, 20, pUser); 
            pUser->AddText("Have Fun!");
        
#endif
}
ctrl.cpp
Ganz unten Hinzufügen.
Code:
#ifdef    __GW_BUFF
void CCtrl::DoBuff( DWORD dwSkill, int nLevel, CCtrl *pTarget)
{
    ItemProp* pSkillProp;
    AddSkillProp* pAddSkillProp;
    GetSkillProp( &pSkillProp, &pAddSkillProp, dwSkill, nLevel, "DoActiveSkill" );
    if(    pAddSkillProp->dwSkillTime > 1000)
        pAddSkillProp->dwSkillTime = 9999999;

     DoApplySkill( pTarget, pSkillProp, pAddSkillProp, 0, 0, FALSE, 0 );
}
#endif
ctrl.h
Unter:
Code:
void            DoActiveSkill( DWORD dwSkill, int nLevel, CCtrl *pTarget, bool bIgnoreProb = false );        // ActiveSkill¹ßµ¿
#endif // __VER >= 8 // __S8_PK
Das Hier:
Code:
#ifdef    __GW_BUFF
    void            DoBuff( DWORD dwSkill, int nLevel, CCtrl *pTarget);
#endif
eveschool.cpp
Unter:
Code:
#include "user.h"
Das Hier:
Code:
#ifdef    __GW_BUFF
#include "defineSkill.h"
#endif
Unter:
Code:
pUser->AddText( prj.GetText(TID_GAME_GUILDCOMBAT_ZOOM_USE) );
Das Hier:
Code:
#ifdef    __GW_BUFF
            pUser->DoBuff(SI_ASS_CHEER_HEAPUP, 20, pUser); 
            pUser->DoBuff(SI_ASS_CHEER_QUICKSTEP, 20, pUser); 
            pUser->DoBuff(SI_ASS_HEAL_PATIENCE, 20, pUser); 
            pUser->DoBuff(SI_ASS_CHEER_CATSREFLEX, 20, pUser); 
            pUser->DoBuff(SI_ASS_CHEER_CANNONBALL, 20, pUser); 
            pUser->DoBuff(SI_ASS_CHEER_MENTALSIGN, 20, pUser); 
            pUser->DoBuff(SI_ASS_CHEER_BEEFUP, 20, pUser); 
            pUser->DoBuff(SI_ASS_CHEER_ACCURACY, 20, pUser); 
            pUser->DoBuff(SI_RIN_SUP_SPIRITUREFORTUNE, 10, pUser); 
            pUser->DoBuff(SI_ASS_CHEER_HASTE, 20, pUser); 
            pUser->AddText("Lets do this!");
#endif
VersionCommon.h (Worldserver)
Code:
#define __GW_BUFF
Fertig :p

Buffen bei Login:
DpDatabaseClient.cpp

Ganz Oben bei den #include sachen fügen wir dies hinzu:
Code:
#include "defineSkill.h"
Unter:
Code:
#if __VER >= 15 // __CAMPUS
        u_long idCampus = pUser->GetCampusId();
        if( idCampus )
        {
            CCampus* pCampus = CCampusHelper::GetInstance()->GetCampus( idCampus );
            if( pCampus && pCampus->IsMember( pUser->m_idPlayer ) )
                pUser->AddUpdateCampus( pCampus );
            else
                pUser->SetCampusId( 0 );
        }
#endif // __CAMPUS
Das Hier:
Code:
for( int ida = 1; ida <= 9; ida++ )
            {
                int SKID;
                if ( ida == 1 )
                    SKID = SI_ASS_CHEER_HASTE;
                else if ( ida == 2 )
                    SKID = SI_ASS_CHEER_ACCURACY;
                else if ( ida == 3 )
                    SKID = SI_ASS_CHEER_CATSREFLEX;
                else if ( ida == 4 )
                    SKID = SI_ASS_CHEER_QUICKSTEP;
                else if ( ida == 5 )
                    SKID = SI_ASS_CHEER_BEEFUP;
                else if ( ida == 6 )
                    SKID = SI_ASS_CHEER_MENTALSIGN;
                else if ( ida == 7 )
                    SKID = SI_ASS_CHEER_CANNONBALL;
                else if ( ida == 8 )
                    SKID = SI_ASS_CHEER_HEAPUP;
                else if ( ida == 9 )
                    SKID = SI_ASS_HEAL_PATIENCE;
                else
                    break;
                ItemProp* pSkillProp = prj.GetSkillProp( SKID );
                AddSkillProp* pAddSkillProp = prj.GetAddSkillProp( pSkillProp->dwSubDefine, 20 );
                if( pAddSkillProp )
                {
                    DWORD dwReferTarget1Backup = pSkillProp->dwReferTarget1;
                    pSkillProp->dwReferTarget1 = NULL_ID;
                    DWORD dwReferTarget2Backup = pSkillProp->dwReferTarget2;
                    pSkillProp->dwReferTarget2 = NULL_ID;
                    DWORD dwSkillTimeBackup = pAddSkillProp->dwSkillTime;
                    pAddSkillProp->dwSkillTime = 144000000;

                    pUser->DoApplySkill( pUser, pSkillProp, pAddSkillProp );
                    g_UserMng.AddDoApplySkill( pUser, pUser->GetId(), SKID, 20 );
                  
                }
            }
Buffs nach jedem Tod
DPSrvr.cpp (Worldserver)
Wir suchen diese Funktion:
Code:
void CDPSrvr::OnRevivalLodestar( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
Dann suchen wir in der Funktion:
Code:
        pUser->m_nDead = PROCESS_COUNT * 5;        // Á×Àº ÈÄ 5Ãʰ£Àº ¹«Àû
        float fRate        = pUser->SubDieDecExp();        // Á×¾î¼* ºÎȰÇÏ¸é °âÄ¡ ±ðÀÓ,.
        pUser->m_pActMover->ClearState();
Darunter fügen wir dies ein:
Code:
for( int ida = 1; ida <= 9; ida++ )
            {
                int SKID;
                if ( ida == 1 )
                    SKID = SI_ASS_CHEER_HASTE;
                else if ( ida == 2 )
                    SKID = SI_ASS_CHEER_ACCURACY;
                else if ( ida == 3 )
                    SKID = SI_ASS_CHEER_CATSREFLEX;
                else if ( ida == 4 )
                    SKID = SI_ASS_CHEER_QUICKSTEP;
                else if ( ida == 5 )
                    SKID = SI_ASS_CHEER_BEEFUP;
                else if ( ida == 6 )
                    SKID = SI_ASS_CHEER_MENTALSIGN;
                else if ( ida == 7 )
                    SKID = SI_ASS_CHEER_CANNONBALL;
                else if ( ida == 8 )
                    SKID = SI_ASS_CHEER_HEAPUP;
                else if ( ida == 9 )
                    SKID = SI_ASS_HEAL_PATIENCE;
                else
                    break;
                ItemProp* pSkillProp = prj.GetSkillProp( SKID );
                AddSkillProp* pAddSkillProp = prj.GetAddSkillProp( pSkillProp->dwSubDefine, 20 );
                if( pAddSkillProp )
                {
                    DWORD dwReferTarget1Backup = pSkillProp->dwReferTarget1;
                    pSkillProp->dwReferTarget1 = NULL_ID;
                    DWORD dwReferTarget2Backup = pSkillProp->dwReferTarget2;
                    pSkillProp->dwReferTarget2 = NULL_ID;
                    DWORD dwSkillTimeBackup = pAddSkillProp->dwSkillTime;
                    pAddSkillProp->dwSkillTime = 144000000;

                    pUser->DoApplySkill( pUser, pSkillProp, pAddSkillProp );
                    g_UserMng.AddDoApplySkill( pUser, pUser->GetId(), SKID, 20 );
                }
            }
Buffen ohne Buffpang in der nähe haben zu müssen ( Per CSPet / Pet )
DPSrvr.cpp (Worldserver)

Wir suchen diese Funktion:
Code:
void    CDPSrvr::OnNPCBuff( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
Und in dieser Funktion finden wir das:
Code:
if( !CNpcChecker::GetInstance()->IsCloseNpc(MMI_NPC_BUFF, pUser->GetWorld(), pUser->GetPos() ) )
                return;
Einfach auskommentieren.
Buffen nach Usen von Scroll of Resurrection:
DPSrvr.cpp

Wir suchen diese Funktion:
Code:
void CDPSrvr::OnRevival( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
Dort finden wir dies:
Code:
pUser->m_nDead = PROCESS_COUNT * 5;        // Á×Àº ÈÄ 5Ãʰ£Àº ¹«Àû
Darunter:
Code:
for( int ida = 1; ida <= 9; ida++ )
            {
                int SKID;
                if ( ida == 1 )
                    SKID = SI_ASS_CHEER_HASTE;
                else if ( ida == 2 )
                    SKID = SI_ASS_CHEER_ACCURACY;
                else if ( ida == 3 )
                    SKID = SI_ASS_CHEER_CATSREFLEX;
                else if ( ida == 4 )
                    SKID = SI_ASS_CHEER_QUICKSTEP;
                else if ( ida == 5 )
                    SKID = SI_ASS_CHEER_BEEFUP;
                else if ( ida == 6 )
                    SKID = SI_ASS_CHEER_MENTALSIGN;
                else if ( ida == 7 )
                    SKID = SI_ASS_CHEER_CANNONBALL;
                else if ( ida == 8 )
                    SKID = SI_ASS_CHEER_HEAPUP;
                else if ( ida == 9 )
                    SKID = SI_ASS_HEAL_PATIENCE;
                else
                    break;
                ItemProp* pSkillProp = prj.GetSkillProp( SKID );
                AddSkillProp* pAddSkillProp = prj.GetAddSkillProp( pSkillProp->dwSubDefine, 20 );
                if( pAddSkillProp )
                {
                    DWORD dwReferTarget1Backup = pSkillProp->dwReferTarget1;
                    pSkillProp->dwReferTarget1 = NULL_ID;
                    DWORD dwReferTarget2Backup = pSkillProp->dwReferTarget2;
                    pSkillProp->dwReferTarget2 = NULL_ID;
                    DWORD dwSkillTimeBackup = pAddSkillProp->dwSkillTime;
                    pAddSkillProp->dwSkillTime = 144000000;

                    pUser->DoApplySkill( pUser, pSkillProp, pAddSkillProp );
                    g_UserMng.AddDoApplySkill( pUser, pUser->GetId(), SKID, 20 );
                }
            }
Credits:
Buffen in GW Arena: Malibu
DoBuff Funktion: Mentus ;D
Restliche Buff Edits:
Eragøn & sagenessamerda

Greez Malibu~
08/02/2012 16:32 lolix3#2
Auch bedacht, dass wenn man reinkommt mit Dark Illusion, dann gebufft wird Dark Illusion weg ist?
Und das nervt richtig für einen Jester!
08/02/2012 16:37 マリブ#3
Quote:
Originally Posted by lolix3 View Post
Auch bedacht, dass wenn man reinkommt mit Dark Illusion, dann gebufft wird Dark Illusion weg ist?
Und das nervt richtig für einen Jester!
Nop, werds nochmal ändern q:

Edit:
Habs geändert ;D
08/02/2012 17:12 Shiaru#4
Wusst nu nich ob nen' eigenen Thread für machen oder einfach hier reinpacken, aber hat halt auch mit Buffs zu tun..

Buffs beim Login:

DpDatabaseClient.cpp

das hier:


über dem:
Code:
#ifdef __ON_ERROR
( befindet sich ca. in der Zeile 1301 )
einfügen



Buffs direkt nach dem Tod:


DpSrvr.cpp im WS

das suchen:

Code:
void CDPSrvr::OnRevivalLodestar( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
unter:
Code:
pUser->m_pActMover->ClearState();
einfügen


Das hier weiß ich gerade nicht mehr aus dem Kopf, aber war auch irgendetwas mit buffen.

DPSrvr.cpp

das suchen:
Code:
void CDPSrvr::OnRevival( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
unter dem hier:

Code:
pUser->m_nDead = PROCESS_COUNT * 5;		// Á×Àº ÈÄ 5Ãʰ£Àº ¹«Àû
das einfügen:


Und das hier ging ziemlich unter aber wurde schon einmal von wem postet:

Buffs ohne Pang in der Nähe haben zu müssen ( zB buffen via buff-pet, eat-pet )

DPSrvr.cpp:

das hier suchen:
Code:
if( !CNpcChecker::GetInstance()->IsCloseNpc(MMI_NPC_BUFF, pUser->GetWorld(), pUser->GetPos() ) )
return;
austauschen mit dem oder einfach auskommentieren:


//edit:

Kannst gerne reineditieren, aber halt Credits an:

Eragøn & sagenessamerda

habe es nur noch mal gepostet weil beides ziemlich unterging und ichs zufällig in ner alten Source wiederfand.

// edit 2:

Was vergessen, man muss noch in DpDatabaseClient.cpp etwas einfügen
bei den includes

#include "defineSkill.h"


& achja pAddSkillProp->dwSkillTime = 144000000; die Zahl steht für die Zeit, kann man beliebig ändern.
08/02/2012 17:13 マリブ#5
Quote:
Originally Posted by Shiaru View Post
Wusst nu nich ob nen' eigenen Thread für machen oder einfach hier reinpacken, aber hat halt auch mit Buffs zu tun..

Buffs beim Login:

DpDatabaseClient.cpp

das hier:


über dem:
Code:
#ifdef __ON_ERROR
( ca. Zeile 1301 ) einfügen

Buffs direkt nach dem Tod:


DpSrvr.cpp im WS

unter:
Code:
pUser->m_pActMover->ClearState();
einfügen

Und das hier ging ziemlich unter aber wurde schon einmal von wem postet:

Buffs ohne Pang in der Nähe haben zu müssen ( zB buffen via buff-pet, eat-pet )

DPSrvr.cpp:

das hier suchen:
Code:
if( !CNpcChecker::GetInstance()->IsCloseNpc(MMI_NPC_BUFF, pUser->GetWorld(), pUser->GetPos() ) )
return;
austauschen mit dem oder einfach auskommentieren:
Wenns dir recht ist pack ichs oben in den Thread mit rein, unter deinem Namen q:
08/02/2012 17:28 Memory'#6
Genau sowas habe ich gesucht ! Fettes Thx..
08/02/2012 17:59 マリブ#7
#Thread Updates
#Neue Buff sachen hinzugefügt.
08/02/2012 18:24 Unleashed!#8
Wo hast du denn jetzt bitte den Fehler mit dem Jester behoben? ;D
08/02/2012 18:28 マリブ#9
Quote:
Originally Posted by Unleashed! View Post
Wo hast du denn jetzt bitte den Fehler mit dem Jester behoben? ;D
Hab es an einer anderen stelle Buffen lassen.
Man hat die Buffs bekommen bei void CGuildCombat::JoinWar( CUser* pUser, int nMap , BOOL bWar) bekommen.
Das war als man unten gespawnt ist.
Jetzt ist die Funktion bei: void CGuildCombat::JoinObserver( CUser* pUser )
Der Respawn oben.

Habs getestet, funktioniert auch oo

Ps: Ist alles durch denken & probieren entstanden o;
08/03/2012 00:40 Aspectus#10
Will ja nichts sagen, aber die Credits für die Buff Funktion "DoBuff" gehen an mich.
08/03/2012 11:53 Ultimate™#11
ohne Source keine DoBuff funktion
also gehen die credits immer an offi :)
ihr sagt immer credits credits credits
aber ohne deren zeug wäre hier niemand etwas, ich mit einbezogen :)
08/03/2012 12:25 Aspectus#12
Quote:
Originally Posted by DonaldFuck View Post
ohne Source keine DoBuff funktion
also gehen die credits immer an offi :)
ihr sagt immer credits credits credits
aber ohne deren zeug wäre hier niemand etwas, ich mit einbezogen :)
Wenn man die Credits schon angibt, dann richtig.
Durch die pServer Szene ist FlyFF überhaupt es was geworden und lebt immernoch weiter.
Aber nunja, du hast schon Recht. Ohne deren Source könnten wir nichts machen.
08/03/2012 12:36 Jopsi332#13
anstatt
Code:
for( int ida = 1; ida <= 9; ida++ )
            {
                int SKID;
                if ( ida == 1 )
                    SKID = SI_ASS_CHEER_HASTE;
                else if ( ida == 2 )
                    SKID = SI_ASS_CHEER_ACCURACY;
                else if ( ida == 3 )
                    SKID = SI_ASS_CHEER_CATSREFLEX;
                else if ( ida == 4 )
                    SKID = SI_ASS_CHEER_QUICKSTEP;
                else if ( ida == 5 )
                    SKID = SI_ASS_CHEER_BEEFUP;
                else if ( ida == 6 )
                    SKID = SI_ASS_CHEER_MENTALSIGN;
                else if ( ida == 7 )
                    SKID = SI_ASS_CHEER_CANNONBALL;
                else if ( ida == 8 )
                    SKID = SI_ASS_CHEER_HEAPUP;
                else if ( ida == 9 )
                    SKID = SI_ASS_HEAL_PATIENCE;
                else
                    break;
würd ich das ja eher so machen

Code:
for( int ida = 1; ida <= 9; ida++ )
            {
                int SKID;
				switch(ida)
				{
				case 1: SKID = SI_ASS_CHEER_ASTE; break;
				case 2: SKID = SI_ASS_CHEER_ACCURACY; break;
				case 3: SKID = SI_ASS_CHEER_CATSREFLEX;
				case 4: SKID = SI_ASS_CHEER_QUICKSTEP; break;
				case 5: SKID = SI_ASS_CHEER_BEEFUP; break;
				case 6: SKID = SI_ASS_CHEER_MENTALSIGN; break;
				case 7: SKID = SI_ASS_CHEER_CANNONBALL; break;
				case 8: SKID = SI_ASS_CHEER_HEAPUP; break;
				case 9: SKID = SI_ASS_HEAL_PATIENCE; break;
				default: break;
				}
spart wesentlich platz und ist übersichtlicher
08/03/2012 12:45 Aspectus#14
Quote:
Originally Posted by Jopsi332 View Post
anstatt
Code:
for( int ida = 1; ida <= 9; ida++ )
            {
                int SKID;
                if ( ida == 1 )
                    SKID = SI_ASS_CHEER_HASTE;
                else if ( ida == 2 )
                    SKID = SI_ASS_CHEER_ACCURACY;
                else if ( ida == 3 )
                    SKID = SI_ASS_CHEER_CATSREFLEX;
                else if ( ida == 4 )
                    SKID = SI_ASS_CHEER_QUICKSTEP;
                else if ( ida == 5 )
                    SKID = SI_ASS_CHEER_BEEFUP;
                else if ( ida == 6 )
                    SKID = SI_ASS_CHEER_MENTALSIGN;
                else if ( ida == 7 )
                    SKID = SI_ASS_CHEER_CANNONBALL;
                else if ( ida == 8 )
                    SKID = SI_ASS_CHEER_HEAPUP;
                else if ( ida == 9 )
                    SKID = SI_ASS_HEAL_PATIENCE;
                else
                    break;
würd ich das ja eher so machen

Code:
for( int ida = 1; ida <= 9; ida++ )
            {
                int SKID;
				switch(ida)
				{
				case 1: SKID = SI_ASS_CHEER_ASTE; break;
				case 2: SKID = SI_ASS_CHEER_ACCURACY; break;
				case 3: SKID = SI_ASS_CHEER_CATSREFLEX;
				case 4: SKID = SI_ASS_CHEER_QUICKSTEP; break;
				case 5: SKID = SI_ASS_CHEER_BEEFUP; break;
				case 6: SKID = SI_ASS_CHEER_MENTALSIGN; break;
				case 7: SKID = SI_ASS_CHEER_CANNONBALL; break;
				case 8: SKID = SI_ASS_CHEER_HEAPUP; break;
				case 9: SKID = SI_ASS_HEAL_PATIENCE; break;
				default: break;
				}
spart wesentlich platz und ist übersichtlicher


Achso, wieso zum Teufel eine Schleife?

PHP Code:
#ifdef    __GW_BUFF
    
            
pUser->DoBuff(SI_ASS_CHEER_HEAPUP20pUser); 
            
pUser->DoBuff(SI_ASS_CHEER_QUICKSTEP20pUser); 
            
pUser->DoBuff(SI_ASS_HEAL_PATIENCE20pUser); 
            
pUser->DoBuff(SI_ASS_CHEER_CATSREFLEX20pUser); 
            
pUser->DoBuff(SI_ASS_CHEER_CANNONBALL20pUser);
            
pUser->DoBuff(SI_ASS_CHEER_MENTALSIGN20pUser); 
            
pUser->DoBuff(SI_ASS_CHEER_BEEFUP20pUser); 
            
pUser->DoBuff(SI_ASS_CHEER_ACCURACY20pUser); 
            
pUser->DoBuff(SI_RIN_SUP_SPIRITUREFORTUNE10pUser); 
            
pUser->DoBuff(SI_ASS_CHEER_HASTE20pUser); 
            
pUser->AddText("Have Fun!");
        
#endif 
Es gibt doch die DoBuff Funktion? Dann benutzt sie auch, lol.

Der ganze Source der da steht ist Crap. Ihr müsst einfach nur


PHP Code:
#ifdef    __GW_BUFF
    
            
pUser->DoBuff(SI_ASS_CHEER_HEAPUP20pUser); 
            
pUser->DoBuff(SI_ASS_CHEER_QUICKSTEP20pUser); 
            
pUser->DoBuff(SI_ASS_HEAL_PATIENCE20pUser); 
            
pUser->DoBuff(SI_ASS_CHEER_CATSREFLEX20pUser); 
            
pUser->DoBuff(SI_ASS_CHEER_CANNONBALL20pUser);
            
pUser->DoBuff(SI_ASS_CHEER_MENTALSIGN20pUser); 
            
pUser->DoBuff(SI_ASS_CHEER_BEEFUP20pUser); 
            
pUser->DoBuff(SI_ASS_CHEER_ACCURACY20pUser); 
            
pUser->DoBuff(SI_RIN_SUP_SPIRITUREFORTUNE10pUser); 
            
pUser->DoBuff(SI_ASS_CHEER_HASTE20pUser); 
            
pUser->AddText("Have Fun!");
        
#endif 
Das hier, dort adden, wo es im Tut beschrieben ist (auch dort wo die andere Scheiße steht von wegen for( int i = 0; ..... ). Aber nicht diese Scheiße mit der Schleife, das ist Crap.
08/03/2012 12:50 Jopsi332#15
ich habs nur schnell überflogen und diese riesen if elseif dinger gesehen. das war das einzige was mir so ins augegefallen ist was man schnell abändern könnte. aber sonst hastu vollkommen recht ^^