hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.03.28. 16:19



Jelenlévő felhasználók

Jelenleg 225 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 225 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználó az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 2 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Top 3 VIP
HozzászólásElküldve: 2017.07.27. 12:44 
Offline
Jómunkásember
Avatar

Csatlakozott: 2013.01.15. 19:04
Hozzászólások: 407
Megköszönt másnak: 17 alkalommal
Megköszönték neki: 176 alkalommal
Üdv!

Szeretném megosztani veletek ezt az egyszerű kis plugint, lényege, hogy egy hónapon keresztül számolja az adott játékos pontjait, pontot ölésekért kaphatsz (fejlövés, kés ölés, gránát ölés 2 pont, összes többi 1 pont). A következő hónap 1. napján az első 3 játékos aki a legtöbb ponttal rendelkezik automatikusan VIP tagságban részesül, amely a következő sorsolásig érvényes. Sorsolás után a rendszer törli az összes játékosok eredményeit és az egész dolog kezdődik elölről (0 ponttal kezdve számolja újra a pontokat 1 hónapon keresztül).

Beállítások:
A plugin MYSQL mentést használ, így meg kell adni a mysql elérhetőségeket a pluginban.
12-15. sor:
"Host", // HOST
"Username", // USERNAME
"Password", // PASSWORD
"Database" // DATABASE

