Advertisement
Guest User

gPM - 1.3.1

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