Advertisement
Guest User

gPM 1.3 by Goldkiller

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