Guest User

gPM 1.1 by Goldkiller

a guest
Jan 1st, 2012
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 42.88 KB | None | 0 0
  1. /*****************************************************************************
  2. *
  3. *   Projekt:        gPM
  4. *   Lizenz:         GNU Version 3
  5. *   Datei:          gPM.inc
  6. *   Version:        1.1
  7. *
  8. *       gPM  -  by Daniel "Goldkiller"
  9. *
  10. *****************************************************************************/
  11.  
  12. #include <a_samp>
  13. #include <zcmd>
  14.  
  15. #define DATABASE "gPM.s3db"
  16.  
  17. #define MAX_QUERY_RESULTS 20
  18. #define MAX_EINGANG_MESSAGES MAX_QUERY_RESULTS
  19.  
  20. #define SHOW_NEXT_PAGES
  21. #define SHOW_PREVIOUS_PAGES
  22. // #define PLAY_SOUND
  23.  
  24. #define INVALID_USERID -1
  25.  
  26. #define MAX_INPUT_PAGES 5
  27. #define INPUT_SIZE 128
  28.  
  29. #define MARK_NEW_MESSAGES "*Neu"
  30. #define MARK_UNREAD_MESSAGES "*Ungelesen"
  31.  
  32. #define COLOR_WHITE 0xFFFFFFFF
  33. #define COL_WHITE "{FFFFFF}"
  34. #define COL_GREY "{88ABAB}"
  35. #define COL_BLUE "{0000FF}"
  36. #define COL_GREEN "{00FF00}"
  37. #define COL_RED "{FF0000}"
  38. #define COL_ORANGE "{FF9900}"
  39.  
  40. #define DATE_FORMAT "%d.%m.%Y"
  41.  
  42. static
  43.     g_iUserID[ MAX_PLAYERS ],
  44.     g_supUserInput[ MAX_PLAYER_NAME ],
  45.    
  46.     g_supMessageInput[ MAX_INPUT_PAGES * INPUT_SIZE ],
  47.     g_supMessageSingleInput[ INPUT_SIZE ],
  48.     g_sUserMessageInput[ MAX_PLAYERS ][ MAX_INPUT_PAGES ][ INPUT_SIZE char],
  49.     g_iUserMessageInput[ MAX_PLAYERS ],
  50.    
  51.    
  52.     g_sUserInput[ MAX_PLAYERS ][ MAX_PLAYER_NAME char ],
  53.     g_iUserInput[ MAX_PLAYERS ],
  54.     g_iRowUniqueID[ MAX_PLAYERS ][ MAX_EINGANG_MESSAGES ],
  55.    
  56.     g_iResults[ MAX_PLAYERS ],
  57.     g_iPage[ MAX_PLAYERS ],
  58.  
  59.     g_sQuery[ 128 + MAX_INPUT_PAGES * INPUT_SIZE ],
  60.     DBResult:g_dbrQuery,
  61.     DB:g_dbPM;
  62.    
  63.    
  64. enum ( <<= 1 ) {
  65.     MessageStatus_Read = 1,
  66.     MessageStatus_DEL_Sender, // del von sender ( postausgang )
  67.     MessageStatus_DEL_Empfaenger // del von empfaenger ( posteingang )
  68. }
  69.  
  70.  
  71. enum ( += 1 ) {
  72.     DELETE_MESSAGE_BY_SENDER = 0,
  73.     DELETE_MESSAGE_BY_EMPFAENGER
  74. }
  75.  
  76. enum ( += 1 ) {
  77.     DIALOG_PM_MENU = 12425,
  78.     DIALOG_PM_EINGANG,
  79.     DIALOG_PM_EINGANG_EMPTY,
  80.     DIALOG_PM_EINGANG_MSG,
  81.     DIALOG_PM_EINGANG_ENTF_ABFRAGE,
  82.     DIALOG_PM_EINGANG_FILTER,
  83.     DIALOG_PM_EINGANG_FILTER_MSG,
  84.     DIALOG_PM_EINGANG_ENTF,
  85.     DIALOG_PM_AUSGANG,
  86.     DIALOG_PM_AUSGANG_EMPTY,
  87.     DIALOG_PM_AUSGANG_MSG,
  88.     DIALOG_PM_AUSGANG_ENTF_ABFRAGE,
  89.     DIALOG_PM_AUSGANG_ENTF,
  90.     DIALOG_PM_AUSGANG_FILTER,
  91.     DIALOG_PM_AUSGANG_FILTER_MSG,
  92.     DIALOG_PM_SCHREIBEN_USER,
  93.     DIALOG_PM_SCHREIBEN_TEXT,
  94.     DIALOG_PM_SCHREIBEN_MENU,
  95.     DIALOG_PM_SCHREIBEN_VERSENDET,
  96.     DIALOG_PM_USER_UEBERSICHT,
  97.     DIALOG_PM_USER_UEBERSICHT_QUERY,
  98.     DIALOG_PM_USER_VERARBEITUNG,
  99. }
  100.  
  101. stock gPM_Init() {
  102.     g_dbPM = db_open( DATABASE );
  103.     for(new i = 0 ; i < MAX_PLAYERS ; i++) {
  104.         if( IsPlayerConnected( i ) ) {
  105.             gPM_OnPlayerConnect( i );
  106.         }
  107.     }
  108.     // gPM_AddUsers("gPM.index");
  109.     db_free_result( db_query( g_dbPM , "PRAGMA synchronous = OFF" ) );
  110.     printf("gPM <> Users: %d", gPM_GetUsers() );
  111.     printf("gPM <> Nachrichten: %d", gPM_GetNachrichten() );
  112.     return 1;
  113. }
  114.  
  115. stock gPM_Close() {
  116.     db_close( g_dbPM );
  117.     return 1;
  118. }
  119.  
  120. stock gPM_AddUsername( username[] ) {
  121.     format( g_sQuery , sizeof( g_sQuery ) , "INSERT INTO `USER` ( `Name`) VALUES ('%s')" , db_escape( username ) );
  122.     db_free_result( db_query( g_dbPM , g_sQuery ) );
  123.     printf("gPM <> Added User '%s'" , username );
  124.     return 1;
  125. }
  126.  
  127. stock gPM_OnPlayerConnect(playerid) {
  128.     new
  129.         iNewMessages,
  130.         sName[ MAX_PLAYER_NAME ];
  131.     GetPlayerName( playerid , sName , sizeof( sName ) );
  132.     g_iUserID[ playerid ] = gPM_GetUserID( sName );
  133.     g_iResults[ playerid ] = 0;
  134.     g_iPage[ playerid ] = 0;
  135.  
  136.     if( g_iUserID[playerid] == INVALID_USERID ) {
  137.         new
  138.             sString[ 128+32 ];
  139.         gPM_AddUsername( sName );
  140.         g_iUserID[ playerid ] = gPM_GetUserID( sName );
  141.         format( sString , sizeof( sString ) , "Hey %s, willkommen auf unserem Server. Probier doch unser neues Nachrichten-System aus. <> Diese Nachricht wurde automatisch versendet. <>" , db_escape( sName ) );
  142.         gPM_SendMessage( 1 , g_iUserID[ playerid ] , sString );
  143.     }
  144.     iNewMessages = gPM_GetNewMessages( g_iUserID[ playerid ] );
  145.     if( iNewMessages ) {
  146.         new
  147.             sString[ 64 ];
  148.         format( sString , sizeof( sString ) , "* gPM: Du hast %d ungelese Nachrichten im Posteingang! ( /GPM )" , iNewMessages );
  149.         SendClientMessage( playerid , COLOR_WHITE , sString );
  150.     }
  151.     return 1;
  152. }
  153.  
  154. stock gPM_OnPlayerDisconnect(playerid, reason ) {
  155.     #pragma unused reason
  156.     g_iUserID[playerid] = INVALID_USERID;
  157.     return 1;
  158. }
  159. stock gPM_GetNewMessages( userid) {
  160.     new
  161.         iRows;
  162.     format( g_sQuery , sizeof( g_sQuery ) , "SELECT * FROM `Nachricht` WHERE `EmpfaengerID` = '%d' AND NOT(`Status` & '%d' )" , userid , MessageStatus_Read );
  163.     g_dbrQuery = db_query( g_dbPM , g_sQuery );
  164.     iRows = db_num_rows( g_dbrQuery );
  165.     db_free_result( g_dbrQuery );
  166.     return iRows;
  167. }
  168.  
  169. stock gPM_GetUserID( const name[] ) {
  170.     new
  171.         sUserID[8],
  172.         iUserID = INVALID_USERID;
  173.     format( g_sQuery , sizeof( g_sQuery ) , "SELECT `UserID` FROM `USER` WHERE `Name` = '%s'" , name );
  174.     g_dbrQuery = db_query( g_dbPM , g_sQuery );
  175.     if( db_num_rows( g_dbrQuery ) > 0) {
  176.         db_get_field( g_dbrQuery , 0 , sUserID , sizeof( sUserID ) );
  177.         iUserID = strval( sUserID );
  178.     }
  179.     db_free_result( g_dbrQuery );
  180.     return iUserID;
  181. }
  182.  
  183. stock gPM_SendMessage( senderid , receiverid , const message[] ) {
  184.     format( g_sQuery , sizeof( g_sQuery ) , "INSERT INTO `Nachricht` (`SenderID`,`EmpfaengerID`,`Status`,`Tag`,`Uhrzeit`,`Text`) VALUES ('%d','%d','%d', date('now') ,time('now'),'%s')" , senderid , receiverid , 0 , message );
  185.     db_free_result( db_query( g_dbPM , g_sQuery ) );
  186.     for(new i = 0 ; i < MAX_PLAYERS ; i++) {
  187.         if( IsPlayerConnected( i ) ) {
  188.             if( g_iUserID[ i ] == receiverid ) {
  189.                 gPM_OnPlayerReceiveMessage( i , senderid , message );
  190.                 break;
  191.             }
  192.         }
  193.     }
  194.     return 1;
  195. }
  196.  
  197. stock gPM_DeleteMessage( typ , messageid) {
  198.     if( typ == DELETE_MESSAGE_BY_SENDER ) {
  199.         format( g_sQuery , sizeof( g_sQuery ) , "UPDATE `Nachricht` SET `Status` = `Status` | '%d' WHERE `NachrichtID` = '%d'" , MessageStatus_DEL_Sender , messageid);
  200.     }
  201.     else if( typ == DELETE_MESSAGE_BY_EMPFAENGER ) {
  202.         format( g_sQuery , sizeof( g_sQuery ) , "UPDATE `Nachricht` SET `Status` = `Status` | '%d' WHERE `NachrichtID` = '%d'" , MessageStatus_DEL_Empfaenger , messageid);
  203.     }
  204.     db_free_result( db_query( g_dbPM , g_sQuery ) );
  205.     return 1;
  206. }
  207.  
  208. stock gPM_OnPlayerReceiveMessage( playerid , send_userid , const message[] ) {
  209.     #pragma unused message
  210.     new
  211.         sString[ 128 ];
  212.     format( sString , sizeof( sString ) , "* gPM: Du hast eine Nachricht von %s empfangen" , gPM_GetUsername( send_userid ) );
  213.     SendClientMessage( playerid , COLOR_WHITE , sString );
  214.     #if defined PLAY_SOUND
  215.     PlayAudioStreamForPlayer( playerid , "http://03d.eu/siehabenpost.wav" ); // danke an SSL
  216.     #endif
  217.     return 1;
  218. }
  219.  
  220. stock gPM_StripMessageLines( message[ MAX_INPUT_PAGES * INPUT_SIZE ] ) {
  221.     #define SPLIT_LEN 50
  222.     new
  223.         bool:_bBasic = true,
  224.         _iParts,
  225.         _iCount,
  226.         _iTempLen = 0,
  227.         _iPos = 0,
  228.         _iTempPos = 0,
  229.         _iLen;
  230.     _iLen = strlen( message );
  231.     while( ( _iPos = strfind( message , " " , false  ,_iPos + 1) )  != -1 )  {
  232.         _iCount++;
  233.         _iTempLen += ( _iPos - _iTempPos );
  234.         _iTempPos = _iPos;
  235.         if( _iTempLen >= SPLIT_LEN ) {
  236.             strins( message , "\n" , _iPos + 1);
  237.             _iCount = 0;
  238.             _iPos += 2;
  239.             _bBasic = false;
  240.             _iTempLen = 0;
  241.         }
  242.     }
  243.     if( _bBasic ) {
  244.         _iParts = ( _iLen / SPLIT_LEN );
  245.         for( new i = 0 ; i < _iParts ; i++ ) {
  246.             strins(message,"\n", ( ( i + 1 ) * SPLIT_LEN ) );
  247.         }
  248.     }
  249.     #undef SPLIT_LEN
  250.     return message;
  251. }
  252. stock gPM_ShowDialog(playerid,dialogid, extra = -1 ) {
  253.     if( dialogid == DIALOG_PM_MENU ) {
  254.         if( gPM_GetNewMessages( g_iUserID[ playerid ] ) ) {
  255.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , ""#COL_ORANGE"gPM  Menu" , ""COL_WHITE"Posteingang "#COL_GREEN""#MARK_NEW_MESSAGES""#COL_WHITE"\nPostausgang\nNachricht Versenden\nUser Übersicht" , "Weiter" , "Schließen" );
  256.         }
  257.         else {
  258.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , ""#COL_ORANGE"gPM  Menu" , ""COL_WHITE"Posteingang\nPostausgang\nNachricht Versenden\nUser Übersicht" , "Weiter" , "Schließen" );
  259.         }
  260.         return 1;
  261.     }
  262.     else if( dialogid == DIALOG_PM_EINGANG ) {
  263.         new
  264.             sNachrichtID[ 8 ],
  265.             iNachrichtID,
  266.             sName[ MAX_PLAYER_NAME ],
  267.             iOffset,
  268.             iIndex = 0,
  269.             sStatus[ 2 ],
  270.             sTitel[ 64 ],
  271.             iStatus,
  272.             sText[ INPUT_SIZE ],
  273.             sString[ ( 45 + 4 + 16 + 40) * MAX_QUERY_RESULTS + 1],
  274.             iRows;
  275.         format( g_sQuery , sizeof( g_sQuery ) , "SELECT `NachrichtID`,`Name`,`Status`,`Text` FROM `NACHRICHT`,`USER` WHERE `EmpfaengerID` = '%d' AND `SenderID` = `UserID` AND NOT( `Status` & %d ) ORDER BY `NachrichtID` DESC;" , g_iUserID[ playerid ] , MessageStatus_DEL_Empfaenger );
  276.         g_dbrQuery = db_query( g_dbPM , g_sQuery );
  277.         g_iResults[ playerid ] = db_num_rows( g_dbrQuery );
  278.         if( g_iResults[ playerid ] ) {
  279.             sString[0] = '\0';
  280.             iOffset = g_iPage[ playerid ] * MAX_QUERY_RESULTS;
  281.             if( ( ( g_iPage[ playerid ] * MAX_QUERY_RESULTS ) + MAX_QUERY_RESULTS ) > g_iResults[ playerid ] ) {
  282.                 iRows = g_iResults[ playerid ];
  283.             }
  284.             else {
  285.                 iRows = ( g_iPage[ playerid ] * MAX_QUERY_RESULTS ) + MAX_QUERY_RESULTS;
  286.             }
  287.             if( g_iPage[ playerid ] > 0 ) {
  288.                 #if defined SHOW_PREVIOUS_PAGES
  289.                 format( sString , sizeof( sString ) , ""#COL_BLUE"<<"#COL_WHITE" Seite zurück ( %d - %d )\n" , ( iOffset - 20 ) , iOffset );
  290.                 #else
  291.                 sString = ""#COL_BLUE"<<"#COL_WHITE" Seite zurück\n";
  292.                 #endif
  293.             }
  294.             for(new i = 0 ; i < iOffset ; i++) {
  295.                 db_next_row( g_dbrQuery );
  296.             }
  297.             for(new i = iOffset ; i < iRows ; i++) {
  298.                 db_get_field( g_dbrQuery , 0 , sNachrichtID , sizeof( sNachrichtID ) );
  299.                 db_get_field( g_dbrQuery , 1 , sName , sizeof(sName ) );
  300.                 db_get_field( g_dbrQuery , 2 , sStatus , sizeof( sStatus ) );
  301.                 db_get_field( g_dbrQuery , 3 , sText , sizeof( sText ) );
  302.                 iNachrichtID = strval( sNachrichtID );
  303.                 iStatus = strval( sStatus );
  304.                 if( iStatus & MessageStatus_Read ) {
  305.                     if( strlen( sText ) > 16 ) {
  306.                         format( sString , sizeof( sString ) ,"%s%.20s - %.16s...\n" , sString , sName , sText );
  307.                     }
  308.                     else {
  309.                         format( sString , sizeof( sString ) ,"%s%.20s - %s\n" , sString , sName , sText );
  310.                     }
  311.                 }
  312.                 else  {
  313.                     if( strlen( sText ) > 16 ) {
  314.                         format( sString , sizeof( sString ) , "%s%.20s - %.16s... "#COL_GREEN""#MARK_NEW_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  315.                     }
  316.                     else {
  317.                         format( sString , sizeof( sString ) , "%s%.20s - %s "#COL_GREEN""#MARK_NEW_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  318.                     }
  319.                 }
  320.                 g_iRowUniqueID[ playerid ][ iIndex++ ] = iNachrichtID;
  321.                 db_next_row( g_dbrQuery );
  322.             }
  323.             if( iRows < g_iResults[ playerid ] ) {
  324.                 #if defined SHOW_NEXT_PAGES
  325.                 format( sString , sizeof( sString ) ,"%s"#COL_BLUE">> "#COL_WHITE"Nächste Seite ( %d - %d )\n" , sString , ( iRows + 1 ) , ( ( iRows + MAX_QUERY_RESULTS ) > g_iResults[ playerid ] ) ? g_iResults[ playerid ] : ( iRows + MAX_QUERY_RESULTS ) );
  326.                 #else
  327.                 strcat( sString ,""#COL_BLUE">> "#COL_WHITE"Nächste Seite\n", sizeof( sString ) );
  328.                 #endif
  329.             }
  330.             format( sTitel , sizeof( sTitel ) ,""#COL_ORANGE"gPM  Posteingang ( %d - %d ) / %d " , iOffset + 1, iRows , g_iResults[ playerid ] );
  331.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , sTitel , sString , "Lesen" , "Zurück" );
  332.         }
  333.         else {
  334.             ShowPlayerDialog( playerid , DIALOG_PM_EINGANG_EMPTY , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Posteingang" , ""#COL_WHITE"Du hast keine Nachrichten im Eingang!" , "Zurück" , "" );
  335.         }
  336.         db_free_result( g_dbrQuery );
  337.         return 1;
  338.     }
  339.     else if( dialogid == DIALOG_PM_AUSGANG ) {
  340.         new
  341.             sNachrichtID[ 8 ],
  342.             iNachrichtID,
  343.             iIndex = 0,
  344.             sName[MAX_PLAYER_NAME],
  345.             sStatus[ 2 ],
  346.             iStatus,
  347.             iOffset,
  348.             sTitel[ 64 ],
  349.             sText[ INPUT_SIZE ],
  350.             sString[ ( 45 + 10 + 16 + 4 + 40) * MAX_QUERY_RESULTS + 1],
  351.             iRows;
  352.         format(g_sQuery,sizeof(g_sQuery),"SELECT `NachrichtID`,`Name`,`Status`,`Text` FROM `NACHRICHT`,`USER` WHERE `SenderID` = '%d' AND `EmpfaengerID` = `UserID` AND NOT( `Status` & %d ) ORDER BY `NachrichtID` DESC" , g_iUserID[ playerid ] , MessageStatus_DEL_Sender );
  353.         g_dbrQuery = db_query( g_dbPM , g_sQuery );
  354.         g_iResults[ playerid ] = db_num_rows( g_dbrQuery );
  355.         if( g_iResults[ playerid ] ) {
  356.             sString[0] = '\0';
  357.             iOffset = g_iPage[ playerid ] * MAX_QUERY_RESULTS;
  358.             if( ( ( g_iPage[ playerid ] * MAX_QUERY_RESULTS ) + MAX_QUERY_RESULTS ) > g_iResults[ playerid ] ) {
  359.                 iRows = g_iResults[ playerid ];
  360.             }
  361.             else {
  362.                 iRows = ( g_iPage[ playerid ] * MAX_QUERY_RESULTS ) + MAX_QUERY_RESULTS;
  363.             }
  364.             if( g_iPage[ playerid ] > 0 ) {
  365.                 #if defined SHOW_PREVIOUS_PAGES
  366.                 format( sString , sizeof( sString ) , ""#COL_BLUE"<<"#COL_WHITE" Seite zurück ( %d - %d )\n" , ( iOffset - MAX_QUERY_RESULTS ) , iOffset );
  367.                 #else
  368.                 sString = ""#COL_BLUE"<<"#COL_WHITE" Seite zurück\n";
  369.                 #endif
  370.             }
  371.             for(new i = 0 ; i < iOffset ; i++) {
  372.                 db_next_row( g_dbrQuery );
  373.             }
  374.             for(new i = iOffset ; i < iRows ; i++) {
  375.                 db_get_field( g_dbrQuery , 0 , sNachrichtID , sizeof( sNachrichtID ) );
  376.                 db_get_field( g_dbrQuery , 1 , sName , sizeof( sName ) );
  377.                 db_get_field( g_dbrQuery , 2 , sStatus , sizeof( sStatus ) );
  378.                 db_get_field( g_dbrQuery , 3 , sText , sizeof( sText ) );
  379.                 iNachrichtID = strval( sNachrichtID );
  380.                 iStatus = strval( sStatus );
  381.                 if( iStatus & MessageStatus_Read ) {
  382.                     if( strlen( sText ) > 16 ) {
  383.                         format( sString , sizeof( sString ) ,"%s%.20s - %.16s...\n" , sString , sName , sText );
  384.                     }
  385.                     else {
  386.                         format( sString , sizeof( sString ) ,"%s%.20s - %s\n" , sString , sName , sText );
  387.                     }
  388.                 }
  389.                 else {
  390.                     if( strlen( sText ) > 16 ) {
  391.                         format( sString , sizeof( sString ) , "%s%.20s - %.16s... "#COL_RED""#MARK_UNREAD_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  392.                     }
  393.                     else {
  394.                         format( sString , sizeof( sString ) , "%s%.20s - %s "#COL_RED""#MARK_UNREAD_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  395.                     }
  396.                 }
  397.                 g_iRowUniqueID[ playerid ][ iIndex++ ] = iNachrichtID;
  398.                 db_next_row( g_dbrQuery );
  399.             }
  400.             if( iRows < g_iResults[ playerid ] ) {
  401.                 #if defined SHOW_NEXT_PAGES
  402.                 format( sString , sizeof( sString ) ,"%s"#COL_BLUE">> "#COL_WHITE"Nächste Seite ( %d - %d )\n" , sString , ( iRows + 1 ) , ( ( iRows + MAX_QUERY_RESULTS ) > g_iResults[ playerid ] ) ? g_iResults[ playerid ] : ( iRows + MAX_QUERY_RESULTS ));
  403.                 #else
  404.                 strcat( sString ,""#COL_BLUE">> "#COL_WHITE"Nächste Seite\n", sizeof( sString ) );
  405.                 #endif
  406.             }
  407.             format( sTitel , sizeof( sTitel ) ,""#COL_ORANGE"gPM  Postausgang ( %d - %d ) / %d " , iOffset + 1, iRows , g_iResults[ playerid ] );
  408.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , sTitel , sString , "Lesen" , "Zurück" );
  409.         }
  410.         else {
  411.             ShowPlayerDialog( playerid , DIALOG_PM_AUSGANG_EMPTY , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Postausgang" , ""#COL_WHITE"Du hast keine Nachrichten im Ausgang!" , "Zurück" , "" );
  412.         }
  413.         db_free_result( g_dbrQuery );
  414.         return 1;
  415.     }
  416.     else if( ( dialogid == DIALOG_PM_EINGANG_MSG ) || ( dialogid == DIALOG_PM_EINGANG_FILTER_MSG ) ) {
  417.         format( g_sQuery , sizeof( g_sQuery ) , "SELECT `Name`,`Status`, strftime('%s',`Tag`) AS Datum,`Uhrzeit`,`Text` FROM `NACHRICHT`,`User` WHERE `NachrichtID` = '%d' AND `UserID` = `SenderID` " , DATE_FORMAT , ( extra & 0xFFFF ) );
  418.         g_dbrQuery = db_query( g_dbPM , g_sQuery );
  419.         if( db_num_rows( g_dbrQuery ) ) {
  420.             new
  421.                 sStatus[ 2 ],
  422.                 sTag[ 12 ],
  423.                 sTitel[ 32+16+8 ],
  424.                 sName[ MAX_PLAYER_NAME ],
  425.                 sUhrzeit[ 12 ],
  426.                 iStatus,
  427.                 sNachricht[ MAX_INPUT_PAGES * INPUT_SIZE ],
  428.                 sString[ 256 + MAX_INPUT_PAGES * INPUT_SIZE ];
  429.             db_get_field( g_dbrQuery , 0 , sName , sizeof( sName ) );
  430.             db_get_field( g_dbrQuery , 1 , sStatus , sizeof( sStatus ) );
  431.             db_get_field( g_dbrQuery , 2 , sTag , sizeof( sTag ) );
  432.             db_get_field( g_dbrQuery , 3 , sUhrzeit , sizeof( sUhrzeit ) );
  433.             db_get_field( g_dbrQuery , 4 , sNachricht , sizeof( sNachricht ) );
  434.             iStatus = strval( sStatus );
  435.             db_free_result( g_dbrQuery );
  436.             if( !( iStatus & MessageStatus_Read ) ) {
  437.                 iStatus |= MessageStatus_Read;
  438.                 format(g_sQuery,sizeof(g_sQuery),"UPDATE `Nachricht` SET `Status` = '%d' WHERE NachrichtID = '%d'" , iStatus , ( extra & 0xFFFF ) );
  439.                 g_dbrQuery = db_query( g_dbPM , g_sQuery );
  440.                 db_free_result( g_dbrQuery );
  441.             }
  442.             format( sString , sizeof( sString ) , ""#COL_GREY"Von: "#COL_WHITE"%s\n"#COL_GREY"Datum: "#COL_WHITE"%s %s\n\n"#COL_GREY"Nachricht:"#COL_WHITE"\n%s\n\n" , sName , sTag , sUhrzeit , gPM_StripMessageLines( sNachricht ) );
  443.             format( sTitel , sizeof( sTitel ) , ""#COL_ORANGE"gPM  Posteingang - Nachricht (%d)" , ( ( g_iPage[ playerid ] * MAX_QUERY_RESULTS ) + (( extra >> 16 ) & 0xFFFF )) + 1);
  444.             if( dialogid == DIALOG_PM_EINGANG_MSG ) {
  445.                 g_iUserInput[ playerid ] = extra ;
  446.                 ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , sTitel , sString , "Zurück" , "Löschen" );
  447.             }
  448.             else {
  449.                 ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , sTitel , sString , "Zurück" , "" );
  450.             }
  451.         }
  452.         return 1;
  453.     }
  454.     else if( ( dialogid == DIALOG_PM_AUSGANG_MSG ) || ( dialogid == DIALOG_PM_AUSGANG_FILTER_MSG ) ) {
  455.         format( g_sQuery , sizeof( g_sQuery ) , "SELECT `Name`,`Status`, strftime('%s',`Tag`) AS Datum,`Uhrzeit`,`Text` FROM `NACHRICHT`,`User` WHERE `NachrichtID` = '%d' AND `UserID` = `EmpfaengerID`" , DATE_FORMAT , ( extra & 0xFFFF ) );
  456.         g_dbrQuery = db_query( g_dbPM , g_sQuery );
  457.         if( db_num_rows( g_dbrQuery ) ) {
  458.             new
  459.                 sStatus[ 2 ],
  460.                 sTag[ 12 ],
  461.                 sName[ MAX_PLAYER_NAME ],
  462.                 sUhrzeit[ 12 ],
  463.                 iStatus,
  464.                 sNachricht[ MAX_INPUT_PAGES * INPUT_SIZE ],
  465.                 sTitel[ 64 ],
  466.                 sString[ 256 +  MAX_INPUT_PAGES * INPUT_SIZE  ];
  467.             db_get_field( g_dbrQuery , 0 , sName , sizeof( sName ) );
  468.             db_get_field( g_dbrQuery , 1 , sStatus , sizeof( sStatus ) );
  469.             db_get_field( g_dbrQuery , 2 , sTag , sizeof( sTag ) );
  470.             db_get_field( g_dbrQuery , 3 , sUhrzeit , sizeof( sUhrzeit ) );
  471.             db_get_field( g_dbrQuery , 4 , sNachricht , sizeof( sNachricht ) );
  472.             iStatus = strval( sStatus );
  473.             db_free_result( g_dbrQuery );
  474.             format( sString , sizeof( sString ) , ""#COL_GREY"An: "#COL_WHITE"%s\n"#COL_GREY"Datum: "#COL_WHITE"%s %s\n\n"#COL_GREY"Nachricht:"#COL_WHITE"\n%s\n\n" , sName , sTag , sUhrzeit , gPM_StripMessageLines( sNachricht ) );
  475.             if( !( iStatus & MessageStatus_Read ) ) {
  476.                 format( sString , sizeof( sString ) , "%s"#COL_GREY"Status: "#COL_RED"Ungelesen" , sString );
  477.             }
  478.             else {
  479.                 format( sString , sizeof( sString ) , "%s"#COL_GREY"Status: "#COL_GREEN"Gelesen" , sString );
  480.             }
  481.             format( sTitel , sizeof( sTitel ) , ""#COL_ORANGE"gPM  Postausgang - Nachricht (%d)" , ( ( g_iPage[ playerid ] * MAX_QUERY_RESULTS ) + (( extra >> 16 ) & 0xFFFF )) + 1);
  482.             if( dialogid == DIALOG_PM_AUSGANG_MSG ) {
  483.                 g_iUserInput[ playerid ] = extra;
  484.                 ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , sTitel , sString , "Zurück" , "Löschen" );
  485.             }
  486.             else {
  487.                 ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , sTitel , sString , "Zurück" , "" );
  488.             }
  489.         }
  490.         return 1;
  491.     }
  492.     else if( dialogid == DIALOG_PM_SCHREIBEN_USER ) {
  493.         if( extra == -1 ) {
  494.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_INPUT , ""#COL_ORANGE"gPM  Nachricht Versenden - User",""#COL_WHITE"Gib unten den exakten Usernamen ein,\nan den du eine Textnachricht versenden möchtest!" , "Weiter" , "Zurück" );
  495.         }
  496.         else if(extra == 0 ) {
  497.             new
  498.                 sString[ 256 ];
  499.             strunpack( g_supUserInput , g_sUserInput[ playerid ] );
  500.             format( sString , sizeof( sString ) , ""#COL_WHITE"Der genannte User '"#COL_GREY"%s"#COL_WHITE"' konnte nicht in unserer\nDatenbank gefunden werden.\n\nGib unten den exakten Usernamen ein,\nan den du eine Textnachricht versenden möchtest!" , g_supUserInput );
  501.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_INPUT , ""#COL_ORANGE"gPM  Nachricht Versenden - User" , sString , "Weiter" , "Zurück" );
  502.         }
  503.         else if( extra == 1 ) {
  504.             ShowPlayerDialog( playerid , DIALOG_PM_SCHREIBEN_USER , DIALOG_STYLE_INPUT , ""#COL_ORANGE"gPM  Nachricht Versenden - User" , ""#COL_WHITE"Du kannst dir selber keine Nachrichten schicken!\n\nGib unten den exakten Usernamen ein,\nan den du eine Textnachricht versenden möchtest!" , "Weiter" , "Zurück" );
  505.         }
  506.         return 1;
  507.     }
  508.     else if( dialogid == DIALOG_PM_SCHREIBEN_TEXT ) {
  509.         new
  510.             sString[256 + MAX_INPUT_PAGES * INPUT_SIZE ];
  511.         g_supUserInput[ 0 ] = '\0';
  512.         strunpack( g_supUserInput , g_sUserInput[ playerid ] );
  513.         //
  514.         format(sString,sizeof(sString),""#COL_WHITE"Gib unten in das Feld die Nachricht ein,\ndie du an den User '"#COL_GREY"%s"#COL_WHITE"' versenden möchtest.\nZum Fortfahren klick auf Weiter\n\n( 1 / %d )", g_supUserInput , MAX_INPUT_PAGES );
  515.         if( g_iUserMessageInput[ playerid ] ) {
  516.             format(sString,sizeof(sString),""#COL_WHITE"Gib unten in das Feld die Nachricht ein,\ndie du an den User '"#COL_GREY"%s"#COL_WHITE"' versenden möchtest.\nZum Fortfahren klick auf Weiter", g_supUserInput );
  517.             format( sString, sizeof(sString) , "%s\n\nBisheriger Text:\n"#COL_GREY"%s\n\n"#COL_WHITE"( %d / %d )" , sString , gPM_StripMessageLines( gPM_MergeMessages( playerid ) ) , ( g_iUserMessageInput[ playerid ] + 1 ) , MAX_INPUT_PAGES );
  518.         }
  519.         ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_INPUT , ""#COL_ORANGE"gPM  Nachricht Versenden - Nachricht" , sString , "Weiter" , "Zurück" );
  520.         return 1;
  521.     }
  522.     else if( dialogid == DIALOG_PM_SCHREIBEN_VERSENDET ) {
  523.         new
  524.             sString[ 256 ];
  525.         strunpack( g_supUserInput , g_sUserInput[ playerid ] );
  526.         format( sString , sizeof(sString) , ""#COL_WHITE"Deine Nachricht wurde erfolgreich an den User '"#COL_GREY"%s"#COL_WHITE"' versendet!\nDu findest sie in deinem Postausgang" , g_supUserInput );
  527.         ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Nachricht Versenden - Versendet" , sString , "Hauptmenu" , "" );
  528.         return 1;
  529.     }
  530.     else if( dialogid == DIALOG_PM_USER_UEBERSICHT ) {
  531.         if( extra == -1 ) {
  532.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_INPUT , ""#COL_ORANGE"gPM   User Übersicht" , ""#COL_WHITE"Du kannst einen User suchen, indem du unten in das\ndas Feld seinen Namen eingibst" , "Suchen" , "Zurück" );
  533.         }
  534.         else if( extra == 0 ) {
  535.             new
  536.                 sString[ 256 ];
  537.             strunpack( g_supUserInput , g_sUserInput[ playerid ] );
  538.             format( sString , sizeof( sString ) , ""#COL_WHITE"Es wurden keine User mit dem Suchkriterium '"#COL_GREY"%s"#COL_WHITE"' gefunden.\n\nDu kannst einen User suchen, indem du unten in das\ndas Feld seinen Namen eingibst" , g_supUserInput );
  539.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_INPUT , ""#COL_ORANGE"gPM  User Übersicht" , sString , "Suchen" , "Zurück" );
  540.         }
  541.         else if( extra == 1 ) {
  542.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_INPUT , ""#COL_ORANGE"gPM  User Übersicht" , ""#COL_WHITE"Du kannst einen User suchen, indem du unten in das\ndas Feld seinen Namen eingibst" , "Suchen" , "Zurück" );
  543.         }
  544.         else if( extra == 2 ) {
  545.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_INPUT , ""#COL_ORANGE"gPM  User Übersicht" , ""#COL_WHITE"Deine Eingabe war zu kurz oder nicht vorhanden!\n\nDu kannst einen User suchen, indem du unten in das\ndas Feld seinen Namen eingibst" , "Suchen" , "Zurück" );
  546.         }
  547.         return 1;
  548.     }
  549.     else if( dialogid == DIALOG_PM_USER_UEBERSICHT_QUERY ) {
  550.         new
  551.             sString[ MAX_PLAYER_NAME * MAX_QUERY_RESULTS ],
  552.             sUserID[ 8 ],
  553.             sTitel[ 64 ],
  554.             sName[ MAX_PLAYER_NAME ],
  555.             iRows;
  556.         g_dbrQuery = DBResult:extra;
  557.         iRows = db_num_rows( g_dbrQuery );
  558.         for(new i = 0 ; i < iRows ; i++) {
  559.             db_get_field( g_dbrQuery , 0 , sUserID , sizeof( sUserID ) );
  560.             db_get_field( g_dbrQuery , 1 , sName , sizeof( sName ) );
  561.             g_iRowUniqueID[ playerid ][ i ] = strval( sUserID );
  562.             format( sString  ,sizeof(sString) , "%s%s\n" , sString , sName );
  563.             db_next_row( g_dbrQuery );
  564.         }
  565.         strunpack( g_supUserInput , g_sUserInput[ playerid ] );
  566.         format( sTitel , sizeof( sTitel ) , ""#COL_ORANGE"gPM Nachricht  User Übersicht - Filter '%s' (%d)" , g_supUserInput , iRows );
  567.         ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , sTitel , sString , "Verarbeitung" , "Zurück" );
  568.         db_free_result( g_dbrQuery );
  569.         return 1;
  570.     }
  571.     else if( dialogid == DIALOG_PM_USER_VERARBEITUNG ) {
  572.         new
  573.             sTitel[ 80 ];
  574.         strunpack( g_supUserInput , g_sUserInput[ playerid ] );
  575.         format( sTitel , sizeof( sTitel ) , ""#COL_ORANGE"gPM Nachricht  User Übersicht - Verarbeitung '%s'" , g_supUserInput );
  576.         ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , sTitel , "Posteingang\nPostausgang\nNachricht Senden" , "Durchführen" , "Zurück" );
  577.     }
  578.     else if( dialogid == DIALOG_PM_SCHREIBEN_MENU ) {
  579.         if( g_iUserMessageInput[ playerid ] >= MAX_INPUT_PAGES ) {
  580.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , ""#COL_ORANGE"gPM  Nachricht Versenden - Menu" , "Versenden\n"#COL_RED"Schreiben fortsetzen\n" , "Weiter" , "Zurück" );
  581.         }
  582.         else {
  583.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , ""#COL_ORANGE"gPM  Nachricht Versenden - Menu" , "Versenden\n"#COL_GREEN"Schreiben fortsetzen\n" , "Weiter" , "Zurück" );
  584.         }
  585.     }
  586.     else if( dialogid == DIALOG_PM_EINGANG_ENTF_ABFRAGE ) {
  587.         ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Posteingang - Nachricht Löschen"  , ""#COL_WHITE"Bist du dir sicher,dass du die Nachricht unwiderruflich aus\ndeinem Posteingang löschen willst?\n\n" , "Löschen" , "Zurück" );
  588.     }
  589.     else if( dialogid == DIALOG_PM_EINGANG_ENTF ) {
  590.         gPM_DeleteMessage( DELETE_MESSAGE_BY_EMPFAENGER , extra );
  591.         ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Posteingang - Nachricht Löschen"  , ""#COL_WHITE"Die Nachricht wurde erfolgreich aus deinem\nPosteingang entfernt." , "Zurück" , "" );
  592.     }
  593.     else if( dialogid == DIALOG_PM_AUSGANG_ENTF_ABFRAGE ) {
  594.         ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Postausgang - Nachricht Löschen"  , ""#COL_WHITE"Bist du dir sicher,dass du die Nachricht unwiderruflich aus\ndeinem Postausgang löschen willst?\n\n" , "Löschen" , "Zurück" );
  595.     }
  596.     else if( dialogid == DIALOG_PM_AUSGANG_ENTF ) {
  597.         gPM_DeleteMessage( DELETE_MESSAGE_BY_SENDER , extra );
  598.         ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Postausgang - Nachricht Löschen"  , ""#COL_WHITE"Die Nachricht wurde erfolgreich aus deinem\nPostausgang entfernt." , "Zurück" , "" );
  599.     }
  600.     else if( dialogid == DIALOG_PM_EINGANG_FILTER ) {
  601.         new
  602.             sNachrichtID[ 8 ],
  603.             iNachrichtID,
  604.             sName[ MAX_PLAYER_NAME ],
  605.             sStatus[ 2 ],
  606.             sTitel[ 64 ],
  607.             iStatus,
  608.             sText[ INPUT_SIZE ],
  609.             sString[ ( 45 + 4 + 16 + 40) * MAX_QUERY_RESULTS + 1];
  610.         format( g_sQuery , sizeof( g_sQuery ) , "SELECT `NachrichtID`,`Name`,`Status`,`Text` FROM `NACHRICHT`,`USER` WHERE `EmpfaengerID` = '%d' AND `SenderID` = '%d' AND `SenderID` = `UserID` AND NOT( `Status` & %d ) ORDER BY `NachrichtID` DESC LIMIT %d;" , g_iUserID[ playerid ] , g_iUserInput[ playerid ] , MessageStatus_DEL_Empfaenger , MAX_QUERY_RESULTS);
  611.         print( g_sQuery );
  612.         g_dbrQuery = db_query( g_dbPM , g_sQuery );
  613.         g_iResults[ playerid ] = db_num_rows( g_dbrQuery );
  614.         printf("results %d" , g_iResults[ playerid ] );
  615.         if( g_iResults[ playerid ] ) {
  616.             sString[0] = '\0';
  617.             for(new i = 0 ; i < g_iResults[ playerid ] ; i++) {
  618.                 db_get_field( g_dbrQuery , 0 , sNachrichtID , sizeof( sNachrichtID ) );
  619.                 db_get_field( g_dbrQuery , 1 , sName , sizeof(sName ) );
  620.                 db_get_field( g_dbrQuery , 2 , sStatus , sizeof( sStatus ) );
  621.                 db_get_field( g_dbrQuery , 3 , sText , sizeof( sText ) );
  622.                 iNachrichtID = strval( sNachrichtID );
  623.                 iStatus = strval( sStatus );
  624.                 if( iStatus & MessageStatus_Read ) {
  625.                     if( strlen( sText ) > 16 ) {
  626.                         format( sString , sizeof( sString ) ,"%s%.20s - %.16s...\n" , sString , sName , sText );
  627.                     }
  628.                     else {
  629.                         format( sString , sizeof( sString ) ,"%s%.20s - %s\n" , sString , sName , sText );
  630.                     }
  631.                 }
  632.                 else  {
  633.                     if( strlen( sText ) > 16 ) {
  634.                         format( sString , sizeof( sString ) , "%s%.20s - %.16s... "#COL_GREEN""#MARK_NEW_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  635.                     }
  636.                     else {
  637.                         format( sString , sizeof( sString ) , "%s%.20s - %s "#COL_GREEN""#MARK_NEW_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  638.                     }
  639.                 }
  640.                 g_iRowUniqueID[ playerid ][ i ] = iNachrichtID;
  641.                 db_next_row( g_dbrQuery );
  642.             }
  643.             g_supUserInput[ 0 ] = '\0';
  644.             strunpack( g_supUserInput , g_sUserInput[ playerid ] );
  645.             format( sTitel , sizeof( sTitel ) ,""#COL_ORANGE"gPM  Posteingang ( %s ) " , g_supUserInput );
  646.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , sTitel , sString , "Lesen" , "Zurück" );
  647.         }
  648.         else {
  649.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Posteingang" , ""#COL_WHITE"Du hast keine Nachrichten im Eingang!" , "Zurück" , "" );
  650.         }
  651.         db_free_result( g_dbrQuery );
  652.         return 1;
  653.     }
  654.     else if( dialogid == DIALOG_PM_AUSGANG_FILTER ) {
  655.         new
  656.             sNachrichtID[ 8 ],
  657.             iNachrichtID,
  658.             sName[MAX_PLAYER_NAME],
  659.             sStatus[ 2 ],
  660.             iStatus,
  661.             sTitel[ 64 ],
  662.             sText[ INPUT_SIZE ],
  663.             sString[ ( 45 + 10 + 16 + 4 + 40) * MAX_QUERY_RESULTS + 1];
  664.         format(g_sQuery,sizeof(g_sQuery),"SELECT `NachrichtID`,`Name`,`Status`,`Text` FROM `NACHRICHT`,`USER` WHERE `SenderID` = '%d' AND `EmpfaengerID` = '%d' AND `EmpfaengerID` = `UserID` AND NOT( `Status` & %d ) ORDER BY `NachrichtID` DESC" , g_iUserID[ playerid ] , g_iUserInput[ playerid ] , MessageStatus_DEL_Sender );
  665.         g_dbrQuery = db_query( g_dbPM , g_sQuery );
  666.         g_iResults[ playerid ] = db_num_rows( g_dbrQuery );
  667.         if( g_iResults[ playerid ] ) {
  668.             sString[0] = '\0';
  669.             for(new i = 0 ; i < g_iResults[ playerid ] ; i++) {
  670.                 db_get_field( g_dbrQuery , 0 , sNachrichtID , sizeof( sNachrichtID ) );
  671.                 db_get_field( g_dbrQuery , 1 , sName , sizeof( sName ) );
  672.                 db_get_field( g_dbrQuery , 2 , sStatus , sizeof( sStatus ) );
  673.                 db_get_field( g_dbrQuery , 3 , sText , sizeof( sText ) );
  674.                 iNachrichtID = strval( sNachrichtID );
  675.                 iStatus = strval( sStatus );
  676.                 if( iStatus & MessageStatus_Read ) {
  677.                     if( strlen( sText ) > 16 ) {
  678.                         format( sString , sizeof( sString ) ,"%s%.20s - %.16s...\n" , sString , sName , sText );
  679.                     }
  680.                     else {
  681.                         format( sString , sizeof( sString ) ,"%s%.20s - %s\n" , sString , sName , sText );
  682.                     }
  683.                 }
  684.                 else {
  685.                     if( strlen( sText ) > 16 ) {
  686.                         format( sString , sizeof( sString ) , "%s%.20s - %.16s... "#COL_RED""#MARK_UNREAD_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  687.                     }
  688.                     else {
  689.                         format( sString , sizeof( sString ) , "%s%.20s - %s "#COL_RED""#MARK_UNREAD_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  690.                     }
  691.                 }
  692.                 g_iRowUniqueID[ playerid ][ i ] = iNachrichtID;
  693.                 db_next_row( g_dbrQuery );
  694.             }
  695.             g_supUserInput[ 0 ] = '\0';
  696.             strunpack( g_supUserInput , g_sUserInput[ playerid ] );
  697.             format( sTitel , sizeof( sTitel ) ,""#COL_ORANGE"gPM  Postausgang ( %s )" , g_supUserInput);
  698.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , sTitel , sString , "Lesen" , "Zurück" );
  699.         }
  700.         else {
  701.             ShowPlayerDialog( playerid , DIALOG_PM_AUSGANG_EMPTY , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Postausgang" , ""#COL_WHITE"Du hast keine Nachrichten im Ausgang!" , "Zurück" , "" );
  702.         }
  703.         db_free_result( g_dbrQuery );
  704.         return 1;
  705.     }
  706.     return 1;
  707. }
  708. stock gPM_OnDialogResponse( playerid, dialogid , response , listitem , inputtext[] ) {
  709.     if( dialogid == DIALOG_PM_MENU ) {
  710.         if(response) {
  711.             switch(listitem) {
  712.                 case 0: gPM_ShowDialog( playerid , DIALOG_PM_EINGANG );
  713.                 case 1: gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG );
  714.                 case 2: gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_USER );
  715.                 case 3: gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT );
  716.             }
  717.         }
  718.     }
  719.     else if( dialogid == DIALOG_PM_EINGANG ) {
  720.         if( response ) {
  721.             if( g_iPage[ playerid ] > 0 ) {
  722.                 if( listitem == MAX_QUERY_RESULTS + 1 ) {
  723.                     g_iPage[ playerid ]++;
  724.                     return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG );
  725.                 }
  726.                 else if( listitem == 0 ){
  727.                     if( g_iPage[ playerid ] > 0 ) {
  728.                         g_iPage[ playerid ]--;
  729.                         return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG );
  730.                     }
  731.                 }
  732.                 else {
  733.                     return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_MSG , ( g_iRowUniqueID[ playerid ][ listitem - 1] | ( listitem - 1 ) << 16 ) );
  734.                 }
  735.             }
  736.             else {
  737.                 if( listitem == MAX_QUERY_RESULTS ) {
  738.                     g_iPage[ playerid ]++;
  739.                     return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG );
  740.                 }
  741.                 else {
  742.                     return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_MSG , ( g_iRowUniqueID[ playerid ][ listitem ] | ( listitem << 16 ) ) );
  743.                 }
  744.             }
  745.         }
  746.         else {
  747.             g_iPage[ playerid ] = 0;
  748.             return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  749.         }
  750.     }
  751.     else if( dialogid == DIALOG_PM_EINGANG_MSG ) {
  752.         if(response) {
  753.             return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG );
  754.         }
  755.         else {
  756.             return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_ENTF_ABFRAGE );
  757.         }
  758.     }
  759.     else if( dialogid == DIALOG_PM_EINGANG_ENTF_ABFRAGE ) {
  760.         if(response) {
  761.             return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_ENTF , ( g_iUserInput[ playerid ] & 0xFFFF ) );
  762.         }
  763.         else {
  764.             return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_MSG , g_iUserInput[ playerid ] );
  765.         }
  766.     }
  767.     else if( dialogid == DIALOG_PM_EINGANG_ENTF ) {
  768.         g_iPage[ playerid ] = 0;
  769.         return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG );
  770.     }
  771.     else if( dialogid == DIALOG_PM_AUSGANG ) {
  772.         if( response ) {
  773.             if( g_iPage[ playerid ] > 0 ) {
  774.                 if( listitem == MAX_QUERY_RESULTS + 1 ) {
  775.                     g_iPage[ playerid ]++;
  776.                     return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG );
  777.                 }
  778.                 else if( listitem == 0 ){
  779.                     if( g_iPage[ playerid ] > 0 ) {
  780.                         g_iPage[ playerid ]--;
  781.                         return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG );
  782.                     }
  783.                 }
  784.                 else {
  785.                     return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_MSG , ( g_iRowUniqueID[ playerid ][ listitem - 1] | ( listitem - 1 ) << 16 ) );
  786.                 }
  787.             }
  788.             else {
  789.                 if( listitem == MAX_QUERY_RESULTS ) {
  790.                     g_iPage[ playerid ]++;
  791.                     return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG );
  792.                 }
  793.                 else {
  794.                     return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_MSG , ( g_iRowUniqueID[ playerid ][ listitem ] | ( listitem << 16 ) ) );
  795.                 }
  796.             }
  797.         }
  798.         else {
  799.             g_iPage[ playerid ] = 0;
  800.             return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  801.         }
  802.     }
  803.     else if( dialogid == DIALOG_PM_AUSGANG_MSG ) {
  804.         if(response) {
  805.             return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG );
  806.         }
  807.         else {
  808.             return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_ENTF_ABFRAGE );
  809.         }
  810.     }
  811.     else if( dialogid == DIALOG_PM_AUSGANG_ENTF_ABFRAGE ) {
  812.         if(response) {
  813.             return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_ENTF , ( g_iUserInput[ playerid ] & 0xFFFF ) );
  814.         }
  815.         else {
  816.             return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_MSG , g_iUserInput[ playerid ] );
  817.         }
  818.     }
  819.     else if( dialogid == DIALOG_PM_AUSGANG_ENTF ) {
  820.         g_iPage[ playerid ] = 0;
  821.         return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG );
  822.     }
  823.     else if( dialogid == DIALOG_PM_SCHREIBEN_USER ) {
  824.         if(response) {
  825.             new
  826.                 iUserID;
  827.             g_sUserInput[ playerid ][ 0 ] = '\0';
  828.             g_supUserInput[ 0 ] = '\0';
  829.             strcat( g_supUserInput , db_escape( inputtext ) , MAX_PLAYER_NAME );
  830.             strpack( g_sUserInput[ playerid ] , g_supUserInput , MAX_PLAYER_NAME );
  831.             iUserID = gPM_GetUserID( g_supUserInput );
  832.             if( iUserID == INVALID_USERID ) {
  833.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_USER , 0 );
  834.             }
  835.             if( iUserID == g_iUserID[ playerid ] ) {
  836.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_USER , 1 );
  837.             }
  838.             g_iUserInput[ playerid ] = iUserID;
  839.             g_iUserMessageInput[ playerid ] = 0;
  840.             return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_TEXT );
  841.         }
  842.         else {
  843.             return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  844.         }
  845.     }
  846.     else if( dialogid == DIALOG_PM_SCHREIBEN_TEXT ) {
  847.         if(response) {
  848.             if( !inputtext[0] ) {
  849.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_TEXT );
  850.             }
  851.             g_supMessageSingleInput[ 0 ] = '\0';
  852.             strcat( g_supMessageSingleInput , db_escape( inputtext ) );
  853.             g_sUserMessageInput[ playerid ][ g_iUserMessageInput[ playerid ] ][ 0 ] = '\0';
  854.             strpack( g_sUserMessageInput[ playerid ][ g_iUserMessageInput[ playerid ]++ ] , g_supMessageSingleInput);
  855.             return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_MENU );
  856.         }
  857.         else {
  858.             if( g_iUserMessageInput[ playerid ] >= 1 ) {
  859.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_MENU );
  860.             }
  861.             else {
  862.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_USER );
  863.             }
  864.         }
  865.     }
  866.     else if( dialogid == DIALOG_PM_SCHREIBEN_VERSENDET ) {
  867.         return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  868.     }
  869.     else if( dialogid == DIALOG_PM_USER_UEBERSICHT ) {
  870.         if(response) {
  871.             new
  872.                 iRows;
  873.             if( strlen(inputtext) < 2 ) {
  874.                 return gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT , 2 );
  875.             }
  876.             g_sUserInput[ playerid ][ 0 ] = '\0';
  877.             g_supUserInput[ 0 ] = '\0';
  878.             strcat( g_supUserInput, db_escape( inputtext ) , MAX_PLAYER_NAME );
  879.             strpack( g_sUserInput[ playerid ] , g_supUserInput , MAX_PLAYER_NAME );
  880.             gPM_FilterUsernames( g_iUserID[ playerid ] , g_supUserInput , g_dbrQuery );
  881.             iRows = db_num_rows( g_dbrQuery );
  882.             if( iRows == 0 ) {
  883.                 db_free_result( g_dbrQuery );
  884.                 return gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT , 0 );
  885.             }
  886.             else if( iRows > MAX_QUERY_RESULTS ) {
  887.                 db_free_result( g_dbrQuery );
  888.                 return gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT , 1 );
  889.             }
  890.             return gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT_QUERY , _:g_dbrQuery );
  891.         }
  892.         else {
  893.             return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  894.         }
  895.     }
  896.     else if( dialogid == DIALOG_PM_USER_UEBERSICHT_QUERY ) {
  897.         if( response ) {
  898.             g_sUserInput[ playerid ][ 0 ] = '\0';
  899.             g_supUserInput[ 0 ] = '\0';
  900.             strcat( g_supUserInput, inputtext , MAX_PLAYER_NAME );
  901.             strpack( g_sUserInput[ playerid ] , g_supUserInput , MAX_PLAYER_NAME );
  902.             g_iUserInput[ playerid ] = gPM_GetUserID( g_supUserInput );
  903.             return gPM_ShowDialog( playerid , DIALOG_PM_USER_VERARBEITUNG );
  904.         }
  905.         else {
  906.             return gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT );
  907.         }
  908.     }
  909.     else if ( dialogid == DIALOG_PM_EINGANG_EMPTY ) {
  910.         return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  911.     }
  912.     else if ( dialogid == DIALOG_PM_AUSGANG_EMPTY ) {
  913.         return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  914.     }
  915.     else if( dialogid == DIALOG_PM_USER_VERARBEITUNG ) {
  916.         if(response) {
  917.             switch( listitem ) {
  918.                 case 0: {
  919.                     return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_FILTER);
  920.                 }
  921.                 case 1: {
  922.                     return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_FILTER);
  923.                 }
  924.                 case 2: {
  925.                     g_iUserMessageInput[ playerid ] = 0;
  926.                     return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_TEXT );
  927.                 }
  928.             }
  929.         }
  930.         else {
  931.        
  932.         }
  933.     }
  934.     else if( dialogid == DIALOG_PM_SCHREIBEN_MENU ) {
  935.         if(response) {
  936.             switch( listitem ) {
  937.                 case 0: {
  938.                     gPM_SendMessage( g_iUserID[ playerid ] , g_iUserInput[ playerid ] , gPM_MergeMessages( playerid ) );
  939.                     return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_VERSENDET );
  940.                 }
  941.                 case 1: {
  942.                     if( g_iUserMessageInput[ playerid ] >= MAX_INPUT_PAGES ) {
  943.                         return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_MENU );
  944.                     }
  945.                     else {
  946.                         return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_TEXT );
  947.                     }
  948.                 }
  949.             }
  950.         }
  951.         else {
  952.        
  953.         }
  954.     }
  955.     else if( dialogid == DIALOG_PM_EINGANG_FILTER ) {
  956.         if(response) {
  957.             return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_FILTER_MSG , g_iRowUniqueID[ playerid ][ listitem ] );
  958.         }
  959.         else {
  960.             return gPM_ShowDialog( playerid , DIALOG_PM_USER_VERARBEITUNG );
  961.         }
  962.     }
  963.     else if( dialogid == DIALOG_PM_AUSGANG_FILTER ) {
  964.         if(response) {
  965.             return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_FILTER_MSG , g_iRowUniqueID[ playerid ][ listitem ] );
  966.         }
  967.         else {
  968.             return gPM_ShowDialog( playerid , DIALOG_PM_USER_VERARBEITUNG );
  969.         }
  970.     }
  971.     else if( dialogid == DIALOG_PM_AUSGANG_FILTER_MSG ) {
  972.         return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_FILTER );
  973.     }
  974.     else if( dialogid == DIALOG_PM_EINGANG_FILTER_MSG ) {
  975.         return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_FILTER );
  976.     }
  977.     return 0;
  978. }
  979.  
  980. COMMAND:gpm(playerid,params[]) {
  981.     return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  982. }
  983.  
  984. stock gPM_AddUsers(const file[]) {
  985.     new
  986.         _sTmp[ MAX_PLAYER_NAME + 5 ],
  987.         File:fFile;
  988.     fFile = fopen( file , io_read );
  989.     if( fFile ) {
  990.         while( fread( fFile , _sTmp , sizeof( _sTmp ) ) ) {
  991.             StripNewLine( _sTmp );
  992.             if( gPM_GetUserID( _sTmp ) == INVALID_USERID ) {
  993.                 gPM_AddUsername( _sTmp );
  994.             }
  995.         }
  996.         fclose( fFile );
  997.         return 1;
  998.     }
  999.     return 0;
  1000. }
  1001.  
  1002. stock StripNewLine(str[]) //ysi_misc.own
  1003. {
  1004.     new
  1005.         l = strlen(str);
  1006.     while (l-- && str[l] <= ' ') str[l] = '\0';
  1007. }
  1008.  
  1009. stock gPM_FilterUsernames( my_userid , const username_filter[] , & DBResult:dbr ) {
  1010.     format( g_sQuery , sizeof( g_sQuery ) , "SELECT * FROM `USER` WHERE `Name` LIKE '%%%s%%' AND NOT(`UserID` = '%d') ORDER BY `Name` ASC" , username_filter , my_userid );
  1011.     dbr = db_query( g_dbPM , g_sQuery );
  1012.     return 1;
  1013. }
  1014.  
  1015. stock gPM_GetUsers() {
  1016.     new
  1017.         sUsers[8],
  1018.         iUsers;
  1019.     g_dbrQuery = db_query( g_dbPM , "SELECT COUNT(*) FROM `User`" );
  1020.     db_get_field( g_dbrQuery , 0 , sUsers , sizeof( sUsers ) );
  1021.     iUsers = strval( sUsers );
  1022.     db_free_result( g_dbrQuery );
  1023.     return iUsers;
  1024. }
  1025.  
  1026. stock gPM_GetNachrichten() {
  1027.     new
  1028.         sNachrichten[8],
  1029.         iNachrichten;
  1030.     g_dbrQuery = db_query( g_dbPM , "SELECT COUNT(*) FROM `Nachricht`" );
  1031.     db_get_field( g_dbrQuery , 0 , sNachrichten , sizeof( sNachrichten ) );
  1032.     iNachrichten = strval( sNachrichten );
  1033.     db_free_result( g_dbrQuery );
  1034.     return iNachrichten;
  1035. }
  1036.  
  1037. stock gPM_GetUsername( userid ) {
  1038.     new
  1039.         sUsername[ MAX_PLAYER_NAME ] = "INVALID_USERNAME";
  1040.     format( g_sQuery , sizeof( g_sQuery ) , "SELECT `Name` FROM `User` WHERE `UserID` = '%d'" , userid );
  1041.     g_dbrQuery = db_query( g_dbPM , g_sQuery );
  1042.     if( db_num_rows( g_dbrQuery ) ) {
  1043.         db_get_field( g_dbrQuery , 0 , sUsername , sizeof( sUsername ) );
  1044.     }
  1045.     db_free_result( g_dbrQuery );
  1046.     return sUsername;
  1047. }
  1048.  
  1049. #define MAX_INI_ENTRY_TEXT INPUT_SIZE
  1050. stock db_escape(text[]) // Y_LESS
  1051. {
  1052.     new
  1053.         ret[MAX_INI_ENTRY_TEXT * 2],
  1054.         ch,
  1055.         i,
  1056.         j;
  1057.     while ((ch = text[i++]) && j < sizeof (ret))
  1058.     {
  1059.         if (ch == '\'')
  1060.         {
  1061.             if (j < sizeof (ret) - 2)
  1062.             {
  1063.                 ret[j++] = '\'';
  1064.                 ret[j++] = '\'';
  1065.             }
  1066.         }
  1067.         else if (j < sizeof (ret))
  1068.         {
  1069.             ret[j++] = ch;
  1070.         }
  1071.         else
  1072.         {
  1073.             j++;
  1074.         }
  1075.     }
  1076.     ret[sizeof (ret) - 1] = '\0';
  1077.     return ret;
  1078. }
  1079. stock gPM_MergeMessages( playerid ) {
  1080.     g_supMessageSingleInput[ 0 ] = '\0';
  1081.     g_supMessageInput[ 0 ] = '\0';
  1082.     for(new i = 0 ; i < g_iUserMessageInput[ playerid ] ; i++) {
  1083.         strunpack( g_supMessageSingleInput , g_sUserMessageInput[ playerid ][ i ] );
  1084.         strcat( g_supMessageInput , g_supMessageSingleInput );
  1085.     }
  1086.     return g_supMessageInput;
  1087. }
Advertisement
Add Comment
Please, Sign In to add comment