Guest User

gPM - 1.3.2

a guest
Sep 11th, 2015
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 56.19 KB | None | 0 0
  1. #if defined _g_P_M___
  2. * - -
  3. *
  4. *   Projekt:        gPM
  5. *   Lizenz:         GNU Version 3
  6. *   Datei:          gPM.inc
  7. *   Letztes Update: 10.09.2015
  8. *   SA-MP Version:  0.3.7 >=
  9. *   Version:        1.3.2
  10. *
  11. *       gPM  -  by Daniel "Goldkiller"
  12. *
  13. *
  14. *       Credits:
  15. *           - Slice ( Transaction )
  16. *
  17. *
  18. *
  19. *   Changelog:
  20. *       1.3.2 :
  21. *           - gPM_GetNewMessages auf SQL Count umgeschrieben
  22. *           - Index out of bounce check für gPM_OnLogin
  23. *           - DB Funktionen auf Änderungen in SA-MP 0.3.7 angepasst
  24. *           - Debug Informationen entfernt bei DIALOG_PM_EINGANG_FILTER
  25. *           - Einige Dialoge auf DIALOG_STYLE_TABLIST umgestellt
  26. *           - Fehler behoben, der bei zu langen Texten trotz sizeof() bei db_get_field Variablen überschreibt
  27. *           - Fehler behoben, bei dem auf negativen Index zuzegriffen wird in *Filter Dialogen
  28. *
  29. *       1.3.1 :
  30. *           - gPM_OnLogin hinzugefügt
  31. *           - Umständliches Verfahren zum authentifizieren des Benutzers entfernt
  32. *
  33. *       1.3 :
  34. *            - Nachricht kann nun an mehrere User gleichzeitig versendet werden
  35. *            - Einfaches hinzufügen / entfernen von Usern für das Versenden
  36. *            - Fehler behoben, dass 'strins' zum Absturz bringt
  37. *            - Nachricht angepasst falls Suchkriterium zu viele Ergebnisse erzeugt
  38. *
  39. *       1.2 :
  40. *            - Userschutz hinzugefügt
  41. *            - Texte komplett in Deutsch geändert
  42. *            - Diverse Kleinigkeiten
  43. *
  44. *
  45. * - -
  46. #endif
  47.  
  48. #include <a_samp>
  49. #include <zcmd>
  50.  
  51. #define DATABASE "gPM.s3db"
  52.  
  53. #define MAX_QUERY_RESULTS 20
  54. #define MAX_EINGANG_MESSAGES MAX_QUERY_RESULTS
  55.  
  56. #define SHOW_NEXT_PAGES
  57. #define SHOW_PREVIOUS_PAGES
  58.  
  59. // #define PLAY_SOUND
  60. #if defined PLAY_SOUND
  61.     #define INCOMING_MESSAGE_SOUND "www.sa-mp.de/sound.mp3"
  62. #endif
  63. //#define EDIT_MESSAGES
  64.  
  65. #define INVALID_USERID -1
  66. #define INVALID_LIST_ITEM -1
  67.  
  68. #define MAX_INPUT_PAGES 5
  69. #define MAX_MESSAGE_RECEIVERS 20
  70. #define INPUT_SIZE 128
  71.  
  72. #define MARK_NEW_MESSAGES "*Neu"
  73. #define MARK_UNREAD_MESSAGES "*Ungelesen"
  74.  
  75. #define COLOR_WHITE 0xFFFFFFFF
  76. #define COLOR_RED 0xFF0000FF
  77. #define COL_WHITE "{FFFFFF}"
  78. #define COL_GREY "{88ABAB}"
  79. #define COL_BLUE "{0000FF}"
  80. #define COL_GREEN "{00FF00}"
  81. #define COL_RED "{FF0000}"
  82. #define COL_ORANGE "{FF9900}"
  83.  
  84. #define DATE_FORMAT "%d.%m.%Y"
  85.  
  86. #define GPM_USERCALL_FUNCTION "gPM_UserCall"
  87.  
  88. #define GPM_MAX_STRING ( MAX_INPUT_PAGES * INPUT_SIZE + 20 )
  89.  
  90.  
  91. static
  92.     g_iUserID[ MAX_PLAYERS ],
  93.     g_iLoggedIn[ MAX_PLAYERS char],
  94.     g_supUserInput[ MAX_PLAYER_NAME ],
  95.    
  96.     g_supMessageInput[ GPM_MAX_STRING ], // 20 für \n
  97.     g_supMessageSingleInput[ INPUT_SIZE ],
  98.     g_sUserMessageInput[ MAX_PLAYERS ][ MAX_INPUT_PAGES ][ INPUT_SIZE char],
  99.     g_iUserMessageInput[ MAX_PLAYERS char ],
  100.     g_iDialogEdition[ MAX_PLAYERS char],
  101.    
  102.     g_aiUserMessageReceivers[ MAX_PLAYERS ][ MAX_MESSAGE_RECEIVERS ],
  103.     g_iUsersMessageReceivers[ MAX_PLAYERS char],
  104.  
  105.     g_sUserInput[ MAX_PLAYERS ][ MAX_PLAYER_NAME char ],
  106.     g_iUserInput[ MAX_PLAYERS ],
  107.     g_iRowUniqueID[ MAX_PLAYERS ][ MAX_EINGANG_MESSAGES ],
  108.    
  109.     g_iResults[ MAX_PLAYERS ],
  110.     g_iPage[ MAX_PLAYERS ],
  111.  
  112.     g_sQuery[ 160  + ( MAX_INPUT_PAGES * INPUT_SIZE )  ],
  113.     DBResult:g_dbrQuery,
  114.     DB:g_dbPM;
  115.    
  116.    
  117. enum ( <<= 1 ) {
  118.     MessageStatus_Read = 1,
  119.     MessageStatus_DEL_Sender, // del von sender ( postausgang )
  120.     MessageStatus_DEL_Empfaenger // del von empfaenger ( posteingang )
  121. }
  122.  
  123. enum ( += 1 ) {
  124.     DIALOG_EDITION_NORMAL,
  125.     DIALOG_EDITION_ADD_EMPFAENGER
  126. }
  127.  
  128. enum ( += 1 ) {
  129.     DELETE_MESSAGE_BY_SENDER = 0,
  130.     DELETE_MESSAGE_BY_EMPFAENGER
  131. }
  132.  
  133. enum ( += 1 ) {
  134.     DIALOG_PM_MENU = 12425,
  135.     DIALOG_PM_EINGANG,
  136.     DIALOG_PM_EINGANG_EMPTY,
  137.     DIALOG_PM_EINGANG_MSG,
  138.     DIALOG_PM_EINGANG_ENTF_ABFRAGE,
  139.     DIALOG_PM_EINGANG_FILTER,
  140.     DIALOG_PM_EINGANG_FILTER_MSG,
  141.     DIALOG_PM_EINGANG_ENTF,
  142.     DIALOG_PM_AUSGANG,
  143.     DIALOG_PM_AUSGANG_EMPTY,
  144.     DIALOG_PM_AUSGANG_MSG,
  145.     DIALOG_PM_AUSGANG_ENTF_ABFRAGE,
  146.     DIALOG_PM_AUSGANG_ENTF,
  147.     DIALOG_PM_AUSGANG_FILTER,
  148.     DIALOG_PM_AUSGANG_FILTER_MSG,
  149.     DIALOG_PM_SCHREIBEN_USER,
  150.     DIALOG_PM_SCHREIBEN_TEXT,
  151.     DIALOG_PM_SCHREIBEN_BEARBEITEN,
  152.     DIALOG_PM_SCHREIBEN_MENU,
  153.     DIALOG_PM_SCHREIBEN_INFO,
  154.     DIALOG_PM_SCHREIBEN_VERSENDET,
  155.     DIALOG_PM_SCHREIBEN_EMPF_EDIT,
  156.     DIALOG_PM_USER_UEBERSICHT,
  157.     DIALOG_PM_USER_UEBERSICHT_QUERY,
  158.     DIALOG_PM_USER_VERARBEITUNG,
  159. }
  160.  
  161. stock gPM_Init() {
  162.     print(" >> gPM FS: Init");
  163.     g_dbPM = db_open( DATABASE );
  164.     for(new i = 0 ; i < MAX_PLAYERS ; i++) {
  165.         if( IsPlayerConnected( i ) ) {
  166.             gPM_OnPlayerConnect( i );
  167.         }
  168.     }
  169.     // gPM_AddUsers("gPM.index"); <-- automatisch eine liste auf Usern hinzufügen
  170.     db_free_result( db_query( g_dbPM , "PRAGMA synchronous = OFF" ) );
  171.     printf("gPM <> Database ID: %d",_:g_dbPM);
  172.     printf("gPM <> Users: %d" , gPM_GetUsers() );
  173.     printf("gPM <> Nachrichten: %d" , gPM_GetNachrichten() );
  174.     return 1;
  175. }
  176.  
  177. stock gPM_Close() {
  178.     print(" >> gPM FS: Close");
  179.     db_close( g_dbPM );
  180.     return 1;
  181. }
  182.  
  183. stock gPM_AddUsername( username[] ) {
  184.     format( g_sQuery , sizeof( g_sQuery ) , "INSERT INTO `USER` ( `Name`) VALUES ('%s')" , db_escape( username ) );
  185.     db_free_result( db_query( g_dbPM , g_sQuery ) );
  186.     printf("gPM <> Benutzer '%s' hinzugefügt" , username );
  187.     return 1;
  188. }
  189.  
  190. stock gPM_OnPlayerConnect(playerid) {
  191.     new
  192.         sName[ MAX_PLAYER_NAME ];
  193.     GetPlayerName( playerid , sName , sizeof( sName ) );
  194.     g_iUserID[ playerid ] = gPM_GetUserID( sName );
  195.     g_iResults[ playerid ] = 0;
  196.     g_iPage[ playerid ] = 0;
  197.     g_iLoggedIn{ playerid } = 0;
  198.  
  199.     if( g_iUserID[playerid] == INVALID_USERID ) {
  200.         new
  201.             sString[ 128+32 ];
  202.         gPM_AddUsername( sName );
  203.         g_iUserID[ playerid ] = gPM_GetUserID( sName );
  204.         format( sString , sizeof( sString ) , "Hallo %s, probier doch unser neues Nachrichten-System aus. Mehr dazu unter /gpm" , sName );
  205.         SendClientMessage( playerid , COLOR_WHITE , sString );
  206.         gPM_SendMessage( 1 , g_iUserID[ playerid ] , "Willkommen in deinem persönlichem Postfach. Du hast nun die Möglichkeit, an Benutzer Nachrichten zu versenden oder von diesen Nachrichten zu empfangen. Viel Spaß damit! \n\n- Diese Nachricht wurde automatisch versendet" , false );
  207.     }
  208.     return 1;
  209. }
  210.  
  211. stock gPM_OnPlayerDisconnect(playerid, reason ) {
  212.     #pragma unused reason
  213.     g_iUserID[playerid] = INVALID_USERID;
  214.     return 1;
  215. }
  216. stock gPM_GetNewMessages( userid) {
  217.     new
  218.         iCount;
  219.     format( g_sQuery , sizeof( g_sQuery ) , "SELECT COUNT(*) FROM `Nachricht` WHERE `EmpfaengerID` = '%d' AND NOT(`Status` & '%d' )" , userid , MessageStatus_Read );
  220.     g_dbrQuery = db_query( g_dbPM , g_sQuery );
  221.     iCount = db_get_field_int( g_dbrQuery );
  222.     db_free_result( g_dbrQuery );
  223.     return iCount;
  224. }
  225.  
  226. stock gPM_GetUserID( const name[] ) {
  227.     new
  228.         iUserID = INVALID_USERID;
  229.     format( g_sQuery , sizeof( g_sQuery ) , "SELECT `UserID` FROM `USER` WHERE `Name` = '%s'" , name );
  230.     g_dbrQuery = db_query( g_dbPM , g_sQuery );
  231.     if( db_num_rows( g_dbrQuery ) == 1 ) {
  232.         iUserID = db_get_field_int( g_dbrQuery , 0);
  233.     }
  234.     db_free_result( g_dbrQuery );
  235.     return iUserID;
  236. }
  237.  
  238. stock gPM_SendMessage( senderid , receiverid , const message[] , bool:send_notice = true) {
  239.     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 );
  240.     db_free_result( db_query( g_dbPM , g_sQuery ) );
  241.     if(send_notice) {
  242.         for(new i = 0 ; i < MAX_PLAYERS ; i++) {
  243.             if( IsPlayerConnected( i ) ) {
  244.                 if( g_iUserID[ i ] == receiverid ) {
  245.                     gPM_OnPlayerReceiveMessage( i , senderid , message );
  246.                     return 1;
  247.                 }
  248.             }
  249.         }
  250.     }
  251.     return 1;
  252. }
  253.  
  254. stock gPM_SendMessageArray( senderid , array[ MAX_MESSAGE_RECEIVERS ] , const message[] , count ) {
  255.     new
  256.         j;
  257.     db_free_result( db_query( g_dbPM , "BEGIN" ) );
  258.     for(new i = 0 ; i < count ; i++ ) {
  259.         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 , array[ i ] , 0 , message );
  260.         db_free_result( db_query( g_dbPM , g_sQuery ) );
  261.     }
  262.  
  263.     db_free_result( db_query( g_dbPM , "COMMIT" ) );
  264.     for(new i = 0 ; i < MAX_PLAYERS ; i++) {
  265.         if( IsPlayerConnected( i ) ) {
  266.             for( j = 0 ; j < count ; j++ ) {
  267.                 if( g_iUserID[ i ] == array[ j ] ) {
  268.                     gPM_OnPlayerReceiveMessage( array[ j ] , senderid , message );
  269.                     continue;
  270.                 }
  271.             }
  272.         }
  273.     }
  274.     for(new i = 0 ; i < count ; i++) {
  275.         for( j = 0 ; j < MAX_PLAYERS ; j++) {
  276.             if( g_iUserID[j] == array[i] ) {
  277.                 gPM_OnPlayerReceiveMessage( j , senderid , " ");
  278.                 break;
  279.             }
  280.         }
  281.     }
  282.     return 1;
  283. }
  284.  
  285. stock gPM_DeleteMessage( typ , messageid) {
  286.     if( typ == DELETE_MESSAGE_BY_SENDER ) {
  287.         format( g_sQuery , sizeof( g_sQuery ) , "UPDATE `Nachricht` SET `Status` = `Status` | '%d' WHERE `NachrichtID` = '%d'" , MessageStatus_DEL_Sender , messageid);
  288.     }
  289.     else if( typ == DELETE_MESSAGE_BY_EMPFAENGER ) {
  290.         format( g_sQuery , sizeof( g_sQuery ) , "UPDATE `Nachricht` SET `Status` = `Status` | '%d' WHERE `NachrichtID` = '%d'" , MessageStatus_DEL_Empfaenger , messageid);
  291.     }
  292.     db_free_result( db_query( g_dbPM , g_sQuery ) );
  293.     return 1;
  294. }
  295.  
  296. stock gPM_OnPlayerReceiveMessage( playerid , send_userid , const message[] ) {
  297.     #pragma unused message
  298.     new
  299.         sString[ 128 ];
  300.     format( sString , sizeof( sString ) , "* gPM: Du hast eine Nachricht von %s empfangen" , gPM_GetUsername( send_userid ) );
  301.     SendClientMessage( playerid , COLOR_WHITE , sString );
  302.     #if defined PLAY_SOUND
  303.     PlayAudioStreamForPlayer( playerid , INCOMING_MESSAGE_SOUND );
  304.     #endif
  305.     return 1;
  306. }
  307.  
  308. stock gPM_StripMessageLines( message[ GPM_MAX_STRING ] ) {
  309.     #define SPLIT_LEN 50
  310.     new
  311.         bool:_bBasic = true,
  312.         _iParts,
  313.         _iCount,
  314.         _iTempLen = 0,
  315.         _iPos = 0,
  316.         _iTempPos = 0,
  317.         _iLen;
  318.     _iLen = strlen( message );
  319.     while( ( _iPos = strfind( message , " " , false  ,_iPos + 1) )  != -1 )  {
  320.         _iCount++;
  321.         _iTempLen += ( _iPos - _iTempPos );
  322.         _iTempPos = _iPos;
  323.         if( _iTempLen >= SPLIT_LEN ) {
  324.             if( _iPos++  < sizeof( message ) ) {
  325.                 strins( message , "\n" , _iPos );
  326.                 _iCount = 0;
  327.                 _iPos += 2;
  328.                 _bBasic = false;
  329.                 _iTempLen = 0;
  330.             }
  331.         }
  332.     }
  333.     if( _bBasic ) {
  334.         _iParts = ( _iLen / SPLIT_LEN );
  335.         for( new i = 0 ; i < _iParts ; i++ ) {
  336.             strins(message,"\n", ( ( i + 1 ) * SPLIT_LEN ) );
  337.         }
  338.     }
  339.     #undef SPLIT_LEN
  340.     return message;
  341. }
  342. stock gPM_ShowDialog(playerid,dialogid, extra = -1 ) {
  343.     if( dialogid == DIALOG_PM_MENU ) {
  344.         g_iDialogEdition{ playerid } = 0;
  345.         gPM_ClearMessageReceivers( playerid );
  346.         if( gPM_GetNewMessages( g_iUserID[ playerid ] ) ) {
  347.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_TABLIST , ""#COL_ORANGE"gPM  Menu" , ""COL_WHITE"Posteingang\t"#COL_GREEN""#MARK_NEW_MESSAGES""#COL_WHITE"\nPostausgang\t\nNachricht Versenden\t\nUser Übersicht\t" , "Weiter" , "Schließen" );
  348.         }
  349.         else {
  350.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_TABLIST , ""#COL_ORANGE"gPM  Menu" , ""COL_WHITE"Posteingang\t\nPostausgang\t\nNachricht Versenden\t\nUser Übersicht\t" , "Weiter" , "Schließen" );
  351.         }
  352.         return 1;
  353.     }
  354.     else if( dialogid == DIALOG_PM_EINGANG ) {
  355.         new
  356.             iNachrichtID,
  357.             sName[ MAX_PLAYER_NAME ],
  358.             iOffset,
  359.             iIndex = 0,
  360.             sTitel[ 64 ],
  361.             iStatus,
  362.             sText[ INPUT_SIZE ],
  363.             sString[ ( 45 + 4 + 16 + 40) * MAX_QUERY_RESULTS + 1],
  364.             iRows;
  365.         format( g_sQuery , sizeof( g_sQuery ) , "SELECT `NachrichtID`,`Name`,`Status`,substr(`Text`,0,%d) as `Text` FROM `NACHRICHT`,`USER` WHERE `EmpfaengerID` = '%d' AND `SenderID` = `UserID` AND NOT( `Status` & %d ) ORDER BY `NachrichtID` DESC;" , INPUT_SIZE, g_iUserID[ playerid ] , MessageStatus_DEL_Empfaenger );
  366.         g_dbrQuery = db_query( g_dbPM , g_sQuery );
  367.         g_iResults[ playerid ] = db_num_rows( g_dbrQuery );
  368.         if( g_iResults[ playerid ] ) {
  369.             sString[0] = '\0';
  370.             iOffset = g_iPage[ playerid ] * MAX_QUERY_RESULTS;
  371.             if( ( ( g_iPage[ playerid ] * MAX_QUERY_RESULTS ) + MAX_QUERY_RESULTS ) > g_iResults[ playerid ] ) {
  372.                 iRows = g_iResults[ playerid ];
  373.             }
  374.             else {
  375.                 iRows = ( g_iPage[ playerid ] * MAX_QUERY_RESULTS ) + MAX_QUERY_RESULTS;
  376.             }
  377.             if( g_iPage[ playerid ] > 0 ) {
  378.                 #if defined SHOW_PREVIOUS_PAGES
  379.                 format( sString , sizeof( sString ) , ""#COL_BLUE"<<"#COL_WHITE" Seite zurück ( %d - %d )\n" , ( iOffset - 20 ) , iOffset );
  380.                 #else
  381.                 sString = ""#COL_BLUE"<<"#COL_WHITE" Seite zurück\n";
  382.                 #endif
  383.             }
  384.             for(new i = 0 ; i < iOffset ; i++) {
  385.                 db_next_row( g_dbrQuery );
  386.             }
  387.             for(new i = iOffset ; i < iRows ; i++) {
  388.                 iNachrichtID = db_get_field_int( g_dbrQuery , 0);
  389.                 db_get_field( g_dbrQuery , 1 , sName , sizeof(sName ) );
  390.                 iStatus = db_get_field_int( g_dbrQuery , 2);
  391.                 db_get_field( g_dbrQuery , 3 , sText , sizeof( sText ) );
  392.                 if( iStatus & MessageStatus_Read ) {
  393.                     if( strlen( sText ) > 16 ) {
  394.                         format( sString , sizeof( sString ) ,"%s%.20s\t%.16s...\n" , sString , sName , sText );
  395.                     }
  396.                     else {
  397.                         format( sString , sizeof( sString ) ,"%s%.20s\t%s\n" , sString , sName , sText );
  398.                     }
  399.                 }
  400.                 else  {
  401.                     if( strlen( sText ) > 16 ) {
  402.                         format( sString , sizeof( sString ) , "%s%.20s\t%.16s... "#COL_GREEN""#MARK_NEW_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  403.                     }
  404.                     else {
  405.                         format( sString , sizeof( sString ) , "%s%.20s\t%s "#COL_GREEN""#MARK_NEW_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  406.                     }
  407.                 }
  408.                 g_iRowUniqueID[ playerid ][ iIndex++ ] = iNachrichtID;
  409.                 db_next_row( g_dbrQuery );
  410.             }
  411.             if( iRows < g_iResults[ playerid ] ) {
  412.                 #if defined SHOW_NEXT_PAGES
  413.                 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 ) );
  414.                 #else
  415.                 strcat( sString ,""#COL_BLUE">> "#COL_WHITE"Nächste Seite\n", sizeof( sString ) );
  416.                 #endif
  417.             }
  418.             format( sTitel , sizeof( sTitel ) ,""#COL_ORANGE"gPM  Posteingang ( %d - %d ) / %d " , iOffset + 1, iRows , g_iResults[ playerid ] );
  419.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_TABLIST , sTitel , sString , "Lesen" , "Zurück" );
  420.         }
  421.         else {
  422.             ShowPlayerDialog( playerid , DIALOG_PM_EINGANG_EMPTY , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Posteingang" , ""#COL_WHITE"Du hast keine Nachrichten im Eingang!" , "Zurück" , "" );
  423.         }
  424.         db_free_result( g_dbrQuery );
  425.         return 1;
  426.     }
  427.     else if( dialogid == DIALOG_PM_AUSGANG ) {
  428.         new
  429.             iNachrichtID,
  430.             iIndex = 0,
  431.             sName[MAX_PLAYER_NAME],
  432.             iStatus,
  433.             iOffset,
  434.             sTitel[ 64 ],
  435.             sText[ INPUT_SIZE ],
  436.             sString[ ( 45 + 10 + 16 + 4 + 40) * MAX_QUERY_RESULTS + 1],
  437.             iRows;
  438.         format(g_sQuery,sizeof(g_sQuery),"SELECT `NachrichtID`,`Name`,`Status`,substr(`Text`,0,%d) as `Text`  FROM `NACHRICHT`,`USER` WHERE `SenderID` = '%d' AND `EmpfaengerID` = `UserID` AND NOT( `Status` & %d ) ORDER BY `NachrichtID` DESC" , INPUT_SIZE, g_iUserID[ playerid ] , MessageStatus_DEL_Sender );
  439.         g_dbrQuery = db_query( g_dbPM , g_sQuery );
  440.         g_iResults[ playerid ] = db_num_rows( g_dbrQuery );
  441.         if( g_iResults[ playerid ] ) {
  442.             sString[0] = '\0';
  443.             iOffset = g_iPage[ playerid ] * MAX_QUERY_RESULTS;
  444.             if( ( ( g_iPage[ playerid ] * MAX_QUERY_RESULTS ) + MAX_QUERY_RESULTS ) > g_iResults[ playerid ] ) {
  445.                 iRows = g_iResults[ playerid ];
  446.             }
  447.             else {
  448.                 iRows = ( g_iPage[ playerid ] * MAX_QUERY_RESULTS ) + MAX_QUERY_RESULTS;
  449.             }
  450.             if( g_iPage[ playerid ] > 0 ) {
  451.                 #if defined SHOW_PREVIOUS_PAGES
  452.                 format( sString , sizeof( sString ) , ""#COL_BLUE"<<"#COL_WHITE" Seite zurück ( %d - %d )\n" , ( iOffset - MAX_QUERY_RESULTS ) , iOffset );
  453.                 #else
  454.                 sString = ""#COL_BLUE"<<"#COL_WHITE" Seite zurück\n";
  455.                 #endif
  456.             }
  457.             for(new i = 0 ; i < iOffset ; i++) {
  458.                 db_next_row( g_dbrQuery );
  459.             }
  460.             for(new i = iOffset ; i < iRows ; i++) {
  461.                 iNachrichtID = db_get_field_int( g_dbrQuery , 0 );
  462.                 db_get_field( g_dbrQuery , 1 , sName , sizeof( sName ) );
  463.                 iStatus = db_get_field_int( g_dbrQuery , 2 );
  464.                 db_get_field( g_dbrQuery , 3 , sText , sizeof( sText ) );
  465.                 if( iStatus & MessageStatus_Read ) {
  466.                     if( strlen( sText ) > 16 ) {
  467.                         format( sString , sizeof( sString ) ,"%s%.20s\t%.16s...\n" , sString , sName , sText );
  468.                     }
  469.                     else {
  470.                         format( sString , sizeof( sString ) ,"%s%.20s\t%s\n" , sString , sName , sText );
  471.                     }
  472.                 }
  473.                 else {
  474.                     if( strlen( sText ) > 16 ) {
  475.                         format( sString , sizeof( sString ) , "%s%.20s\t%.16s... "#COL_RED""#MARK_UNREAD_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  476.                     }
  477.                     else {
  478.                         format( sString , sizeof( sString ) , "%s%.20s\t%s "#COL_RED""#MARK_UNREAD_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  479.                     }
  480.                 }
  481.                 g_iRowUniqueID[ playerid ][ iIndex++ ] = iNachrichtID;
  482.                 db_next_row( g_dbrQuery );
  483.             }
  484.             if( iRows < g_iResults[ playerid ] ) {
  485.                 #if defined SHOW_NEXT_PAGES
  486.                 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 ));
  487.                 #else
  488.                 strcat( sString ,""#COL_BLUE">> "#COL_WHITE"Nächste Seite\n", sizeof( sString ) );
  489.                 #endif
  490.             }
  491.             format( sTitel , sizeof( sTitel ) ,""#COL_ORANGE"gPM  Postausgang ( %d - %d ) / %d " , iOffset + 1, iRows , g_iResults[ playerid ] );
  492.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_TABLIST , sTitel , sString , "Lesen" , "Zurück" );
  493.         }
  494.         else {
  495.             ShowPlayerDialog( playerid , DIALOG_PM_AUSGANG_EMPTY , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Postausgang" , ""#COL_WHITE"Du hast keine Nachrichten im Ausgang!" , "Zurück" , "" );
  496.         }
  497.         db_free_result( g_dbrQuery );
  498.         return 1;
  499.     }
  500.     else if( ( dialogid == DIALOG_PM_EINGANG_MSG ) || ( dialogid == DIALOG_PM_EINGANG_FILTER_MSG ) ) {
  501.         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 ) );
  502.         g_dbrQuery = db_query( g_dbPM , g_sQuery );
  503.         if( db_num_rows( g_dbrQuery ) ) {
  504.             new
  505.                 sTag[ 12 ],
  506.                 sTitel[ 32+16+8 ],
  507.                 sName[ MAX_PLAYER_NAME ],
  508.                 sUhrzeit[ 12 ],
  509.                 iStatus,
  510.                 sNachricht[ GPM_MAX_STRING ],
  511.                 sString[ 256 + ( GPM_MAX_STRING )  ];
  512.             db_get_field( g_dbrQuery , 0 , sName , sizeof( sName ) );
  513.             iStatus = db_get_field_int( g_dbrQuery , 1 );
  514.             db_get_field( g_dbrQuery , 2 , sTag , sizeof( sTag ) );
  515.             db_get_field( g_dbrQuery , 3 , sUhrzeit , sizeof( sUhrzeit ) );
  516.             db_get_field( g_dbrQuery , 4 , sNachricht , sizeof( sNachricht ) );
  517.             db_free_result( g_dbrQuery );
  518.             if( !( iStatus & MessageStatus_Read ) ) {
  519.                 iStatus |= MessageStatus_Read;
  520.                 format(g_sQuery,sizeof(g_sQuery),"UPDATE `Nachricht` SET `Status` = '%d' WHERE NachrichtID = '%d'" , iStatus , ( extra & 0xFFFF ) );
  521.                 db_free_result( db_query( g_dbPM , g_sQuery ) );
  522.             }
  523.             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 ) );
  524.             format( sTitel , sizeof( sTitel ) , ""#COL_ORANGE"gPM  Posteingang - Nachricht (%d)" , ( ( g_iPage[ playerid ] * MAX_QUERY_RESULTS ) + (( extra >> 16 ) & 0xFFFF )) + 1);
  525.             if( dialogid == DIALOG_PM_EINGANG_MSG ) {
  526.                 g_iUserInput[ playerid ] = extra ;
  527.                 ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , sTitel , sString , "Zurück" , "Löschen" );
  528.             }
  529.             else {
  530.                 ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , sTitel , sString , "Zurück" , "" );
  531.             }
  532.         }
  533.         return 1;
  534.     }
  535.     else if( ( dialogid == DIALOG_PM_AUSGANG_MSG ) || ( dialogid == DIALOG_PM_AUSGANG_FILTER_MSG ) ) {
  536.         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 ) );
  537.         g_dbrQuery = db_query( g_dbPM , g_sQuery );
  538.         if( db_num_rows( g_dbrQuery ) ) {
  539.             new
  540.                 sTag[ 12 ],
  541.                 sName[ MAX_PLAYER_NAME ],
  542.                 sUhrzeit[ 12 ],
  543.                 iStatus,
  544.                 sNachricht[ GPM_MAX_STRING ],
  545.                 sTitel[ 64 ],
  546.                 sString[ 256 +  MAX_INPUT_PAGES * INPUT_SIZE  ];
  547.             db_get_field( g_dbrQuery , 0 , sName , sizeof( sName ) );
  548.             iStatus = db_get_field_int( g_dbrQuery , 1 );
  549.             db_get_field( g_dbrQuery , 2 , sTag , sizeof( sTag ) );
  550.             db_get_field( g_dbrQuery , 3 , sUhrzeit , sizeof( sUhrzeit ) );
  551.             db_get_field( g_dbrQuery , 4 , sNachricht , sizeof( sNachricht ) );
  552.             db_free_result( g_dbrQuery );
  553.             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 ) );
  554.             if( !( iStatus & MessageStatus_Read ) ) {
  555.                 format( sString , sizeof( sString ) , "%s"#COL_GREY"Status: "#COL_RED"Ungelesen" , sString );
  556.             }
  557.             else {
  558.                 format( sString , sizeof( sString ) , "%s"#COL_GREY"Status: "#COL_GREEN"Gelesen" , sString );
  559.             }
  560.             format( sTitel , sizeof( sTitel ) , ""#COL_ORANGE"gPM  Postausgang - Nachricht (%d)" , ( ( g_iPage[ playerid ] * MAX_QUERY_RESULTS ) + (( extra >> 16 ) & 0xFFFF )) + 1);
  561.             if( dialogid == DIALOG_PM_AUSGANG_MSG ) {
  562.                 g_iUserInput[ playerid ] = extra;
  563.                 ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , sTitel , sString , "Zurück" , "Löschen" );
  564.             }
  565.             else {
  566.                 ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , sTitel , sString , "Zurück" , "" );
  567.             }
  568.         }
  569.         return 1;
  570.     }
  571.     else if( dialogid == DIALOG_PM_SCHREIBEN_USER ) {
  572.         if( extra == -1 ) {
  573.             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!\n\nDu kannst später noch mehr Empfänger hinzufügen" , "Weiter" , "Zurück" );
  574.         }
  575.         else if(extra == 0 ) {
  576.             new
  577.                 sString[ 256 ];
  578.             strunpack( g_supUserInput , g_sUserInput[ playerid ] );
  579.             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!\n\nDu kannst später noch mehr Empfänger hinzufügen" , g_supUserInput );
  580.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_INPUT , ""#COL_ORANGE"gPM  Nachricht Versenden - User" , sString , "Weiter" , "Zurück" );
  581.         }
  582.         else if( extra == 1 ) {
  583.             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!\n\nDu kannst später noch mehr Empfänger hinzufügen" , "Weiter" , "Zurück" );
  584.         }
  585.         return 1;
  586.     }
  587.     else if( dialogid == DIALOG_PM_SCHREIBEN_TEXT ) {
  588.         new
  589.             sString[256 + MAX_INPUT_PAGES * INPUT_SIZE ];
  590.         g_supUserInput[ 0 ] = '\0';
  591.         strunpack( g_supUserInput , g_sUserInput[ playerid ] );
  592.         //
  593.         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 );
  594.         if( g_iUserMessageInput{ playerid } ) {
  595.             if( g_iUsersMessageReceivers{ playerid } > 1 ) {
  596.                 format(sString,sizeof(sString),""#COL_WHITE"Gib unten in das Feld die Nachricht ein,\ndie du an den User '"#COL_GREY"%s"#COL_WHITE"' und "#COL_GREY"%d"#COL_WHITE" weitere User\nversenden möchtest.\nZum Fortfahren klick auf Weiter", g_supUserInput , ( g_iUsersMessageReceivers{ playerid } - 1 ) );
  597.             }
  598.             else {
  599.                 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 );
  600.             }
  601.             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 );
  602.         }
  603.         ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_INPUT , ""#COL_ORANGE"gPM  Nachricht Versenden - Nachricht" , sString , "Weiter" , "Zurück" );
  604.         return 1;
  605.     }
  606.     else if( dialogid == DIALOG_PM_SCHREIBEN_INFO ) {
  607.         /*
  608.             An:
  609.              < Liste >
  610.             Nachricht:
  611.              < Nachricht >
  612.         */
  613.         new
  614.             sHuge[  MAX_MESSAGE_RECEIVERS * ( MAX_PLAYER_NAME + 2 ) + MAX_INPUT_PAGES * INPUT_SIZE + 32 ];
  615.         sHuge = ""#COL_GREY"An:"#COL_WHITE"\n";
  616.         strcat( sHuge , gPM_ListmessageReceivers( playerid , true ) , sizeof( sHuge ));
  617.         format( sHuge, sizeof( sHuge ) ,"%s "#COL_ORANGE"%d "#COL_WHITE"Empfänger\n\n\n"#COL_GREY"Nachricht:"#COL_WHITE"\n", sHuge , g_iUsersMessageReceivers{ playerid } );
  618.         strcat( sHuge , gPM_StripMessageLines( gPM_MergeMessages( playerid ) ), sizeof( sHuge ));
  619.         ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Nachricht Versenden - Information" , sHuge , "Abschicken" , "Zurück" );
  620.     }
  621.     else if( dialogid == DIALOG_PM_SCHREIBEN_VERSENDET ) {
  622.         new
  623.             sString[ 256 ];
  624.         g_supUserInput[ 0 ] = '\0';
  625.         strcat( g_supUserInput , gPM_GetUsername( g_aiUserMessageReceivers[ playerid ][ 0 ] ) , sizeof( g_supUserInput ) );
  626.         if( g_iUsersMessageReceivers{ playerid } > 1 ) {
  627.             format( sString , sizeof(sString) , ""#COL_WHITE"Deine Nachricht wurde erfolgreich an den User '"#COL_GREY"%s"#COL_WHITE"' und "#COL_GREY"%d"#COL_WHITE" weitere User versendet!\nDu findest sie in deinem Postausgang" , g_supUserInput , ( g_iUsersMessageReceivers{ playerid } - 1 ) );
  628.         }
  629.         else {
  630.             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 );
  631.         }
  632.         ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Nachricht Versenden - Versendet" , sString , "Hauptmenu" , "" );
  633.         return 1;
  634.     }
  635.     #if defined EDIT_MESSAGES
  636.     else if( dialogid == DIALOG_PM_SCHREIBEN_BEARBEITEN ) {
  637.         new
  638.             usMessage[ INPUT_SIZE ],
  639.             sString[ MAX_INPUT_PAGES * ( 18 + 3 + 5) + 1];
  640.         for(new i ; i < g_iUserMessageInput{ playerid } ; i++) {
  641.             strunpack( usMessage , g_sUserMessageInput[ playerid ][ i ] );
  642.             format(sString,sizeof(sString),"%s%d) %.18s ...\n" , sString , i + 1 , usMessage );
  643.         }
  644.         ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , ""#COL_ORANGE"gPM   Nachricht bearbeiten" , sString , "Öffnen" , "Zurück" );
  645.     }
  646.     #endif
  647.     else if( dialogid == DIALOG_PM_USER_UEBERSICHT ) {
  648.         if( extra == -1 ) {
  649.             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" );
  650.         }
  651.         else if( extra == 0 ) {
  652.             new
  653.                 sString[ 256 ];
  654.             strunpack( g_supUserInput , g_sUserInput[ playerid ] );
  655.             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 \ndas Feld seinen Namen eingibst" , g_supUserInput );
  656.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_INPUT , ""#COL_ORANGE"gPM  User Übersicht" , sString , "Suchen" , "Zurück" );
  657.         }
  658.         else if( extra == 1 ) {
  659.             new
  660.                 sString[ 256 ];
  661.             strunpack( g_supUserInput , g_sUserInput[ playerid ] );
  662.             format( sString , sizeof( sString ) , ""#COL_WHITE"Es wurden zu viele User über das Suchkriterium '"COL_GREY"%s"#COL_WHITE"' gefunden.\nDu kannst einen User suchen, indem du unten in \ndas Feld seinen Namen eingibst." , g_supUserInput );
  663.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_INPUT , ""#COL_ORANGE"gPM  User Übersicht" , sString , "Suchen" , "Zurück" );
  664.         }
  665.         else if( extra == 2 ) {
  666.             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" );
  667.         }
  668.         return 1;
  669.     }
  670.     else if( dialogid == DIALOG_PM_USER_UEBERSICHT_QUERY ) {
  671.         new
  672.             sString[ MAX_PLAYER_NAME * MAX_QUERY_RESULTS ],
  673.             sTitel[ 64 ],
  674.             sName[ MAX_PLAYER_NAME ],
  675.             iRows;
  676.         g_dbrQuery = DBResult:extra;
  677.         iRows = db_num_rows( g_dbrQuery );
  678.         for(new i = 0 ; i < iRows ; i++) {
  679.             g_iRowUniqueID[ playerid ][ i ] = db_get_field_int( g_dbrQuery , 0 );
  680.             db_get_field( g_dbrQuery , 1 , sName , sizeof( sName ) );
  681.             format( sString  ,sizeof(sString) , "%s%s\n" , sString , sName );
  682.             db_next_row( g_dbrQuery );
  683.         }
  684.         strunpack( g_supUserInput , g_sUserInput[ playerid ] );
  685.         format( sTitel , sizeof( sTitel ) , ""#COL_ORANGE"gPM Nachricht  User Übersicht - Filter '%s' (%d)" , g_supUserInput , iRows );
  686.         if( g_iDialogEdition{ playerid } == DIALOG_EDITION_NORMAL ) {
  687.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , sTitel , sString , "Verarbeitung" , "Zurück" );
  688.         }
  689.         else if( g_iDialogEdition{ playerid } == DIALOG_EDITION_ADD_EMPFAENGER ) {
  690.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , sTitel , sString , "Hinzufügen" , "Zurück" );
  691.         }
  692.         db_free_result( g_dbrQuery );
  693.         return 1;
  694.     }
  695.     else if( dialogid == DIALOG_PM_USER_VERARBEITUNG ) {
  696.         new
  697.             sTitel[ 80 ];
  698.         strunpack( g_supUserInput , g_sUserInput[ playerid ] );
  699.         format( sTitel , sizeof( sTitel ) , ""#COL_ORANGE"gPM Nachricht  User Übersicht - Verarbeitung '%s'" , g_supUserInput );
  700.         ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , sTitel , "Posteingang\nPostausgang\nNachricht Senden" , "Durchführen" , "Zurück" );
  701.     }
  702.     else if( dialogid == DIALOG_PM_SCHREIBEN_MENU ) {
  703.         new
  704.             sListtext[ 128 ];
  705.         /*
  706.         if( g_iUserMessageInput[ playerid ] == 0 ) {
  707.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , ""#COL_ORANGE"gPM  Nachricht Versenden - Menu" , "Versenden\n"#COL_RED"Schreiben fortsetzen\n" , "Weiter" , "Zurück" );
  708.         }
  709.         */
  710.         if( g_iUsersMessageReceivers{ playerid } < 1 ) {
  711.             sListtext = "Versenden ( "#COL_RED"0 Empfänger"#COL_WHITE" )\n";
  712.         }
  713.         else {
  714.             sListtext = "Versenden\n";
  715.         }
  716.         if( g_iUserMessageInput{ playerid } >= MAX_INPUT_PAGES ) {
  717.             format( sListtext , sizeof( sListtext ) , "%s"#COL_RED"Schreiben fortsetzen\n",sListtext);
  718.         }
  719.         else {
  720.             format( sListtext , sizeof( sListtext ) , "%s"#COL_GREEN"Schreiben fortsetzen\n",sListtext);
  721.         }
  722.         format( sListtext , sizeof( sListtext ) , "%s"#COL_WHITE"Empfänger bearbeiten\n",sListtext);
  723.         #if defined EDIT_MESSAGES
  724.         else if( g_iUserMessageInput{ playerid } >= MAX_INPUT_PAGES ) {
  725.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , ""#COL_ORANGE"gPM  Nachricht Versenden - Menu" , "Versenden\n"#COL_RED"Schreiben fortsetzen\n"#COL_WHITE"Texte Bearbeiten" , "Weiter" , "Zurück" );
  726.         }
  727.         else {
  728.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , ""#COL_ORANGE"gPM  Nachricht Versenden - Menu" , "Versenden\n"#COL_GREEN"Schreiben fortsetzen\n"#COL_WHITE"Texte Bearbeiten" , "Weiter" , "Zurück" );
  729.         }
  730.         #endif
  731.         ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , ""#COL_ORANGE"gPM  Nachricht Versenden - Menu" , sListtext , "Weiter" , "Zurück" );
  732.     }
  733.     else if( dialogid == DIALOG_PM_EINGANG_ENTF_ABFRAGE ) {
  734.         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" );
  735.     }
  736.     else if( dialogid == DIALOG_PM_EINGANG_ENTF ) {
  737.         gPM_DeleteMessage( DELETE_MESSAGE_BY_EMPFAENGER , extra );
  738.         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" , "" );
  739.     }
  740.     else if( dialogid == DIALOG_PM_AUSGANG_ENTF_ABFRAGE ) {
  741.         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" );
  742.     }
  743.     else if( dialogid == DIALOG_PM_AUSGANG_ENTF ) {
  744.         gPM_DeleteMessage( DELETE_MESSAGE_BY_SENDER , extra );
  745.         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" , "" );
  746.     }
  747.     else if( dialogid == DIALOG_PM_EINGANG_FILTER ) {
  748.         new
  749.             iNachrichtID,
  750.             sName[ MAX_PLAYER_NAME ],
  751.             sTitel[ 64 ],
  752.             iStatus,
  753.             sText[ INPUT_SIZE ],
  754.             sString[ ( 45 + 4 + 16 + 40) * MAX_QUERY_RESULTS + 1];
  755.         format( g_sQuery , sizeof( g_sQuery ) , "SELECT `NachrichtID`,`Name`,`Status`,substr(`Text`,0,%d) as `Text`  FROM `NACHRICHT`,`USER` WHERE `EmpfaengerID` = '%d' AND `SenderID` = '%d' AND `SenderID` = `UserID` AND NOT( `Status` & %d ) ORDER BY `NachrichtID` DESC LIMIT %d;" , INPUT_SIZE, g_iUserID[ playerid ] , g_iUserInput[ playerid ] , MessageStatus_DEL_Empfaenger , MAX_QUERY_RESULTS);
  756.         g_dbrQuery = db_query( g_dbPM , g_sQuery );
  757.         g_iResults[ playerid ] = db_num_rows( g_dbrQuery );
  758.         if( g_iResults[ playerid ] ) {
  759.             sString[0] = '\0';
  760.             for(new i = 0 ; i < g_iResults[ playerid ] ; i++) {
  761.                 iNachrichtID = db_get_field_int( g_dbrQuery , 0 );
  762.                 db_get_field( g_dbrQuery , 1 , sName , sizeof(sName ) );
  763.                 iStatus = db_get_field_int( g_dbrQuery , 2 );
  764.                 db_get_field( g_dbrQuery , 3 , sText , sizeof( sText ) );
  765.                 if( iStatus & MessageStatus_Read ) {
  766.                     if( strlen( sText ) > 16 ) {
  767.                         format( sString , sizeof( sString ) ,"%s%.20s\t%.16s...\n" , sString , sName , sText );
  768.                     }
  769.                     else {
  770.                         format( sString , sizeof( sString ) ,"%s%.20s\t%s\n" , sString , sName , sText );
  771.                     }
  772.                 }
  773.                 else  {
  774.                     if( strlen( sText ) > 16 ) {
  775.                         format( sString , sizeof( sString ) , "%s%.20s\t%.16s... "#COL_GREEN""#MARK_NEW_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  776.                     }
  777.                     else {
  778.                         format( sString , sizeof( sString ) , "%s%.20s\t%s "#COL_GREEN""#MARK_NEW_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  779.                     }
  780.                 }
  781.                 g_iRowUniqueID[ playerid ][ i ] = iNachrichtID;
  782.                 db_next_row( g_dbrQuery );
  783.             }
  784.             g_supUserInput[ 0 ] = '\0';
  785.             strunpack( g_supUserInput , g_sUserInput[ playerid ] );
  786.             format( sTitel , sizeof( sTitel ) ,""#COL_ORANGE"gPM  Posteingang ( %s ) " , g_supUserInput );
  787.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_TABLIST , sTitel , sString , "Lesen" , "Zurück" );
  788.         }
  789.         else {
  790.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Posteingang" , ""#COL_WHITE"Du hast keine Nachrichten im Eingang!" , "Zurück" , "" );
  791.         }
  792.         db_free_result( g_dbrQuery );
  793.         return 1;
  794.     }
  795.     else if( dialogid == DIALOG_PM_AUSGANG_FILTER ) {
  796.         new
  797.             iNachrichtID,
  798.             sName[MAX_PLAYER_NAME],
  799.             iStatus,
  800.             sTitel[ 64 ],
  801.             sText[ INPUT_SIZE ],
  802.             sString[ ( 45 + 10 + 16 + 4 + 40) * MAX_QUERY_RESULTS + 1];
  803.         format(g_sQuery,sizeof(g_sQuery),"SELECT `NachrichtID`,`Name`,`Status`,substr(`Text`,0,%d) as `Text`  FROM `NACHRICHT`,`USER` WHERE `SenderID` = '%d' AND `EmpfaengerID` = '%d' AND `EmpfaengerID` = `UserID` AND NOT( `Status` & %d ) ORDER BY `NachrichtID` DESC" , INPUT_SIZE, g_iUserID[ playerid ] , g_iUserInput[ playerid ] , MessageStatus_DEL_Sender );
  804.         g_dbrQuery = db_query( g_dbPM , g_sQuery );
  805.         g_iResults[ playerid ] = db_num_rows( g_dbrQuery );
  806.         if( g_iResults[ playerid ] ) {
  807.             sString[0] = '\0';
  808.             for(new i = 0 ; i < g_iResults[ playerid ] ; i++) {
  809.                 iNachrichtID = db_get_field_int( g_dbrQuery , 0 );
  810.                 db_get_field( g_dbrQuery , 1 , sName , sizeof( sName ) );
  811.                 iStatus = db_get_field_int( g_dbrQuery , 2 );
  812.                 db_get_field( g_dbrQuery , 3 , sText , sizeof( sText ) );
  813.                 if( iStatus & MessageStatus_Read ) {
  814.                     if( strlen( sText ) > 16 ) {
  815.                         format( sString , sizeof( sString ) ,"%s%.20s\t%.16s...\n" , sString , sName , sText );
  816.                     }
  817.                     else {
  818.                         format( sString , sizeof( sString ) ,"%s%.20s\t%s\n" , sString , sName , sText );
  819.                     }
  820.                 }
  821.                 else {
  822.                     if( strlen( sText ) > 16 ) {
  823.                         format( sString , sizeof( sString ) , "%s%.20s\t%.16s... "#COL_RED""#MARK_UNREAD_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  824.                     }
  825.                     else {
  826.                         format( sString , sizeof( sString ) , "%s%.20s\t%s "#COL_RED""#MARK_UNREAD_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  827.                     }
  828.                 }
  829.                 g_iRowUniqueID[ playerid ][ i ] = iNachrichtID;
  830.                 db_next_row( g_dbrQuery );
  831.             }
  832.             g_supUserInput[ 0 ] = '\0';
  833.             strunpack( g_supUserInput , g_sUserInput[ playerid ] );
  834.             format( sTitel , sizeof( sTitel ) , ""#COL_ORANGE"gPM  Postausgang ( %s )" , g_supUserInput);
  835.             ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_TABLIST , sTitel , sString , "Lesen" , "Zurück" );
  836.         }
  837.         else {
  838.             ShowPlayerDialog( playerid , DIALOG_PM_AUSGANG_EMPTY , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Postausgang" , ""#COL_WHITE"Du hast keine Nachrichten im Ausgang!" , "Zurück" , "" );
  839.         }
  840.         db_free_result( g_dbrQuery );
  841.         return 1;
  842.     }
  843.     else if( dialogid == DIALOG_PM_SCHREIBEN_EMPF_EDIT ) {
  844.         new
  845.             sTitel[ 64 ],
  846.             sListtext[ ( MAX_MESSAGE_RECEIVERS * ( MAX_PLAYER_NAME + 2 ) ) + 32 ];
  847.         sListtext = ""#COL_BLUE"<<"#COL_WHITE" Zurück\n";
  848.         strcat( sListtext , gPM_ListmessageReceivers( playerid ) , sizeof( sListtext ) );
  849.         if( g_iUsersMessageReceivers{ playerid } >= MAX_MESSAGE_RECEIVERS ) {
  850.             format( sListtext , sizeof(sListtext) , "%s"#COL_RED"Empfänger hinzufügen\n" , sListtext );
  851.         }
  852.         else {
  853.             format( sListtext , sizeof(sListtext) , "%s"#COL_GREEN"Empfänger hinzufügen\n" , sListtext );
  854.         }
  855.         g_iDialogEdition{ playerid } = DIALOG_EDITION_ADD_EMPFAENGER;
  856.         format( sTitel , sizeof( sTitel ) , ""#COL_ORANGE"gPM  Empfänger bearbeiten ( %d / "#MAX_MESSAGE_RECEIVERS" )" , g_iUsersMessageReceivers{ playerid } );
  857.         ShowPlayerDialog( playerid , dialogid , DIALOG_STYLE_LIST , sTitel , sListtext , "Weiter" , "Löschen" );
  858.     }
  859.     return 1;
  860. }
  861. stock gPM_OnDialogResponse( playerid, dialogid , response , listitem , inputtext[] ) {
  862.     if( dialogid == DIALOG_PM_MENU ) {
  863.         if(response) {
  864.             switch(listitem) {
  865.                 case 0: gPM_ShowDialog( playerid , DIALOG_PM_EINGANG );
  866.                 case 1: gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG );
  867.                 case 2: gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_USER );
  868.                 case 3: gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT );
  869.             }
  870.         }
  871.     }
  872.     else if( dialogid == DIALOG_PM_EINGANG ) {
  873.         if( response ) {
  874.             if( g_iPage[ playerid ] > 0 ) {
  875.                 if( listitem == MAX_QUERY_RESULTS + 1 ) {
  876.                     g_iPage[ playerid ]++;
  877.                     return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG );
  878.                 }
  879.                 else if( listitem == 0 ){
  880.                     if( g_iPage[ playerid ] > 0 ) {
  881.                         g_iPage[ playerid ]--;
  882.                         return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG );
  883.                     }
  884.                 }
  885.                 else {
  886.                     return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_MSG , ( g_iRowUniqueID[ playerid ][ listitem - 1] | ( listitem - 1 ) << 16 ) );
  887.                 }
  888.             }
  889.             else {
  890.                 if( listitem == MAX_QUERY_RESULTS ) {
  891.                     g_iPage[ playerid ]++;
  892.                     return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG );
  893.                 }
  894.                 else {
  895.                     return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_MSG , ( g_iRowUniqueID[ playerid ][ listitem ] | ( listitem << 16 ) ) );
  896.                 }
  897.             }
  898.         }
  899.         else {
  900.             g_iPage[ playerid ] = 0;
  901.             return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  902.         }
  903.     }
  904.     else if( dialogid == DIALOG_PM_EINGANG_MSG ) {
  905.         if(response) {
  906.             return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG );
  907.         }
  908.         else {
  909.             return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_ENTF_ABFRAGE );
  910.         }
  911.     }
  912.     else if( dialogid == DIALOG_PM_EINGANG_ENTF_ABFRAGE ) {
  913.         if(response) {
  914.             return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_ENTF , ( g_iUserInput[ playerid ] & 0xFFFF ) );
  915.         }
  916.         else {
  917.             return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_MSG , g_iUserInput[ playerid ] );
  918.         }
  919.     }
  920.     else if( dialogid == DIALOG_PM_EINGANG_ENTF ) {
  921.         g_iPage[ playerid ] = 0;
  922.         return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG );
  923.     }
  924.     else if( dialogid == DIALOG_PM_AUSGANG ) {
  925.         if( response ) {
  926.             if( g_iPage[ playerid ] > 0 ) {
  927.                 if( listitem == MAX_QUERY_RESULTS + 1 ) {
  928.                     g_iPage[ playerid ]++;
  929.                     return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG );
  930.                 }
  931.                 else if( listitem == 0 ){
  932.                     if( g_iPage[ playerid ] > 0 ) {
  933.                         g_iPage[ playerid ]--;
  934.                         return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG );
  935.                     }
  936.                 }
  937.                 else {
  938.                     return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_MSG , ( g_iRowUniqueID[ playerid ][ listitem - 1] | ( listitem - 1 ) << 16 ) );
  939.                 }
  940.             }
  941.             else {
  942.                 if( listitem == MAX_QUERY_RESULTS ) {
  943.                     g_iPage[ playerid ]++;
  944.                     return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG );
  945.                 }
  946.                 else {
  947.                     return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_MSG , ( g_iRowUniqueID[ playerid ][ listitem ] | ( listitem << 16 ) ) );
  948.                 }
  949.             }
  950.         }
  951.         else {
  952.             g_iPage[ playerid ] = 0;
  953.             return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  954.         }
  955.     }
  956.     else if( dialogid == DIALOG_PM_AUSGANG_MSG ) {
  957.         if(response) {
  958.             return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG );
  959.         }
  960.         else {
  961.             return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_ENTF_ABFRAGE );
  962.         }
  963.     }
  964.     else if( dialogid == DIALOG_PM_AUSGANG_ENTF_ABFRAGE ) {
  965.         if(response) {
  966.             return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_ENTF , ( g_iUserInput[ playerid ] & 0xFFFF ) );
  967.         }
  968.         else {
  969.             return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_MSG , g_iUserInput[ playerid ] );
  970.         }
  971.     }
  972.     else if( dialogid == DIALOG_PM_AUSGANG_ENTF ) {
  973.         g_iPage[ playerid ] = 0;
  974.         return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG );
  975.     }
  976.     else if( dialogid == DIALOG_PM_SCHREIBEN_USER ) {
  977.         if(response) {
  978.             new
  979.                 iUserID;
  980.             g_sUserInput[ playerid ][ 0 ] = '\0';
  981.             g_supUserInput[ 0 ] = '\0';
  982.             strcat( g_supUserInput , db_escape( inputtext ) , MAX_PLAYER_NAME );
  983.             strpack( g_sUserInput[ playerid ] , g_supUserInput , MAX_PLAYER_NAME );
  984.             iUserID = gPM_GetUserID( g_supUserInput );
  985.             if( iUserID == INVALID_USERID ) {
  986.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_USER , 0 );
  987.             }
  988.             if( iUserID == g_iUserID[ playerid ] ) {
  989.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_USER , 1 );
  990.             }
  991.             g_iUserInput[ playerid ] = iUserID;
  992.             gPM_AddMessageReceiver( playerid , iUserID );
  993.             g_iUserMessageInput{ playerid } = 0;
  994.             return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_TEXT );
  995.         }
  996.         else {
  997.             return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  998.         }
  999.     }
  1000.     else if( dialogid == DIALOG_PM_SCHREIBEN_TEXT ) {
  1001.         if(response) {
  1002.             if( !inputtext[0] ) {
  1003.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_TEXT );
  1004.             }
  1005.             g_supMessageSingleInput[ 0 ] = '\0';
  1006.             strcat( g_supMessageSingleInput , db_escape( inputtext ) );
  1007.             g_sUserMessageInput[ playerid ][ g_iUserMessageInput{ playerid } ][ 0 ] = '\0';
  1008.             strpack( g_sUserMessageInput[ playerid ][ g_iUserMessageInput{ playerid }++ ] , g_supMessageSingleInput);
  1009.             return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_MENU );
  1010.         }
  1011.         else {
  1012.             if( g_iUserMessageInput{ playerid } >= 1 ) {
  1013.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_MENU );
  1014.             }
  1015.             else {
  1016.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_USER );
  1017.             }
  1018.         }
  1019.     }
  1020.     else if( dialogid == DIALOG_PM_SCHREIBEN_VERSENDET ) {
  1021.         return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  1022.     }
  1023.     else if( dialogid == DIALOG_PM_USER_UEBERSICHT ) {
  1024.         if(response) {
  1025.             new
  1026.                 iRows;
  1027.             if( strlen(inputtext) < 2 ) {
  1028.                 return gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT , 2 );
  1029.             }
  1030.             g_sUserInput[ playerid ][ 0 ] = '\0';
  1031.             g_supUserInput[ 0 ] = '\0';
  1032.             strcat( g_supUserInput, db_escape( inputtext ) , MAX_PLAYER_NAME );
  1033.             strpack( g_sUserInput[ playerid ] , g_supUserInput , MAX_PLAYER_NAME );
  1034.             gPM_FilterUsernames( g_iUserID[ playerid ] , g_supUserInput , g_dbrQuery );
  1035.             iRows = db_num_rows( g_dbrQuery );
  1036.             if( iRows == 0 ) {
  1037.                 db_free_result( g_dbrQuery );
  1038.                 return gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT , 0 );
  1039.             }
  1040.             else if( iRows > MAX_QUERY_RESULTS ) {
  1041.                 db_free_result( g_dbrQuery );
  1042.                 return gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT , 1 );
  1043.             }
  1044.             return gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT_QUERY , _:g_dbrQuery );
  1045.         }
  1046.         else {
  1047.             if( g_iDialogEdition{ playerid } == DIALOG_EDITION_ADD_EMPFAENGER ) {
  1048.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_MENU );
  1049.             }
  1050.             else if( g_iDialogEdition{ playerid } == DIALOG_EDITION_NORMAL ) {
  1051.                 return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  1052.             }
  1053.         }
  1054.     }
  1055.     else if( dialogid == DIALOG_PM_USER_UEBERSICHT_QUERY ) {
  1056.         if( response ) {
  1057.             g_sUserInput[ playerid ][ 0 ] = '\0';
  1058.             g_supUserInput[ 0 ] = '\0';
  1059.             strcat( g_supUserInput, inputtext , MAX_PLAYER_NAME );
  1060.             strpack( g_sUserInput[ playerid ] , g_supUserInput , MAX_PLAYER_NAME );
  1061.             g_iUserInput[ playerid ] = gPM_GetUserID( g_supUserInput );
  1062.             if( g_iDialogEdition{ playerid } == DIALOG_EDITION_NORMAL ) {
  1063.                 return gPM_ShowDialog( playerid , DIALOG_PM_USER_VERARBEITUNG );
  1064.             }
  1065.             else if( g_iDialogEdition{ playerid } == DIALOG_EDITION_ADD_EMPFAENGER ) {
  1066.                 gPM_AddMessageReceiver( playerid , g_iUserInput[ playerid ] );
  1067.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_EMPF_EDIT );
  1068.             }
  1069.         }
  1070.         else {
  1071.             return gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT );
  1072.         }
  1073.     }
  1074.     else if ( dialogid == DIALOG_PM_EINGANG_EMPTY ) {
  1075.         return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  1076.     }
  1077.     else if ( dialogid == DIALOG_PM_AUSGANG_EMPTY ) {
  1078.         return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  1079.     }
  1080.     else if( dialogid == DIALOG_PM_USER_VERARBEITUNG ) {
  1081.         if(response) {
  1082.             switch( listitem ) {
  1083.                 case 0: {
  1084.                     return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_FILTER);
  1085.                 }
  1086.                 case 1: {
  1087.                     return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_FILTER);
  1088.                 }
  1089.                 case 2: {
  1090.                     g_iUserMessageInput{ playerid } = 0;
  1091.                     gPM_AddMessageReceiver( playerid , g_iUserInput[ playerid ] );
  1092.                     return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_TEXT );
  1093.                 }
  1094.             }
  1095.         }
  1096.         else {
  1097.        
  1098.         }
  1099.     }
  1100.     else if( dialogid == DIALOG_PM_SCHREIBEN_INFO ) {
  1101.         if(response) {
  1102.             gPM_MergeMessages( playerid ); // -> g_supMessageInput
  1103.             gPM_SendMessageArray( g_iUserID[ playerid ] , g_aiUserMessageReceivers[ playerid ] , g_supMessageInput , g_iUsersMessageReceivers{ playerid } );
  1104.             return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_VERSENDET );
  1105.         }
  1106.         else {
  1107.             return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_MENU );
  1108.         }
  1109.     }
  1110.     else if( dialogid == DIALOG_PM_SCHREIBEN_MENU ) {
  1111.         if(response) {
  1112.             switch( listitem ) {
  1113.                 case 0: {
  1114.                     if( g_iUsersMessageReceivers{ playerid } < 1 ) {
  1115.                         return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_MENU , 0);
  1116.                     }
  1117.                     return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_INFO );
  1118.                 }
  1119.                 case 1: {
  1120.                     if( g_iUserMessageInput{ playerid } >= MAX_INPUT_PAGES ) {
  1121.                         return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_MENU );
  1122.                     }
  1123.                     else {
  1124.                         return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_TEXT );
  1125.                     }
  1126.                 }
  1127.                 case 2: {
  1128.                     return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_EMPF_EDIT );
  1129.                 }
  1130.                 #if defined EDIT_MESSAGES
  1131.                 case 3: {
  1132.                     return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_BEARBEITEN );
  1133.                 }
  1134.                 #endif
  1135.             }
  1136.         }
  1137.         else {
  1138.             return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  1139.         }
  1140.     }
  1141.     else if( dialogid == DIALOG_PM_EINGANG_FILTER ) {
  1142.         if(response) {
  1143.             if( listitem != INVALID_LIST_ITEM ) {
  1144.                 return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_FILTER_MSG , g_iRowUniqueID[ playerid ][ listitem ] );
  1145.             }
  1146.         }
  1147.         return gPM_ShowDialog( playerid , DIALOG_PM_USER_VERARBEITUNG );
  1148.     }
  1149.     else if( dialogid == DIALOG_PM_AUSGANG_FILTER ) {
  1150.         if(response) {
  1151.             if( listitem != INVALID_LIST_ITEM ) {
  1152.                 return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_FILTER_MSG , g_iRowUniqueID[ playerid ][ listitem ] );
  1153.             }
  1154.         }
  1155.         return gPM_ShowDialog( playerid , DIALOG_PM_USER_VERARBEITUNG );
  1156.     }
  1157.     else if( dialogid == DIALOG_PM_AUSGANG_FILTER_MSG ) {
  1158.         return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_FILTER );
  1159.     }
  1160.     else if( dialogid == DIALOG_PM_EINGANG_FILTER_MSG ) {
  1161.         return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_FILTER );
  1162.     }
  1163.     else if( dialogid == DIALOG_PM_SCHREIBEN_EMPF_EDIT ) {
  1164.         if(response) {
  1165.             if( listitem == 0 ) {
  1166.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_MENU );
  1167.             }
  1168.             else if( listitem == g_iUsersMessageReceivers{ playerid } + 1 ) {
  1169.                 if( g_iUsersMessageReceivers{ playerid } >= MAX_MESSAGE_RECEIVERS ) {
  1170.                     return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_EMPF_EDIT );
  1171.                 }
  1172.                 else {
  1173.                     return gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT );
  1174.                 }
  1175.             }
  1176.             else {
  1177.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_EMPF_EDIT );
  1178.             }
  1179.         }
  1180.         else {
  1181.             if( 0 < listitem < ( g_iUsersMessageReceivers{ playerid } + 1 ) ) {
  1182.                 gPM_RemoveMessageReceiver( playerid , gPM_GetUserID( inputtext ) );
  1183.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_EMPF_EDIT );
  1184.             }
  1185.             else {
  1186.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_MENU );
  1187.             }
  1188.         }
  1189.     }
  1190.     return 0;
  1191. }
  1192.  
  1193. COMMAND:gpm(playerid,params[]) {
  1194.     if( g_iLoggedIn{ playerid } == 0 ) {
  1195.         new
  1196.             sString[ 128 ];
  1197.         GetPlayerName(playerid, sString , sizeof( sString ) );
  1198.         format( sString , sizeof( sString ) , "* gPM: Du wurdest mit dem Usernamen '%s' nicht zertifiziert!" , sString );
  1199.         SendClientMessage( playerid , COLOR_RED , sString);
  1200.         return 1;
  1201.     }
  1202.     return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  1203. }
  1204.  
  1205. forward gPM_OnLogin(playerid);
  1206. public gPM_OnLogin(playerid) {
  1207.     if( playerid != INVALID_PLAYER_ID ) {
  1208.         new
  1209.             iNewMessages;
  1210.         iNewMessages = gPM_GetNewMessages( g_iUserID[ playerid ] );
  1211.         if( iNewMessages ) {
  1212.             new
  1213.                 sString[ 70 ];
  1214.             format( sString , sizeof( sString ) , "* gPM: Du hast %d ungelese Nachrichten in deinem Posteingang! ( /gpm )" , iNewMessages );
  1215.             SendClientMessage( playerid , COLOR_WHITE , sString );
  1216.         }
  1217.         g_iLoggedIn{ playerid } = 1;
  1218.     }
  1219.     return 1;
  1220. }
  1221.  
  1222. stock gPM_AddUsers(const file[]) {
  1223.     new
  1224.         _sTmp[ MAX_PLAYER_NAME + 5 ],
  1225.         File:fFile;
  1226.     fFile = fopen( file , io_read );
  1227.     if( fFile ) {
  1228.         db_free_result( db_query( g_dbPM , "BEGIN" ) );
  1229.         while( fread( fFile , _sTmp , sizeof( _sTmp ) ) ) {
  1230.             StripNewLine( _sTmp );
  1231.             if( gPM_GetUserID( _sTmp ) == INVALID_USERID ) {
  1232.                 gPM_AddUsername( _sTmp );
  1233.             }
  1234.         }
  1235.         fclose( fFile );
  1236.         db_free_result( db_query( g_dbPM , "COMMIT" ) );
  1237.         return 1;
  1238.     }
  1239.     return 0;
  1240. }
  1241.  
  1242. stock StripNewLine(str[]) //ysi_misc.own
  1243. {
  1244.     new
  1245.         l = strlen(str);
  1246.     while (l-- && str[l] <= ' ') str[l] = '\0';
  1247. }
  1248.  
  1249. stock gPM_FilterUsernames( my_userid , const username_filter[] , & DBResult:dbr ) {
  1250.     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 );
  1251.     dbr = db_query( g_dbPM , g_sQuery );
  1252.     return 1;
  1253. }
  1254.  
  1255. stock gPM_GetUsers() {
  1256.     new
  1257.         iUsers;
  1258.     g_dbrQuery = db_query( g_dbPM , "SELECT COUNT(*) FROM `User`" );
  1259.     iUsers = db_get_field_int( g_dbrQuery , 0 );
  1260.     db_free_result( g_dbrQuery );
  1261.     return iUsers;
  1262. }
  1263.  
  1264. stock gPM_GetNachrichten() {
  1265.     new
  1266.         iNachrichten;
  1267.     g_dbrQuery = db_query( g_dbPM , "SELECT COUNT(*) FROM `Nachricht`" );
  1268.     iNachrichten = db_get_field_int( g_dbrQuery , 0 );
  1269.     db_free_result( g_dbrQuery );
  1270.     return iNachrichten;
  1271. }
  1272.  
  1273. stock gPM_GetUsername( userid ) {
  1274.     new
  1275.         sUsername[ MAX_PLAYER_NAME ] = "INVALID_USERNAME";
  1276.     format( g_sQuery , sizeof( g_sQuery ) , "SELECT `Name` FROM `User` WHERE `UserID` = '%d'" , userid );
  1277.     g_dbrQuery = db_query( g_dbPM , g_sQuery );
  1278.     if( db_num_rows( g_dbrQuery ) ) {
  1279.         db_get_field( g_dbrQuery , 0 , sUsername , sizeof( sUsername ) );
  1280.     }
  1281.     db_free_result( g_dbrQuery );
  1282.     return sUsername;
  1283. }
  1284.  
  1285. #define MAX_INI_ENTRY_TEXT INPUT_SIZE
  1286. stock db_escape(text[]) // Y_LESS
  1287. {
  1288.     new
  1289.         ret[MAX_INI_ENTRY_TEXT * 2],
  1290.         ch,
  1291.         i,
  1292.         j;
  1293.     while ((ch = text[i++]) && j < sizeof (ret))
  1294.     {
  1295.         if (ch == '\'')
  1296.         {
  1297.             if (j < sizeof (ret) - 2)
  1298.             {
  1299.                 ret[j++] = '\'';
  1300.                 ret[j++] = '\'';
  1301.             }
  1302.         }
  1303.         else if (j < sizeof (ret))
  1304.         {
  1305.             ret[j++] = ch;
  1306.         }
  1307.         else
  1308.         {
  1309.             j++;
  1310.         }
  1311.     }
  1312.     ret[sizeof (ret) - 1] = '\0';
  1313.     return ret;
  1314. }
  1315. stock gPM_MergeMessages( playerid ) {
  1316.     g_supMessageSingleInput[ 0 ] = '\0';
  1317.     g_supMessageInput[ 0 ] = '\0';
  1318.     for(new i = 0 ; i < g_iUserMessageInput{ playerid } ; i++) {
  1319.         strunpack( g_supMessageSingleInput , g_sUserMessageInput[ playerid ][ i ] );
  1320.         strcat( g_supMessageInput , g_supMessageSingleInput );
  1321.     }
  1322.     return g_supMessageInput;
  1323. }
  1324.  
  1325. stock gPM_ClearMessageReceivers( playerid ) {
  1326.     if( g_iUsersMessageReceivers{ playerid } ) {
  1327.         for(new i = 0 ; i < MAX_MESSAGE_RECEIVERS ; i++ ) {
  1328.             g_aiUserMessageReceivers[ playerid ][ i ] = INVALID_USERID;
  1329.         }
  1330.         g_iUsersMessageReceivers{ playerid } = 0;
  1331.     }
  1332.     return 1;
  1333. }
  1334.  
  1335. stock gPM_AddMessageReceiver( playerid , receiverid ) {
  1336.     if( g_iUsersMessageReceivers{ playerid } >= MAX_MESSAGE_RECEIVERS ) {
  1337.         return 0;
  1338.     }
  1339.     for( new i = 0 ; i < g_iUsersMessageReceivers{ playerid } ; i++) {
  1340.         if( g_aiUserMessageReceivers[ playerid ][ i ] == receiverid ) {
  1341.             return 2;
  1342.         }
  1343.     }
  1344.     g_aiUserMessageReceivers[ playerid ][ g_iUsersMessageReceivers{ playerid } ] = receiverid;
  1345.     g_iUsersMessageReceivers{ playerid }++;
  1346.     return 1;
  1347. }
  1348.  
  1349. stock gPM_RemoveMessageReceiver( playerid , receiverid ) {
  1350.     for( new i = 0 ; i < g_iUsersMessageReceivers{ playerid } ; i++) {
  1351.         if( g_aiUserMessageReceivers[ playerid ][ i ] == receiverid ) {
  1352.             for(new j = i ; j < g_iUsersMessageReceivers{ playerid } - 1; j++) {
  1353.                 g_aiUserMessageReceivers[ playerid ][ j ] = g_aiUserMessageReceivers[ playerid ][ j + 1 ];
  1354.             }
  1355.             break;
  1356.         }
  1357.     }
  1358.     g_iUsersMessageReceivers{ playerid }--;
  1359.     return 1;
  1360. }
  1361.  
  1362. stock gPM_ListmessageReceivers( playerid , bool:bForList = false) {
  1363.     new
  1364.         sMessageReceivers[ MAX_MESSAGE_RECEIVERS * ( MAX_PLAYER_NAME + 2 ) ],
  1365.         sUsername[ MAX_PLAYER_NAME ],
  1366.         iNumRows,
  1367.         sUserIDs[ MAX_MESSAGE_RECEIVERS * ( 1 + 5 ) ];
  1368.     sUserIDs[ 0 ] = '\0';
  1369.     sMessageReceivers[ 0 ] = '\0';
  1370.     for( new i ; i < g_iUsersMessageReceivers{ playerid } ; i++) {
  1371.         if(!i) {
  1372.             format( sUserIDs , sizeof( sUserIDs ),"%d", g_aiUserMessageReceivers[ playerid ][ i ] );
  1373.         }
  1374.         else {
  1375.             format( sUserIDs , sizeof( sUserIDs ),"%s,%d", sUserIDs , g_aiUserMessageReceivers[ playerid ][ i ] );
  1376.         }
  1377.     }
  1378.     format( g_sQuery , sizeof( g_sQuery ) , "SELECT `Name` FROM `USER` WHERE `UserID` IN(%s)" , sUserIDs );
  1379.     g_dbrQuery = db_query( g_dbPM , g_sQuery );
  1380.     iNumRows = db_num_rows( g_dbrQuery );
  1381.     if( !bForList ) {
  1382.         for(new i = 0 ; i < iNumRows ; i++) {
  1383.             db_get_field( g_dbrQuery , 0 , sUsername , sizeof( sUsername ) );
  1384.             strcat( sMessageReceivers , sUsername , sizeof( sMessageReceivers ) );
  1385.             strcat( sMessageReceivers , "\n" , sizeof( sMessageReceivers ) );
  1386.             db_next_row( g_dbrQuery );
  1387.         }
  1388.     }
  1389.     else {
  1390.         for(new i = 0 ; i < iNumRows ; i++) {
  1391.             strcat( sMessageReceivers , "  " , sizeof( sMessageReceivers ) );
  1392.             db_get_field( g_dbrQuery , 0 , sUsername , sizeof( sUsername ) );
  1393.             strcat( sMessageReceivers , sUsername , sizeof( sMessageReceivers ) );
  1394.             if( i == ( iNumRows - 1 ) ) {
  1395.                 strcat( sMessageReceivers , "\n" , sizeof( sMessageReceivers ) );
  1396.             }
  1397.             else {
  1398.                 strcat( sMessageReceivers , ",\n" , sizeof( sMessageReceivers ) );
  1399.             }
  1400.             db_next_row( g_dbrQuery );
  1401.         }
  1402.     }
  1403.     db_free_result( g_dbrQuery );
  1404.     return sMessageReceivers;
  1405. }
Advertisement
Add Comment
Please, Sign In to add comment