[Release] Arena Score 1.2

    • [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-Quellcode

      1. #ifdef __ARENA_SCORE
      2. ON_MSG( PACKETTYPE_ARENA_UPDATE, OnSendArenaScore );
      3. ON_MSG( PACKETTYPE_ARENA_GET, OnGetArenaScore );
      4. #endif



      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. void CDPTrans::OnGetArenaScore( CAr & ar, DPID dpid, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
      3. {
      4. LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus = g_DbManager.AllocRequest();
      5. g_DbManager.MakeRequest( lpDbOverlappedPlus, lpBuf, uBufSize );
      6. lpDbOverlappedPlus->dpid = dpid;
      7. lpDbOverlappedPlus->nQueryMode = LOAD_ARENASCORE;
      8. PostQueuedCompletionStatus( g_DbManager.m_hIOCPPut, 1, NULL, &lpDbOverlappedPlus->Overlapped );
      9. }
      10. void CDPTrans::OnSendArenaScore( CAr & ar, DPID dpid, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
      11. {
      12. LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus = g_DbManager.AllocRequest();
      13. g_DbManager.MakeRequest( lpDbOverlappedPlus, lpBuf, uBufSize );
      14. lpDbOverlappedPlus->dpid = dpid;
      15. lpDbOverlappedPlus->nQueryMode = SAVE_ARENASCORE;
      16. PostQueuedCompletionStatus( g_DbManager.m_hIOCPPut, 1, NULL, &lpDbOverlappedPlus->Overlapped );
      17. }
      18. void CDPTrans::SendArenaScore( u_long idPlayer, int nAkill, int nAdeath )
      19. {
      20. BEFORESENDDUAL( ar, PACKETTYPE_ARENA_GET, DPID_UNKNOWN, DPID_UNKNOWN );
      21. ar << idPlayer << nAkill << nAdeath;
      22. SEND( ar, this, DPID_ALLPLAYERS );
      23. }
      24. #endif
      Alles anzeigen


      dpTrans.h

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. void OnGetArenaScore( CAr & ar, DPID dpid, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize );
      3. void OnSendArenaScore( CAr & ar, DPID dpid, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize );
      4. void SendArenaScore( u_long idPlayer, int nAkill, int nAdeath );
      5. #endif


      DbManager.cpp

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. case LOAD_ARENASCORE:
      3. LoadArenaScore( pQueryChar, lpDbOverlappedPlus );
      4. break;
      5. case SAVE_ARENASCORE:
      6. SaveArenaScore( pQueryChar, lpDbOverlappedPlus );
      7. break;
      8. #endif


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. void CDbManager::LoadArenaScore( CQuery *qry, LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus )
      3. {
      4. CAr arRead( lpDbOverlappedPlus->lpBuf, lpDbOverlappedPlus->uBufSize );
      5. u_long nidPlayer;
      6. int nArenaKills;
      7. int nArenaDeaths;
      8. arRead >> nidPlayer;
      9. char szQuery[QUERY_SIZE] = {0,};
      10. sprintf( szQuery, "uspLoadArena @serverindex='%02d', @idPlayer='%07d' ",g_appInfo.dwSys, nidPlayer ); //can add arguments directly %s %d..
      11. //RUN QUERY
      12. //RUN QUERY
      13. if( FALSE == qry->Exec( szQuery ) )
      14. {
      15. WriteLog( "%s, %d\t%s", __FILE__, __LINE__, szQuery );
      16. }
      17. while( qry->Fetch() )
      18. {
      19. nArenaKills = qry->GetInt("nArenaKills");
      20. nArenaDeaths = qry->GetInt("nArenaDeaths");
      21. }
      22. CDPTrans::GetInstance()->SendArenaScore( nidPlayer, nArenaKills, nArenaDeaths );
      23. FreeRequest( lpDbOverlappedPlus );
      24. }
      25. void CDbManager::SaveArenaScore( CQuery *qry, LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus )
      26. {
      27. CAr arRead( lpDbOverlappedPlus->lpBuf, lpDbOverlappedPlus->uBufSize );
      28. u_long idPlayer;
      29. int nArenaKills;
      30. int nArenaDeaths;
      31. BOOL bCreate;
      32. arRead >> idPlayer >> nArenaKills >> nArenaDeaths >> bCreate;
      33. char szQuery[250] = {0,};
      34. if( !bCreate )
      35. sprintf( szQuery, "uspSaveArena @serverindex='%02d', @idPlayer='%07d', @nArenaKills='%d', @nArenaDeaths='%d'", g_appInfo.dwSys, idPlayer, nArenaKills, nArenaDeaths );
      36. else
      37. sprintf( szQuery, "TRUNCATE TABLE dbo.ArenaScore");
      38. if( FALSE == qry->Exec( szQuery ) )
      39. {
      40. WriteLog( "%s, %d\t%s", __FILE__, __LINE__, szQuery );
      41. FreeRequest( lpDbOverlappedPlus );
      42. return;
      43. }
      44. FreeRequest( lpDbOverlappedPlus );
      45. }
      46. #endif
      Alles anzeigen


      DbManager.h

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. ,LOAD_ARENASCORE
      3. ,SAVE_ARENASCORE
      4. #endif


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. void LoadArenaScore( CQuery *qry, LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus );
      3. void SaveArenaScore( CQuery *qry, LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus );
      4. #endif



      CLIENT:

      DpClient.cpp

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. #include "ArenaScoreClient.h"
      3. extern CArenaScore g_ArenaScore;
      4. #endif


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. case SNAPSHOTTYPE_ARENA_UPDATE: OnArenaUpdate( ar ); break;
      3. #endif


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. void CDPClient::OnArenaUpdate( CAr & ar )
      3. {
      4. int nCount;
      5. ar >> nCount;
      6. g_ArenaScore.m_vecUserInfo.clear();
      7. for( int i=0; i<nCount; i++)
      8. {
      9. ARENA_INFO tmpInfo;
      10. ar.ReadString( tmpInfo.szName );
      11. ar >> tmpInfo.nKills;
      12. ar >> tmpInfo.nDeaths;
      13. ar >> tmpInfo.nPoints;
      14. ar >> tmpInfo.nKills2;
      15. ar >> tmpInfo.nDeaths2;
      16. ar >> tmpInfo.nLevel;
      17. g_ArenaScore.m_vecUserInfo.push_back( tmpInfo );
      18. }
      19. }
      20. #endif
      Alles anzeigen


      DPClient.h

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. void OnArenaUpdate( CAr & ar );
      3. #endif


      Neuz.cpp

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. m_pHeroIconArena = NULL;
      3. #endif


      PHP-Quellcode

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


      Neuz.h

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. CTexture* m_pHeroIconArena;
      3. #endif


      FuncTextCmd.cpp

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. #include "ArenaScoreWorld.h"
      3. extern CArenaScore g_ArenaScore;
      4. #endif
      5. #endif // __WORLDSERVER


      PHP-Quellcode

      1. BOOL TextCmd_ArenaAllout( CScanner& scanner )
      2. {
      3. #ifdef __WORLDSERVER
      4. #ifdef __ARENA_SCORE
      5. g_ArenaScore.m_nRemainTime = ::timeGetTime();
      6. g_ArenaScore.KickOut();
      7. #endif
      8. #endif
      9. return TRUE;
      10. }


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. ON_TEXTCMDFUNC( TextCmd_ArenaAllout, "AlloutArena", "aoa", "½Ã°£", "½Ã", TCM_SERVER, AUTH_GAMEMASTER , "½Ã°£ º¸±â [/½Ã°£]" )
      3. #endif


      WndWorld.cpp

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. #include "ArenaScoreClient.h"
      3. extern CArenaScore g_ArenaScore;
      4. #endif


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. g_ArenaScore.WorldDrawer(p2DRender);
      3. #endif


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. if( nChar == VK_TAB )
      3. g_ArenaScore.m_bDraw = !g_ArenaScore.m_bDraw;
      4. #endif


      Mover.cpp

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. #include "..\WORLDSERVER\ArenaScoreWorld.h"
      3. extern CArenaScore g_ArenaScore;
      4. #endif


      PHP-Quellcode

      1. #ifdef __WORLDSERVER
      2. #ifdef __ARENA_SCORE
      3. if( GetWorld()->IsArena() && IsPlayer() )
      4. g_ArenaScore.ArenaOnKillHook((CUser*)pAttacker,(CUser*)this);
      5. #endif // __ARENA_SCORE
      6. #endif


      MoverRender.cpp

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. #include "ArenaScoreClient.h"
      3. extern CArenaScore g_ArenaScore;
      4. #endif


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. //Arena Score
      3. if( GetWorld()->IsArena() && !strcmp( m_szName , g_ArenaScore.m_vecUserInfo[0].szName) )
      4. {
      5. pTexture = g_Neuz.m_pHeroIconArena;
      6. if( pTexture )
      7. {
      8. long oldpointx=point.x;
      9. long oldpointy=point.y;
      10. point.y -= pTexture->m_size.cy + 5;
      11. point.y = point.y+1;
      12. //point.x = point.x + 15;
      13. if(pGuild==NULL)
      14. {
      15. point.x -= cs1.cx + 27;
      16. }
      17. else
      18. {
      19. if( cs1.cx > cs2.cx )
      20. {
      21. if(this->GetGuild()->m_dwLogo!=NULL)
      22. {
      23. point.x -= cs1.cx + 52;
      24. }
      25. else
      26. {
      27. point.x -= cs1.cx + 27;
      28. }
      29. }
      30. else
      31. {
      32. if(this->GetGuild()->m_dwLogo!=NULL)
      33. {
      34. point.x -= cs2.cx + 52;
      35. }
      36. else
      37. {
      38. point.x -= cs2.cx + 27;
      39. }
      40. }
      41. }
      42. pTexture->Render( &g_Neuz.m_2DRender, point );
      43. point.x=oldpointx;
      44. point.y=oldpointy;
      45. }
      46. }
      47. #endif
      Alles anzeigen



      Worldserver:

      DPDatabaseClient.cpp

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. #include "ArenaScoreWorld.h"
      3. extern CArenaScore g_ArenaScore;
      4. #endif


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. ON_MSG( PACKETTYPE_ARENA_GET, OnGetArenaScore );
      3. #endif


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE // SendArenaUpdate
      2. if( pUser->m_nArenaKills || pUser->m_nArenaDeaths ) // Override fix.
      3. g_dpDBClient.SendArenaScore( pUser->m_idPlayer, pUser->m_nArenaKills, pUser->m_nArenaDeaths );
      4. #endif


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. void CDPDatabaseClient::OnGetArenaScore( CAr & ar, DPID, DPID )
      3. {
      4. u_long idPlayer;
      5. int nKills,nDeaths;
      6. ar >> idPlayer >> nKills >> nDeaths;
      7. CUser* pUser = g_UserMng.GetUserByPlayerID( idPlayer );
      8. if(IsValidObj(pUser))
      9. {
      10. pUser->m_nArenaKills = nKills;
      11. pUser->m_nArenaDeaths = nDeaths;
      12. //g_UserMng.AddArenaUpdateSingleUser( pUser ); // Send User joined to other Clients.
      13. }
      14. }
      15. void CDPDatabaseClient::SendArenaScore( u_long idPlayer, int nAkill , int nAdeath, BOOL bCreate )
      16. {
      17. BEFORESENDDUAL( ar, PACKETTYPE_ARENA_UPDATE, DPID_UNKNOWN, DPID_UNKNOWN );
      18. ar << idPlayer << nAkill << nAdeath << bCreate;
      19. SEND( ar, this, DPID_SERVERPLAYER );
      20. }
      21. void CDPDatabaseClient::GetArenaScore( u_long idPlayer )
      22. {
      23. BEFORESENDDUAL( ar, PACKETTYPE_ARENA_GET, DPID_UNKNOWN, DPID_UNKNOWN );
      24. ar << idPlayer;
      25. SEND( ar, this, DPID_SERVERPLAYER );
      26. }
      27. #endif
      Alles anzeigen


      DPServer.cpp

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. #include "ArenaScoreWorld.h"
      3. extern CArenaScore g_ArenaScore;
      4. #endif


      ThreadMng.cpp

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. #include "ArenaScoreWorld.h"
      3. extern CArenaScore g_ArenaScore;
      4. #endif


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. g_ArenaScore.Process();
      3. #endif


      User.cpp

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. #include "ArenaScoreWorld.h"
      3. extern CArenaScore g_ArenaScore;
      4. #endif


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. m_nArenaKills = 0;
      3. m_nArenaKills2 = 0;
      4. m_nArenaPoints = 0;
      5. m_nArenaDeaths = 0;
      6. m_nArenaDeaths2 = 0;
      7. m_nArenaIndex = NULL_ID;
      8. #endif


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. if( GetWorld()->IsArena() ) // This hook fixes the Score and ID of the player no matter where they are
      3. if( !g_ArenaScore.IsArenaUser( this ) )
      4. {
      5. g_ArenaScore.ArenaOnJoin( this ); // or how they got into thr Arena.
      6. }
      7. if( !GetWorld()->IsArena() )
      8. if( g_ArenaScore.IsArenaUser( this ) )
      9. {
      10. g_ArenaScore.ArenaOnExit( this );
      11. }
      12. #endif
      Alles anzeigen


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. void CUserMng::AddArenaUpdate()
      3. {
      4. CAr arBlock;
      5. arBlock << NULL_ID << SNAPSHOTTYPE_ARENA_UPDATE;
      6. arBlock << g_ArenaScore.m_vecUserInfo.size();
      7. for( DWORD i = 0; i < g_ArenaScore.m_vecUserInfo.size(); i++ )
      8. {
      9. arBlock.WriteString( g_ArenaScore.m_vecUserInfo[i].szName );
      10. arBlock << g_ArenaScore.m_vecUserInfo[i].nKills;
      11. arBlock << g_ArenaScore.m_vecUserInfo[i].nDeaths;
      12. arBlock << g_ArenaScore.m_vecUserInfo[i].nPoints;
      13. arBlock << g_ArenaScore.m_vecUserInfo[i].nKills2;
      14. arBlock << g_ArenaScore.m_vecUserInfo[i].nDeaths2;
      15. arBlock << g_ArenaScore.m_vecUserInfo[i].nLevel;
      16. }
      17. GETBLOCK( arBlock, lpBlock, uBlockSize );
      18. for( DWORD i = 0; i < g_ArenaScore.m_vecUserInfo.size(); i++ )
      19. {
      20. CUser* pUserReceive = prj.GetUser(g_ArenaScore.m_vecUserInfo[i].dwID);
      21. if( !pUserReceive )
      22. continue;
      23. pUserReceive->AddBlock( lpBlock, uBlockSize );
      24. }
      25. }
      26. void CUserMng::GetArenaUsers()
      27. {
      28. if( ::timeGetTime() > g_ArenaScore.m_nRejoinTime + 2000 )
      29. {
      30. map<DWORD, CUser*>::iterator it;
      31. for( it = m_users.begin(); it != m_users.end(); ++it )
      32. {
      33. CUser* pUser = it->second;
      34. if( !pUser->IsValid() )
      35. continue;
      36. if( pUser->GetWorld()->IsArena() )
      37. g_ArenaScore.NewUser( pUser );
      38. }
      39. }
      40. }
      41. #endif
      Alles anzeigen


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. if( g_ArenaScore.IsArenaUser( pUser ) )
      3. {
      4. g_ArenaScore.ArenaOnExit( pUser );
      5. DestroyPlayer( pUser );
      6. return;
      7. }
      8. #endif


      DatabaseClient.h

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. // Arena
      3. void SendArenaScore( u_long idPlayer, int nAkill , int nAdeath, BOOL bCreate = FALSE );
      4. void GetArenaScore( u_long idPlayer );
      5. void OnGetArenaScore( CAr & ar, DPID, DPID );
      6. #endif


      User.h

      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. public:
      3. //Arena Score
      4. int m_nArenaKills;
      5. int m_nArenaKills2;
      6. int m_nArenaPoints;
      7. int m_nArenaDeaths;
      8. int m_nArenaDeaths2;
      9. int m_nArenaIndex;
      10. #endif
      Alles anzeigen


      PHP-Quellcode

      1. #ifdef __ARENA_SCORE
      2. void AddArenaUpdate();
      3. void GetArenaUsers();
      4. #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
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

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

      Quellcode

      1. 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
      2. .....
      3. .....
      4. while( qry->Fetch() )
      5. {
      6. nArenaKills = qry->[COLOR=#ff0000]GetInt[/COLOR]("[COLOR=#008000]nArenaKills[/COLOR]");
      7. nArenaDeaths = qry->[COLOR=#ff0000]GetInt[/COLOR]("[COLOR=#008000]nArenaDeaths[/COLOR]");
      8. }

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

      -->

      Quellcode

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

      Something like this.

      Quellcode

      1. [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...

      Quellcode

      1. CREATE proc [dbo].[uspSaveArena]
      2. @serverindex char(2),
      3. @idPlayer char(7),
      4. @nArenaKills int,
      5. @nArenaDeaths int
      6. as
      7. set nocount on
      8. set xact_abort on
      9. update [COLOR=#ff0000]tblArenaScore[/COLOR]
      10. set nArenaKills = @nArenaKills, nArenaDeaths = @nArenaDeaths
      11. where serverindex = @serverindex and m_idPlayer = @m_idPlayer
      Alles anzeigen


      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..

      Quellcode

      1. CREATE TABLE [dbo].[tblArenaScore](
      2. [serverindex] [char](2) NULL,
      3. [m_idPlayer] [char](7) NULL,
      4. [nArenaKills] [int] NULL,
      5. [nArenaDeaths] [int] NULL
      6. )
    • Adding This Below "ArenaOnKillHook()" Should prevent anyone dual clienting on the same connection for looting rewards/kills

      Quellcode

      1. if( pAttacker->m_playAccount.lpAddr == pDefender->m_playAccount.lpAddr )
      2. 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
    • Chibox;282506 schrieb:

      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.