Advertisement
Guest User

gPM - 1.3.3

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