Advertisement
Guest User

Untitled

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