Sorsolás után a jogokat a users.ini-ben adja hozzá steam id alapján, ezért a users.ini első 4 sorát üresen kell hagyni, ezeket a plugin fogja kitölteni.
Jogokat amiket automatikusan megkap a játékos a plugin 4. sorában kell állítani (#define FLAGS "t").

Parancsok:
/ptop15 - megtekintheted a legtöbb ponttal rendelkező 15 játékost (motd ablak)
/prank - kiírja chatben a helyezésed a többi jetékos közül
/pontok - kiírja chatben a jelenlegi pontszámod

  1. #include < amxmodx >
  2. #include < sqlx >
  3.  
  4. #define FLAGS "t"
  5.  
  6. #pragma semicolon 1
  7.  
  8. new const g_sPrefix[ ] = "hlmod.hu";
  9.  
  10. new const g_sSQLInfos[ ][ ] =
  11. {
  12.     "Host",     // HOST
  13.     "Username", // USERNAME
  14.     "Password", // PASSWORD
  15.     "Database"  // DATABASE
  16. };
  17.  
  18. new Handle: g_hSqlTuple;
  19. new g_iPoints[ MAX_PLAYERS ], g_sAuthId[ MAX_PLAYERS ][ 32 ], g_iSavedMonth;
  20.  
  21. public plugin_init( )
  22. {
  23.     register_plugin( "Top 3 VIP (Sql)", "1.0", "Demon" );
  24.     register_cvar( "Top 3 VIP (Sql)", "By Demon", FCVAR_SERVER );
  25.    
  26.     if ( InitSQL( ) )
  27.     {
  28.         Load( );
  29.        
  30.         register_concmd( "say /ptop15", "cmdPTop15" );
  31.         register_concmd( "say /prank", "cmdPRank" );
  32.         register_concmd( "say /pontok", "cmdMyPoints" );
  33.         register_concmd( "say_team /ptop15", "cmdPTop15" );
  34.         register_concmd( "say_team /prank", "cmdPRank" );
  35.         register_concmd( "say_team /pontok", "cmdMyPoints" );
  36.        
  37.         register_event( "DeathMsg", "onDeath", "a" );
  38.        
  39.         set_task( 60.0, "Check", 56789, _, _, "b" );
  40.         set_task( 180.0, "Advertising", 98765, _, _, "b" );
  41.     }
  42. }
  43.  
  44. public cmdPTop15( iPlayerId ) { LoadDatas( iPlayerId, 3 ); }
  45. public cmdPRank( iPlayerId ) { LoadDatas( iPlayerId, 2 ); }
  46. public cmdMyPoints( iPlayerId ) { client_print_color( iPlayerId, iPlayerId, "^4[%s] ^1Pontjaid száma: ^3%d^1.", g_sPrefix, g_iPoints[ iPlayerId ] ); }
  47.  
  48. InitSQL( )
  49. {
  50.     g_hSqlTuple = SQL_MakeDbTuple( g_sSQLInfos[ 0 ], g_sSQLInfos[ 1 ], g_sSQLInfos[ 2 ], g_sSQLInfos[ 3 ] );
  51.    
  52.     if( g_hSqlTuple == Empty_Handle ) return -1;
  53.    
  54.     new iError, sError[ 128 ];
  55.     new Handle: hDb = SQL_Connect( g_hSqlTuple, iError, sError, charsmax( sError ) );
  56.    
  57.     if( hDb == Empty_Handle )
  58.     {
  59.         log_amx( "Nem lehet csatlakozni az adatbazishoz: (%d) %s", iError, sError );
  60.         return -1;
  61.     }
  62.    
  63.     new Handle: hQuery = SQL_PrepareQuery( hDb, "CREATE TABLE IF NOT EXISTS `point_system` (`authid` varchar(32) NOT NULL PRIMARY KEY, `username` varchar(32) NOT NULL, `points` INT(11) NOT NULL);" );
  64.    
  65.     if( !SQL_Execute( hQuery ) )
  66.     {
  67.         SQL_QueryError( hQuery, sError, charsmax( sError ) );
  68.         log_amx( "Tabla letrehozas sikertelen: %s", sError );
  69.         return -1;
  70.     }
  71.    
  72.     SQL_FreeHandle( hQuery );
  73.     SQL_FreeHandle( hDb );
  74.     return 1;
  75. }
  76.  
  77. public SaveDatas( iPlayerId, iMode )
  78. {
  79.     static sText[ 512 ], sName[ 32 ];
  80.     get_user_name( iPlayerId, sName, charsmax( sName ) );
  81.     MakeStringSQLSafe( sName, charsmax( sName ) );
  82.    
  83.     if ( iMode == 1 ) formatex( sText, charsmax( sText ), "REPLACE INTO `point_system` (`authid`,`username`,`points`) VALUES (^"%s^", ^"%s^", %d);", g_sAuthId[ iPlayerId ], sName, g_iPoints[ iPlayerId ] );
  84.     else
  85.     {
  86.         arrayset( g_iPoints, 0, sizeof( g_iPoints ) );
  87.         formatex( sText, charsmax( sText ), "TRUNCATE `point_system`;" );
  88.     }
  89.    
  90.     SQL_ThreadQuery( g_hSqlTuple, "ThreadHandler", sText, { 0 }, 1 );
  91. }
  92.  
  93. public LoadDatas( iPlayerId, iMode )
  94. {
  95.     static sText[ 128 ], iArray[ 1 ];
  96.     iArray[ 0 ] = iPlayerId;
  97.    
  98.     switch( iMode )
  99.     {
  100.         case 1: formatex( sText, charsmax( sText ), "SELECT `points` FROM `point_system` WHERE `authid` = ^"%s^";", g_sAuthId[ iPlayerId ] );
  101.         case 2:
  102.         {
  103.             iArray[ 0 ] += 100;
  104.             formatex( sText, charsmax( sText ), "SELECT COUNT(*) AS players, rank.num AS prank FROM `point_system`, (SELECT COUNT(*) AS num FROM `point_system` WHERE `points` > %d ) AS rank;", g_iPoints[ iPlayerId ] );
  105.         }
  106.         case 3:
  107.         {
  108.             iArray[ 0 ] += 200;
  109.             formatex( sText, charsmax( sText ), "SELECT `points`, `username` FROM `point_system` ORDER BY `points` DESC LIMIT 15;" );
  110.         }
  111.         case 4:
  112.         {
  113.             iArray[ 0 ] = 300;
  114.             formatex( sText, charsmax( sText ), "SELECT `authid`, `username` FROM `point_system` ORDER BY `points` DESC LIMIT 3;" );
  115.         }
  116.     }
  117.     SQL_ThreadQuery( g_hSqlTuple, "ThreadHandler", sText, iArray, sizeof ( iArray ) );
  118. }
  119.  
  120. public ThreadHandler( iFailState, Handle: hQuery, const sError[ ], iError, const iARRAY[ ], iArraySize, Float: fQueueTime )
  121. {
  122.     switch( iFailState )
  123.     {
  124.         case TQUERY_CONNECT_FAILED:
  125.         {
  126.             log_amx( "Nem lehet csatlakozni az adatbazishoz: (%d) %s", iError, sError );
  127.             set_fail_state( "Nem lehet csatlakozni az adatbazishoz: (%d) %s", iError, sError );
  128.         }
  129.         case TQUERY_QUERY_FAILED:
  130.         {
  131.             log_amx( "Hibas lekerdezes: (%d) %s", iError, sError );
  132.             return;
  133.         }
  134.     }
  135.    
  136.     new iPlayerId = iARRAY[ 0 ];
  137.     if ( iPlayerId )
  138.     {
  139.         if ( iPlayerId < 100 )
  140.         {
  141.             if ( SQL_NumResults( hQuery ) > 0 )
  142.                 g_iPoints[ iPlayerId ] = SQL_ReadResult( hQuery, SQL_FieldNameToNum( hQuery, "points" ) );
  143.         }
  144.         else if ( iPlayerId < 200 )
  145.         {
  146.             iPlayerId -= 100;
  147.             new iRank = SQL_ReadResult( hQuery, SQL_FieldNameToNum( hQuery, "prank" ) );
  148.             new iPlayers = SQL_ReadResult( hQuery, SQL_FieldNameToNum( hQuery, "players" ) );
  149.             client_print_color( iPlayerId, iPlayerId, "^4[%s] ^1Te pont rankod ^3%d ^1a ^3%d^1-ból/bõl ^3%d ^1ponttal.", g_sPrefix, iRank == 0 ? 1 : iRank, iPlayers == 0 ? 1 : iPlayers, g_iPoints[ iPlayerId ] );
  150.         }
  151.         else if ( iPlayerId < 300 )
  152.         {
  153.             static iLen, sMotd[ 2048 ], sName[ 32 ], i, iPoints, iMLen = charsmax( sMotd );
  154.             iLen = 0;
  155.            
  156.             iPlayerId -= 200;
  157.        
  158.             iLen = formatex( sMotd, iMLen, "<meta charset=utf-8><body bgcolor=#000000><font color=#FFB000><pre>" );
  159.             iLen += formatex( sMotd[ iLen ], iMLen - iLen, "%2s %-22.22s %6s^n", "#", "Név", "Pont" );
  160.            
  161.             i = 1;
  162.             while ( SQL_MoreResults( hQuery ) )
  163.             {
  164.                 SQL_ReadResult( hQuery, SQL_FieldNameToNum( hQuery, "username" ), sName, charsmax( sName ) );
  165.                 iPoints = SQL_ReadResult( hQuery, SQL_FieldNameToNum( hQuery, "points" ) );
  166.                 switch ( i )
  167.                 {
  168.                     case 1: iLen += formatex( sMotd[iLen], iMLen - iLen, "<font color=ff0bb7>%2d %-22.22s %d</font>^n", i, sName, iPoints );
  169.                     case 2: iLen += formatex( sMotd[iLen], iMLen - iLen, "<font color=#07fcff>%2d %-22.22s %d</font>^n", i, sName, iPoints );
  170.                     case 3: iLen += formatex( sMotd[iLen], iMLen - iLen, "<font color=#0BF402>%2d %-22.22s %d</font>^n", i, sName, iPoints );
  171.                     default: iLen += formatex( sMotd[iLen], iMLen - iLen, "%2d %-22.22s %d^n", i, sName, iPoints );
  172.                 }
  173.                
  174.                 ++i;   
  175.                 SQL_NextRow( hQuery );
  176.             }
  177.            
  178.             show_motd( iPlayerId, sMotd, "Pont TOP15" );
  179.         }
  180.         else
  181.         {
  182.             new sFile[ 64 ] = "addons/amxmodx/configs/users.ini";
  183.             new pFile = fopen( sFile, "rt" );
  184.            
  185.             if ( pFile )
  186.             {  
  187.                 new sNewLine[ 128 ], i = 1, sName[ 32 ], sAuthId[ 32 ];
  188.                 write_file( sFile, "; VIP rendszer altal sorsolt VIP tagok: ", 0 );
  189.                 if ( SQL_NumResults( hQuery ) > 0 )
  190.                 {
  191.                     while ( SQL_MoreResults( hQuery ) )
  192.                     {
  193.                         SQL_ReadResult( hQuery, SQL_FieldNameToNum( hQuery, "username" ), sName, charsmax( sName ) );
  194.                         SQL_ReadResult( hQuery, SQL_FieldNameToNum( hQuery, "authid" ), sAuthId, charsmax( sAuthId ) );
  195.                        
  196.                         formatex( sNewLine, charsmax( sNewLine ), "^"%s^" ^"^" ^"%s^" ^"ce^" //%s", sAuthId, FLAGS, sName );
  197.                         write_file( sFile, sNewLine, i );
  198.                         client_print_color( 0, print_team_default, "^4[%s] ^3%s VIP tagságban részesültélt mivel benne van a PTOP3-ban (rankja: ^4PTOP%d^3).", g_sPrefix, sName, i );
  199.                        
  200.                         ++i;
  201.                        
  202.                         SQL_NextRow( hQuery );
  203.                     }
  204.                 }
  205.                 else
  206.                 {
  207.                     write_file( sFile, "", 1 );
  208.                     write_file( sFile, "", 2 );
  209.                     write_file( sFile, "", 3 );
  210.                 }
  211.                 Save( );
  212.                 server_cmd( "amx_reloadadmins" );
  213.                 SaveDatas( 0, 2 );
  214.                 if ( task_exists( 56789 ) ) remove_task( 56789 );
  215.                
  216.                 fclose( pFile );
  217.             }
  218.         }
  219.     }
  220.    
  221.     return;
  222. }
  223.  
  224. public client_putinserver( iPlayerId )
  225. {
  226.     g_iPoints[ iPlayerId ] = 0;
  227.     g_sAuthId[ iPlayerId ][ 0 ] = EOS;
  228.    
  229.     if ( is_user_bot( iPlayerId ) || is_user_hltv( iPlayerId ) ) return;
  230.    
  231.     get_user_authid( iPlayerId, g_sAuthId[ iPlayerId ], charsmax( g_sAuthId[ ] ) );
  232.    
  233.     LoadDatas( iPlayerId, 1 );
  234. }
  235.  
  236. public Advertising( )
  237. {
  238.     static iAdv = -1;
  239.     ++iAdv;
  240.     switch( iAdv )
  241.     {
  242.         case 0: client_print_color( 0, print_team_default, "^4[%s] ^3Minden hónap 1. napján a PTOP3 játékos VIP tagságban részesül.", g_sPrefix );
  243.         case 1:
  244.         {
  245.             static sMonth[ 5 ], sDay[ 5 ], sYear[ 7 ], iMonth, iDay, iYear;
  246.             get_time( "%d", sDay, charsmax( sDay )  );
  247.             get_time( "%m", sMonth, charsmax( sMonth ) );
  248.             get_time( "%Y", sYear, charsmax( sYear ) );
  249.            
  250.             iMonth = str_to_num( sMonth );
  251.             iDay = str_to_num( sDay );
  252.             iYear = str_to_num( sYear );
  253.            
  254.             client_print_color( 0, print_team_default, "^4[%s] ^1Még ^3%d nap ^1van a következõ VIP sorsolásig.", g_sPrefix, ( GetDaysInMonth( iMonth, iYear ) - iDay ) );
  255.         }
  256.         case 2: client_print_color( 0, print_team_default, "^4[%s] ^1A pont rankod megtekintéséhez írd be, hogy ^3/prank^1.", g_sPrefix );
  257.         case 3: client_print_color( 0, print_team_default, "^4[%s] ^1A Pont TOP15 megtekintéséhez írd be, hogy ^3/ptop15^1.", g_sPrefix );
  258.         default: iAdv = -1;
  259.     }
  260. }
  261.  
  262. public onDeath( )
  263. {
  264.     new iKiller = read_data( 1 );
  265.    
  266.     if ( is_user_bot( iKiller ) ) return;
  267.    
  268.     new iVictim = read_data( 2 );
  269.     new iHs = read_data( 3 );
  270.     new bTK = get_user_team( iKiller ) == get_user_team( iVictim );
  271.     new sWpn[ 3 ];
  272.     read_data( 4, sWpn, charsmax( sWpn ) );
  273.    
  274.     if ( iKiller != iVictim )
  275.     {
  276.         if ( !bTK && !iHs && sWpn[ 1 ] != 'r' && sWpn[ 0 ] != 'k' ) g_iPoints[ iKiller ] += 1;
  277.         else if ( !bTK && ( iHs || sWpn[ 1 ] == 'r' || sWpn[ 0 ] == 'k' ) ) g_iPoints[ iKiller ] += 2;
  278.        
  279.         SaveDatas( iKiller, 1 );
  280.     }
  281. }
  282.  
  283. public Check( )
  284. {  
  285.     static sDay[ 5 ], sMonth[ 5 ], iDay, iMonth;
  286.     get_time( "%d", sDay, charsmax( sDay ) );
  287.     get_time( "%m", sMonth, charsmax( sMonth ) );
  288.    
  289.     iDay = str_to_num( sDay );
  290.     iMonth = str_to_num( sMonth );
  291.    
  292.     if ( iDay > 1 )
  293.         if ( task_exists( 56789 ) ) remove_task( 56789 );
  294.    
  295.     if ( iMonth == g_iSavedMonth || iDay != 1 ) return;
  296.     LoadDatas( 0, 4 );
  297. }
  298.  
  299. public Save( )
  300. {
  301.     new sMonth[ 5 ], iMonth, sFile[ 200 ], sNewLine[ 16 ];
  302.     get_time( "%m", sMonth, charsmax( sMonth ) );
  303.            
  304.     iMonth = g_iSavedMonth = str_to_num( sMonth );
  305.    
  306.     format( sFile, charsmax( sFile ), "addons/amxmodx/configs/pontrendszer_by_demon", sFile);
  307.  
  308.     if ( !dir_exists( sFile ) ) mkdir( sFile );
  309.    
  310.     format( sFile, 199, "%s/honap.txt", sFile );
  311.    
  312.     formatex( sNewLine, charsmax( sNewLine ), "^"%d^"", iMonth );
  313.     write_file( sFile, sNewLine, 0 );
  314. }
  315.  
  316. public Load( )
  317. {
  318.     new pFile  = fopen( "addons/amxmodx/configs/pontrendszer_by_demon/honap.txt", "rt" );
  319.    
  320.     if ( pFile )
  321.     {
  322.         new sLine[ 8 ];
  323.         fgets( pFile, sLine, charsmax( sLine ) );
  324.        
  325.         trim( sLine );
  326.         remove_quotes( sLine );
  327.         g_iSavedMonth = str_to_num( sLine );
  328.        
  329.         fclose( pFile );
  330.     }
  331.     else g_iSavedMonth = 0;
  332. }
  333.  
  334. public plugin_end( ) { SQL_FreeHandle( g_hSqlTuple ); }
  335.  
  336. stock GetDaysInMonth( iMonth, iYear )
  337. {
  338.     switch( iMonth )
  339.     {
  340.         case 1, 3, 5, 7, 8, 10, 12: return 31;
  341.         case 2: return ( ( iYear % 4 ) == 0 ) ? 29 : 28;
  342.     }
  343.     return 30;
  344. }
  345.  
  346. stock MakeStringSQLSafe( sName[ ], iLen )
  347. {
  348.     replace_all( sName, iLen, "'", "*" );
  349.     replace_all( sName, iLen, "^"", "*" );
  350.     replace_all( sName, iLen, "`", "*" );
  351. }


A plugin még nem volt tesztelve, ezért töltöttem fel ide és nem a pluginok közé adtam hozzá.
Ha valaki használná és bármi hibát észlelne, akkor írjon és javítom.


A hozzászólást 2 alkalommal szerkesztették, utoljára demon 2017.07.27. 15:16-kor.

Ők köszönték meg demon nek ezt a hozzászólást (összesen 2): Stew (2017.07.27. 15:02) • kengurumancs (2017.08.01. 10:17)
  Népszerűség: 4.55%


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Top 3 VIP
HozzászólásElküldve: 2017.07.27. 15:02 
Offline
Beavatott
Avatar

Csatlakozott: 2017.07.16. 10:56
Hozzászólások: 91
Megköszönt másnak: 1 alkalommal
Megköszönték neki: 4 alkalommal
Szia, nagyon szép munka.
Köszi

UI:.
19-sor hibás
new g_iPoints[ MAX_PLAYERS ], g_sAuthId[ MAX_PLAYERS ][ 32 ], g_iSavedMonth;

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 2 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 6 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole