[Release] Arena Score 1.2

  • Einige Sachen sind nicht optimal , wenn nicht sogar grottenschlecht gelöst, aber es erfüllt seinen Zweck besser als die andern Scripts da draußen.

    Ihr dürft gerne über die miserable Qualität lästern , jedoch wüsste ich nicht warum ich ein vollkommenes Produkt releasen sollte wenn ich eine Version davon hab mit der man Spaß am basteln haben kann :)


    DATABASE:

    dpTrans.cpp:

    PHP
    #ifdef __ARENA_SCORE
        ON_MSG( PACKETTYPE_ARENA_UPDATE, OnSendArenaScore ); 
        ON_MSG( PACKETTYPE_ARENA_GET, OnGetArenaScore );
    #endif


    dpTrans.h

    PHP
    #ifdef __ARENA_SCORE
    void OnGetArenaScore( CAr & ar, DPID dpid, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize );
    void OnSendArenaScore( CAr & ar, DPID dpid, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize );
    void SendArenaScore( u_long idPlayer, int nAkill, int nAdeath );
    #endif

    DbManager.cpp

    PHP
    #ifdef __ARENA_SCORE
                case LOAD_ARENASCORE:
                    LoadArenaScore( pQueryChar, lpDbOverlappedPlus );
                    break;
                case SAVE_ARENASCORE:
                    SaveArenaScore( pQueryChar, lpDbOverlappedPlus );
                    break;
    #endif

    DbManager.h

    PHP
    #ifdef __ARENA_SCORE
        ,LOAD_ARENASCORE
        ,SAVE_ARENASCORE
    #endif
    PHP
    #ifdef __ARENA_SCORE
    void    LoadArenaScore( CQuery *qry, LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus );
    void    SaveArenaScore( CQuery *qry, LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus );
    #endif


    CLIENT:

    DpClient.cpp

    PHP
    #ifdef __ARENA_SCORE
    #include "ArenaScoreClient.h"
    extern CArenaScore g_ArenaScore;
    #endif
    PHP
    #ifdef __ARENA_SCORE
                case SNAPSHOTTYPE_ARENA_UPDATE: OnArenaUpdate( ar ); break;
    #endif

    DPClient.h

    PHP
    #ifdef __ARENA_SCORE
        void    OnArenaUpdate( CAr & ar );
    #endif

    Neuz.cpp

    PHP
    #ifdef __ARENA_SCORE
        m_pHeroIconArena = NULL;
    #endif
    PHP
    #ifdef __ARENA_SCORE
        m_pHeroIconArena = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ICON, "icon_ArenaMvp.png"), 0xffff00ff );
    #endif

    Neuz.h

    PHP
    #ifdef __ARENA_SCORE
        CTexture*                m_pHeroIconArena;
    #endif

    FuncTextCmd.cpp

    PHP
    #ifdef __ARENA_SCORE
    #include "ArenaScoreWorld.h"
    extern CArenaScore g_ArenaScore;
    #endif
    #endif    // __WORLDSERVER
    PHP
    BOOL TextCmd_ArenaAllout( CScanner& scanner )  
    { 
    #ifdef __WORLDSERVER
    #ifdef __ARENA_SCORE
                g_ArenaScore.m_nRemainTime = ::timeGetTime();
                g_ArenaScore.KickOut();
    #endif
    #endif
                return TRUE;
    }
    PHP
    #ifdef __ARENA_SCORE
        ON_TEXTCMDFUNC( TextCmd_ArenaAllout,           "AlloutArena",              "aoa",             "½Ã°£",           "½Ã",      TCM_SERVER, AUTH_GAMEMASTER      , "½Ã°£ º¸±â [/½Ã°£]" )
    #endif

    WndWorld.cpp

    PHP
    #ifdef __ARENA_SCORE
    #include "ArenaScoreClient.h"
    extern CArenaScore g_ArenaScore;
    #endif
    PHP
    #ifdef __ARENA_SCORE
        g_ArenaScore.WorldDrawer(p2DRender);
    #endif
    PHP
    #ifdef __ARENA_SCORE
            if( nChar == VK_TAB )
                g_ArenaScore.m_bDraw = !g_ArenaScore.m_bDraw;
    #endif

    Mover.cpp

    PHP
    #ifdef __ARENA_SCORE
    #include "..\WORLDSERVER\ArenaScoreWorld.h"
    extern CArenaScore g_ArenaScore;
    #endif
    PHP
    #ifdef __WORLDSERVER
    #ifdef __ARENA_SCORE
                if( GetWorld()->IsArena() && IsPlayer() )
                    g_ArenaScore.ArenaOnKillHook((CUser*)pAttacker,(CUser*)this);
    #endif    // __ARENA_SCORE
    #endif

    MoverRender.cpp

    PHP
    #ifdef __ARENA_SCORE
    #include "ArenaScoreClient.h"
    extern CArenaScore g_ArenaScore;
    #endif


    Worldserver:

    DPDatabaseClient.cpp

    PHP
    #ifdef __ARENA_SCORE
    #include "ArenaScoreWorld.h"
    extern CArenaScore g_ArenaScore;
    #endif
    PHP
    #ifdef __ARENA_SCORE
        ON_MSG( PACKETTYPE_ARENA_GET, OnGetArenaScore );
    #endif
    PHP
    #ifdef __ARENA_SCORE // SendArenaUpdate
        if( pUser->m_nArenaKills || pUser->m_nArenaDeaths ) // Override fix.
            g_dpDBClient.SendArenaScore( pUser->m_idPlayer, pUser->m_nArenaKills, pUser->m_nArenaDeaths );
    #endif

    DPServer.cpp

    PHP
    #ifdef __ARENA_SCORE
    #include "ArenaScoreWorld.h"
    extern CArenaScore g_ArenaScore;
    #endif

    ThreadMng.cpp

    PHP
    #ifdef __ARENA_SCORE
    #include "ArenaScoreWorld.h"
    extern CArenaScore g_ArenaScore;
    #endif
    PHP
    #ifdef __ARENA_SCORE
                    g_ArenaScore.Process();
    #endif

    User.cpp

    PHP
    #ifdef __ARENA_SCORE
    #include "ArenaScoreWorld.h"
    extern CArenaScore g_ArenaScore;
    #endif
    PHP
    #ifdef __ARENA_SCORE
        m_nArenaKills = 0;
        m_nArenaKills2 = 0;
        m_nArenaPoints = 0;
        m_nArenaDeaths = 0;
        m_nArenaDeaths2 = 0;
        m_nArenaIndex = NULL_ID;
    #endif
    PHP
    #ifdef __ARENA_SCORE
        if( g_ArenaScore.IsArenaUser( pUser ) )
            {
                g_ArenaScore.ArenaOnExit( pUser );
                DestroyPlayer( pUser );
                return;
            }
        #endif

    DatabaseClient.h

    PHP
    #ifdef __ARENA_SCORE
        // Arena
        void    SendArenaScore( u_long idPlayer, int nAkill , int nAdeath, BOOL bCreate = FALSE );
        void    GetArenaScore( u_long idPlayer );
        void    OnGetArenaScore(  CAr & ar, DPID, DPID );
    
    
    #endif

    User.h

    PHP
    #ifdef __ARENA_SCORE
        void            AddArenaUpdate();
        void            GetArenaUsers();
    #endif


    KernDateien:
    File-Upload.net - ArenaCore.rar

    Ich gebe keine Garantie auf die Richtigkeit der Codebausteine noch garantiere ich das davon alles in dem eigentlichen Script verwendet wird.

    Dies ist eine ungecleante und veraltete Version des eigentlichen Codes und wurde nie über einen längeren Zeitraum verwendet.

    Jeder der sich NICHT mit dem Source Code ansatzweise auskennt sollte die Finger hiervon lassen.


    Credits :

    99.9% Pumaaa ( Recode )
    0.01% lol32/caja ( Arena ~ Original Code )


    SCREEN

  • Zitat von Shuya;278863

    Könntest du in dein tut schreiben wo was an welcher stelle hin kommt?

    Wtf0x?

    Wozu ein TuT, einfacher gehts net als es dort Steht, er schreibt die Daten + den Inhalt, es kommt fast überall ganz unten hin, lol.

  • Zitat von sh4dovv;278880

    Könntest du viellecht noch die zugehörigen prozeduren und tables uploaden?

    Du hast den Source, bau sie dir daraus, ist doch einfach o.O

  • need a sql query? or don't need

    something like this

    CREATE TABLE [dbo].[ArenaScore](
    [idPlayer] [char](7) NOT NULL,
    [nArenaKills] [int] NULL,
    [nArenaDeaths] [int] NULL,
    [serverindex] [int] NULL,

  • Srsly, there are 2 usps, which simply read/update integers in a table...
    Even some SQL newbie could write them.

    Code
    sprintf( szQuery, "[COLOR=#0000ff][B]uspLoadArena[/B] [/COLOR][COLOR=#008000]@serverindex[/COLOR][COLOR=#0000FF]='%02d', [/COLOR][COLOR=#008000]@idPlayer[/COLOR][COLOR=#0000FF]='%07d'[/COLOR] ",g_appInfo.dwSys, nidPlayer );    //can add arguments directl
    .....
    .....
                while( qry->Fetch() )
                {    
                        nArenaKills    =    qry->[COLOR=#ff0000]GetInt[/COLOR]("[COLOR=#008000]nArenaKills[/COLOR]");
                        nArenaDeaths    =    qry->[COLOR=#ff0000]GetInt[/COLOR]("[COLOR=#008000]nArenaDeaths[/COLOR]");
                }


    GetInt -> Select XX values (type int) from a table.

    -->

    Code
    CREATE proc [dbo].[uspLoadArena]
        @serverindex char(2),       
        @idPlayer char(7)
    as
    set nocount on   
    
    
    Select serverindex, m_idPlayer, nArenaKills, nArenaDeaths
    from [COLOR=#ff0000]tblArenaScore[/COLOR] with (nolock)
    where serverindex = @serverindex and m_idPlayer = @m_idPlayer


    Something like this.

    Code
    [B][COLOR=#0000ff]uspSaveArena[/COLOR][/B] [COLOR=#008000]@serverindex[/COLOR]='%02d', [COLOR=#008000]@idPlayer[/COLOR]='%07d', [COLOR=#008000]@nArenaKills[/COLOR]='%d', [COLOR=#008000]@nArenaDeaths[/COLOR]='%d'


    -> Writes green values into a table...

    I just wrote them without testing, I don't know if they work as they should. But its your job to do this right when working with source code...

    And for those who need the table..

    Code
    CREATE TABLE [dbo].[tblArenaScore](
        [serverindex] [char](2) NULL,
        [m_idPlayer] [char](7) NULL,
        [nArenaKills] [int] NULL,
        [nArenaDeaths] [int] NULL
    )

    [RIGHT][SIZE=1]
    It'll take QQ to a whole new level.[/SIZE]
    [mad][/mad]
    [/RIGHT]

  • Adding This Below "ArenaOnKillHook()" Should prevent anyone dual clienting on the same connection for looting rewards/kills

    Code
    if( pAttacker->m_playAccount.lpAddr == pDefender->m_playAccount.lpAddr )
    return;


    Let me know if it works for you as i haven't had chance to 100% test it in a live server yet :)
    and if it's also not needed let me know too plz xD

  • Zitat von .:Flyff:.;282443

    In welcher DBF muss ich die Tabellen denn erstellen?
    Einfach auf master?

    Danke

    Naja, frag dich mal wo alllllllllllllles was mit CHARACTER zutun hat gespeichert wird? in der ACCOUNT_DBF natürlich.

  • HAHA, CHARACTER_01_DBF XD Aber man kann ja mal fragen :D

    Habe es in der CHARACTER_01_DBF. Tabele heißt ja dbo.ArenaScore

    Aber iwie speichter der da nichts rein.


  • Zitat von Chibox;282506

    Wo ist denn die eigeninitiative heutzutage geblieben?

    Die, ja.. die... gute Frage eigentlich :<

    Wenn nichts gespeichert wird hast du iwo etwas Vergessen oder so..

    Pumaaa: warum Sendest du vom Database Server den Score? du übergibst alle daten an den WorldServer, bei einem Update ( Kill / Death ) updated man diesen ja, und sendet ihn an DB und Client ( alle die in der Arena sind ), fertig, da braucht man eigentlich nichts über den Trans Server iwie Senden, meine meinung.

  • Das sind überbliebene Bits von einer Version inder der Score nicht nach einer Runde, sondern nach einer Woche zurückgesetzt wurde.

    Deswegen musste das ganze auch rückwertig funktionieren :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!