Advertisement
Guest User

Goldkiller - gPM

a guest
Dec 18th, 2011
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 22.45 KB | None | 0 0
  1. #include <a_samp>
  2. #include <zcmd>
  3.  
  4. #define DATABASE "gPM.s3db"
  5.  
  6. #define MAX_QUERY_RESULTS 20
  7. #define MAX_EINGANG_MESSAGES MAX_QUERY_RESULTS
  8.  
  9. #define INVALID_USERID -1
  10.  
  11. #define MARK_NEW_MESSAGES "*Neu"
  12. #define MARK_UNREAD_MESSAGES "*Ungelesen"
  13.  
  14. #define COLOR_WHITE 0xFFFFFFFF
  15. #define COL_WHITE "{FFFFFF}"
  16. #define COL_GREY "{88ABAB}"
  17. #define COL_BLUE "{0000FF}"
  18. #define COL_GREEN "{00FF00}"
  19. #define COL_RED "{FF0000}"
  20. #define COL_ORANGE "{FF9900}"
  21.  
  22. #define DATE_FORMAT "%d.%m.%Y"
  23.  
  24. static
  25.     g_iUserID[ MAX_PLAYERS ],
  26.     g_sUserInput[ MAX_PLAYERS ][ MAX_PLAYER_NAME ],
  27.     g_iUserInput[ MAX_PLAYERS ],
  28.     g_iMessageID[ MAX_PLAYERS ][ MAX_EINGANG_MESSAGES ],
  29.    
  30.     g_sQuery[ 256 + 128],
  31.     DBResult:g_dbrQuery,
  32.     DB:g_dbPM;
  33.    
  34.    
  35. enum ( += 1 ) {
  36.     MessageStatus_Unread = 0,
  37.     MessageStatus_Read,
  38.     MessageStatus_Delete
  39. }
  40.  
  41. enum ( += 1 ) {
  42.     DIALOG_PM_MENU = 12425,
  43.     DIALOG_PM_EINGANG,
  44.     DIALOG_PM_EINGANG_EMPTY,
  45.     DIALOG_PM_EINGANG_NACHRICHT,
  46.     DIALOG_PM_AUSGANG,
  47.     DIALOG_PM_AUSGANG_EMPTY,
  48.     DIALOG_PM_AUSGANG_NACHRICHT,
  49.     DIALOG_PM_SCHREIBEN_USER,
  50.     DIALOG_PM_SCHREIBEN_TEXT,
  51.     DIALOG_PM_SCHREIBEN_VERSENDET,
  52.     DIALOG_PM_USER_UEBERSICHT,
  53.     DIALOG_PM_USER_UEBERSICHT_QUERY,
  54. }
  55.  
  56. stock gPM_Init() {
  57.     g_dbPM = db_open( DATABASE );
  58.     for(new i = 0 ; i < MAX_PLAYERS ; i++) {
  59.         if( IsPlayerConnected( i ) ) {
  60.             gPM_OnPlayerConnect( i );
  61.         }
  62.     }
  63.     // gPM_AddUsers("gPM.index");
  64.     printf("gPM <> Users: %d", gPM_GetUsers() );
  65.     printf("gPM <> Nachrichten: %d", gPM_GetNachrichten() );
  66.     return 1;
  67. }
  68.  
  69. stock gPM_Close() {
  70.     db_close( g_dbPM );
  71.     return 1;
  72. }
  73.  
  74. stock gPM_AddUsername( username[] ) {
  75.     format( g_sQuery , sizeof( g_sQuery ) , "INSERT INTO `USER` ( `Name`) VALUES ('%s')" , db_escape( username ) );
  76.     g_dbrQuery = db_query( g_dbPM , g_sQuery );
  77.     printf("gPM <> Added User '%s'" , username );
  78.     db_free_result( g_dbrQuery );
  79.     return 1;
  80. }
  81.  
  82. stock gPM_OnPlayerConnect(playerid) {
  83.     new
  84.         iNewMessages,
  85.         sName[ MAX_PLAYER_NAME ];
  86.     GetPlayerName( playerid , sName , sizeof( sName ) );
  87.     g_iUserID[ playerid ] = gPM_GetUserID( sName );
  88.     if( g_iUserID[playerid] == INVALID_USERID ) {
  89.         new
  90.             sString[ 196 ];
  91.         gPM_AddUsername( sName );
  92.         g_iUserID[ playerid ] = gPM_GetUserID( sName );
  93.         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 ) );
  94.         gPM_SendMessage( 1 , g_iUserID[ playerid ] , sString );
  95.     }
  96.     iNewMessages = gPM_GetNewMessages( g_iUserID[ playerid ] );
  97.     if( iNewMessages ) {
  98.         new
  99.             sString[ 64 ];
  100.         format( sString , sizeof( sString ) , "* gPM: Du hast %d ungelese Nachrichten im Posteingang! ( /GPM )" , iNewMessages );
  101.         SendClientMessage( playerid , COLOR_WHITE , sString );
  102.     }
  103.     return 1;
  104. }
  105.  
  106. stock gPM_OnPlayerDisconnect(playerid, reason ) {
  107.     #pragma unused reason
  108.     g_iUserID[playerid] = INVALID_USERID;
  109.     return 1;
  110. }
  111. stock gPM_GetNewMessages( userid) {
  112.     new
  113.         iRows;
  114.     format( g_sQuery , sizeof( g_sQuery ) , "SELECT * FROM `Nachricht` WHERE `EmpfaengerID` = '%d' AND `Status` = '%d'" , userid , MessageStatus_Unread );
  115.     g_dbrQuery = db_query( g_dbPM , g_sQuery );
  116.     iRows = db_num_rows( g_dbrQuery );
  117.     db_free_result( g_dbrQuery );
  118.     return iRows;
  119. }
  120.  
  121. stock gPM_GetUserID( const name[] ) {
  122.     new
  123.         sUserID[8],
  124.         iUserID = INVALID_USERID;
  125.     format( g_sQuery , sizeof( g_sQuery ) , "SELECT `UserID` FROM `USER` WHERE `Name` = '%s'" , name );
  126.     g_dbrQuery = db_query( g_dbPM , g_sQuery );
  127.     if( db_num_rows( g_dbrQuery ) > 0) {
  128.         db_get_field( g_dbrQuery , 0 , sUserID , sizeof( sUserID ) );
  129.         iUserID = strval( sUserID );
  130.     }
  131.     db_free_result( g_dbrQuery );
  132.     return iUserID;
  133. }
  134.  
  135. stock gPM_SendMessage( senderid , receiverid , const message[] ) {
  136.     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 , MessageStatus_Unread , message );
  137.     g_dbrQuery = db_query( g_dbPM , g_sQuery );
  138.     db_free_result( g_dbrQuery );
  139.     for(new i = 0 ; i < MAX_PLAYERS ; i++) {
  140.         if( IsPlayerConnected( i ) ) {
  141.             if( g_iUserID[ i ] == receiverid ) {
  142.                 gPM_OnPlayerReceiveMessage( i , senderid , message );
  143.                 break;
  144.             }
  145.         }
  146.     }
  147.     return 1;
  148. }
  149.  
  150. stock gPM_OnPlayerReceiveMessage( playerid , send_userid , const message[] ) {
  151.     #pragma unused message
  152.     new
  153.         sString[ 128 ];
  154.     format( sString , sizeof( sString ) , "* gPM: Du hast eine Nachricht von %s empfangen" , gPM_GetUsername( send_userid ) );
  155.     SendClientMessage( playerid , COLOR_WHITE , sString );
  156.     return 1;
  157. }
  158.  
  159. stock gPM_StripMessageLines( message[196] ) {
  160.     #define SPLIT_LEN 50
  161.     new
  162.         bool:_bBasic = true,
  163.         _iParts,
  164.         _iCount,
  165.         _iTempLen = 0,
  166.         _iPos = 0,
  167.         _iTempPos = 0,
  168.         _iLen;
  169.     _iLen = strlen( message );
  170.     while( ( _iPos = strfind( message , " " , false  ,_iPos + 1) )  != -1 )  {
  171.         _iCount++;
  172.         _iTempLen += ( _iPos - _iTempPos );
  173.         _iTempPos = _iPos;
  174.         if( _iTempLen >= SPLIT_LEN ) {
  175.             strins( message , "\n" , _iPos + 1);
  176.             _iCount = 0;
  177.             _iPos += 2;
  178.             _bBasic = false;
  179.             _iTempLen = 0;
  180.         }
  181.     }
  182.     if( _bBasic ) {
  183.         _iParts = ( _iLen / SPLIT_LEN );
  184.         for( new i = 0 ; i < _iParts ; i++ ) {
  185.             strins(message,"\n", ( ( i + 1 ) * SPLIT_LEN ) );
  186.         }
  187.     }
  188.     #undef SPLIT_LEN
  189.     return message;
  190. }
  191. stock gPM_ShowDialog(playerid,dialogid, extra = -1 ) {
  192.     if( dialogid == DIALOG_PM_MENU ) {
  193.         if( gPM_GetNewMessages( g_iUserID[ playerid ] ) ) {
  194.             ShowPlayerDialog( playerid , DIALOG_PM_MENU , DIALOG_STYLE_LIST , ""#COL_ORANGE"gPM  Menu" , ""COL_WHITE"Posteingang "#COL_GREEN""#MARK_NEW_MESSAGES""#COL_WHITE"\nPostausgang\nNachricht Senden\nUser Übersicht" , "Weiter" , "Schließen" );
  195.         }
  196.         else {
  197.             ShowPlayerDialog( playerid , DIALOG_PM_MENU , DIALOG_STYLE_LIST , ""#COL_ORANGE"gPM  Menu" , ""COL_WHITE"Posteingang\nPostausgang\nNachricht Versenden\nUser Übersicht" , "Weiter" , "Schließen" );
  198.         }
  199.     }
  200.     else if( dialogid == DIALOG_PM_EINGANG ) {
  201.         new
  202.             sNachrichtID[ 8 ],
  203.             iNachrichtID,
  204.             sName[ MAX_PLAYER_NAME ],
  205.             sStatus[ 2 ],
  206.             iStatus,
  207.             sText[ 196 ],
  208.             sString[ 512 ],
  209.             iRows;
  210.         format( g_sQuery , sizeof( g_sQuery ) , "SELECT `NachrichtID`,`Name`,`Status`,`Text` FROM `NACHRICHT`,`USER` WHERE `EmpfaengerID` = '%d' AND `SenderID` = `UserID` ORDER BY `NachrichtID` DESC LIMIT %d;" , g_iUserID[ playerid ] , MAX_EINGANG_MESSAGES );
  211.         g_dbrQuery = db_query( g_dbPM , g_sQuery );
  212.         iRows = db_num_rows( g_dbrQuery );
  213.         if( iRows ) {
  214.             sString[0] = '\0';
  215.             for(new i = 0 ; i < iRows ; i++) {
  216.                 db_get_field( g_dbrQuery , 0 , sNachrichtID , sizeof( sNachrichtID ) );
  217.                 db_get_field( g_dbrQuery , 1 , sName , sizeof(sName ) );
  218.                 db_get_field( g_dbrQuery , 2 , sStatus , sizeof( sStatus ) );
  219.                 db_get_field( g_dbrQuery , 3 , sText , sizeof( sText ) );
  220.                 iNachrichtID = strval( sNachrichtID );
  221.                 iStatus = strval( sStatus );
  222.                 if( iStatus == MessageStatus_Unread ) {
  223.                     format( sString , sizeof( sString ) , "%s%.20s - %.16s... "#COL_GREEN""#MARK_NEW_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  224.                 }
  225.                 else if( iStatus == MessageStatus_Read ) {
  226.                     format( sString , sizeof( sString ) ,"%s%.20s - %.16s...\n" , sString , sName , sText );
  227.                 }
  228.                 g_iMessageID[ playerid ][ i ] = iNachrichtID;
  229.                 db_next_row( g_dbrQuery );
  230.             }
  231.             ShowPlayerDialog( playerid , DIALOG_PM_EINGANG , DIALOG_STYLE_LIST , ""#COL_ORANGE"gPM  Posteingang" , sString , "Lesen" , "Zurück" );
  232.         }
  233.         else {
  234.             ShowPlayerDialog( playerid , DIALOG_PM_EINGANG_EMPTY , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Posteingang" , ""#COL_WHITE"Du hast keine Nachrichten im Eingang!" , "Zurück" , "" );
  235.         }
  236.         db_free_result( g_dbrQuery );
  237.     }
  238.     else if( dialogid == DIALOG_PM_AUSGANG ) {
  239.         new
  240.             sNachrichtID[ 8 ],
  241.             iNachrichtID,
  242.             sName[MAX_PLAYER_NAME],
  243.             sStatus[ 2 ],
  244.             iStatus,
  245.             sText[ 196 ],
  246.             sString[ 512 ],
  247.             iRows;
  248.         format(g_sQuery,sizeof(g_sQuery),"SELECT `NachrichtID`,`Name`,`Status`,`Text` FROM `NACHRICHT`,`USER` WHERE `SenderID` = '%d' AND `EmpfaengerID` = `UserID` ORDER BY `NachrichtID` DESC LIMIT %d;" , g_iUserID[ playerid ] , MAX_EINGANG_MESSAGES );
  249.         g_dbrQuery = db_query( g_dbPM , g_sQuery );
  250.         iRows = db_num_rows( g_dbrQuery );
  251.         if( iRows ) {
  252.             sString[0] = '\0';
  253.             for(new i = 0 ; i < iRows ; i++) {
  254.                 db_get_field( g_dbrQuery , 0 , sNachrichtID , sizeof( sNachrichtID ) );
  255.                 db_get_field( g_dbrQuery , 1 , sName , sizeof( sName ) );
  256.                 db_get_field( g_dbrQuery , 2 , sStatus , sizeof( sStatus ) );
  257.                 db_get_field( g_dbrQuery , 3 , sText , sizeof( sText ) );
  258.                 iNachrichtID = strval( sNachrichtID );
  259.                 iStatus = strval( sStatus );
  260.                 if( iStatus == MessageStatus_Unread ) {
  261.                     format( sString , sizeof( sString ) , "%s%.20s - %.16s... "#COL_RED""#MARK_UNREAD_MESSAGES""#COL_WHITE"\n" , sString , sName , sText );
  262.                 }
  263.                 else if( iStatus == MessageStatus_Read ) {
  264.                     format( sString , sizeof( sString ) , "%s%.20s - %.16s...\n" , sString , sName , sText );
  265.                 }
  266.                 g_iMessageID[ playerid ][ i ] = iNachrichtID;
  267.                 db_next_row( g_dbrQuery );
  268.             }
  269.             ShowPlayerDialog( playerid , DIALOG_PM_AUSGANG , DIALOG_STYLE_LIST , ""#COL_ORANGE"gPM  Postausgang" , sString , "Lesen" , "Zurück" );
  270.         }
  271.         else {
  272.             ShowPlayerDialog( playerid , DIALOG_PM_AUSGANG_EMPTY , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Postausgang" , ""#COL_WHITE"Du hast keine Nachrichten im Ausgang!" , "Zurück" , "" );
  273.         }
  274.         db_free_result( g_dbrQuery );
  275.     }
  276.     else if( dialogid == DIALOG_PM_EINGANG_NACHRICHT ) {
  277.         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 );
  278.         g_dbrQuery = db_query( g_dbPM , g_sQuery );
  279.         if( db_num_rows( g_dbrQuery ) ) {
  280.             new
  281.                 sStatus[ 2 ],
  282.                 sTag[ 12 ],
  283.                 sTitel[ 32+16+8 ],
  284.                 sName[ MAX_PLAYER_NAME ],
  285.                 sUhrzeit[ 12 ],
  286.                 iStatus,
  287.                 sNachricht[ 196 ],
  288.                 sString[ 512 ];
  289.             db_get_field( g_dbrQuery , 0 , sName , sizeof( sName ) );
  290.             db_get_field( g_dbrQuery , 1 , sStatus , sizeof( sStatus ) );
  291.             db_get_field( g_dbrQuery , 2 , sTag , sizeof( sTag ) );
  292.             db_get_field( g_dbrQuery , 3 , sUhrzeit , sizeof( sUhrzeit ) );
  293.             db_get_field( g_dbrQuery , 4 , sNachricht , sizeof( sNachricht ) );
  294.             iStatus = strval( sStatus );
  295.             db_free_result( g_dbrQuery );
  296.             if( iStatus == MessageStatus_Unread ) {
  297.                 format(g_sQuery,sizeof(g_sQuery),"UPDATE `Nachricht` SET `Status` = '%d' WHERE NachrichtID = '%d'",MessageStatus_Read,extra);
  298.                 g_dbrQuery = db_query( g_dbPM , g_sQuery );
  299.                 db_free_result( g_dbrQuery );
  300.             }
  301.             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 ) );
  302.             format( sTitel , sizeof( sTitel ) , ""#COL_ORANGE"gPM  Posteingang - Nachricht (%d)" , extra );
  303.             ShowPlayerDialog( playerid , DIALOG_PM_EINGANG_NACHRICHT , DIALOG_STYLE_MSGBOX , sTitel , sString , "Zurück" , "" );
  304.         }
  305.     }
  306.     else if( dialogid == DIALOG_PM_AUSGANG_NACHRICHT ) {
  307.         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 );
  308.         g_dbrQuery = db_query( g_dbPM , g_sQuery );
  309.         if( db_num_rows( g_dbrQuery ) ) {
  310.             new
  311.                 sStatus[ 2 ],
  312.                 sTag[ 12 ],
  313.                 sName[ MAX_PLAYER_NAME ],
  314.                 sUhrzeit[ 12 ],
  315.                 iStatus,
  316.                 sNachricht[ 196 ],
  317.                 sTitel[ 64 ],
  318.                 sString[ 384 ];
  319.             db_get_field( g_dbrQuery , 0 , sName , sizeof( sName ) );
  320.             db_get_field( g_dbrQuery , 1 , sStatus , sizeof( sStatus ) );
  321.             db_get_field( g_dbrQuery , 2 , sTag , sizeof( sTag ) );
  322.             db_get_field( g_dbrQuery , 3 , sUhrzeit , sizeof( sUhrzeit ) );
  323.             db_get_field( g_dbrQuery , 4 , sNachricht , sizeof( sNachricht ) );
  324.             iStatus = strval( sStatus );
  325.             db_free_result( g_dbrQuery );
  326.             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 ) );
  327.             if( iStatus == MessageStatus_Unread ) {
  328.             format( sString , sizeof( sString ) , "%s"#COL_GREY"Status: "#COL_RED"Ungelesen" , sString );
  329.             }
  330.             else {
  331.                 format( sString , sizeof( sString ) , "%s"#COL_GREY"Status: "#COL_GREEN"Gelesen" , sString );
  332.             }
  333.             format( sTitel , sizeof( sTitel ) , ""#COL_ORANGE"gPM  Postausgang - Nachricht (%d)" , extra );
  334.             ShowPlayerDialog( playerid , DIALOG_PM_AUSGANG_NACHRICHT , DIALOG_STYLE_MSGBOX , sTitel , sString , "Zurück" , "" );
  335.         }
  336.     }
  337.     else if( dialogid == DIALOG_PM_SCHREIBEN_USER ) {
  338.         if( extra == -1 ) {
  339.             ShowPlayerDialog( playerid , DIALOG_PM_SCHREIBEN_USER , 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" );
  340.         }
  341.         else if(extra == 0 ) {
  342.             new
  343.                 sString[ 256 ];
  344.             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_sUserInput[ playerid ] );
  345.             ShowPlayerDialog(playerid,DIALOG_PM_SCHREIBEN_USER,DIALOG_STYLE_INPUT,""#COL_ORANGE"gPM  Nachricht Versenden - User",sString,"Weiter","Zurück");
  346.         }
  347.         else if( extra == 1 ) {
  348.             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" );
  349.         }
  350.     }
  351.     else if( dialogid == DIALOG_PM_SCHREIBEN_TEXT ) {
  352.         new
  353.             sString[256];
  354.         format(sString,sizeof(sString),""#COL_WHITE"Gib unten den das Feld die Nachricht ein,\ndie du an den User '"#COL_GREY"%s"#COL_WHITE"' versenden möchtest.\nDurch die Bestätigung wird die Nachricht direkt versendet.",g_sUserInput[playerid]);
  355.         ShowPlayerDialog(playerid,DIALOG_PM_SCHREIBEN_TEXT,DIALOG_STYLE_INPUT,""#COL_ORANGE"gPM  Nachricht Versenden - Nachricht",sString,"Versenden","Zurück");
  356.     }
  357.     else if( dialogid == DIALOG_PM_SCHREIBEN_VERSENDET ) {
  358.         new
  359.             sString[ 256 ];
  360.         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_sUserInput[ playerid ] );
  361.         ShowPlayerDialog( playerid , DIALOG_PM_SCHREIBEN_VERSENDET , DIALOG_STYLE_MSGBOX , ""#COL_ORANGE"gPM  Nachricht Versenden - Versendet" , sString , "Hauptmenu" , "" );
  362.     }
  363.     else if( dialogid == DIALOG_PM_USER_UEBERSICHT ) {
  364.         if( extra == -1 ) {
  365.             ShowPlayerDialog( playerid , DIALOG_PM_USER_UEBERSICHT , 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" );
  366.         }
  367.         else if( extra == 0 ) {
  368.             new
  369.                 sString[ 256 ];
  370.             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_sUserInput[ playerid ] );
  371.             ShowPlayerDialog( playerid , DIALOG_PM_USER_UEBERSICHT , DIALOG_STYLE_INPUT , ""#COL_ORANGE"gPM  User Übersicht" , sString , "Suchen" , "Zurück" );
  372.         }
  373.         else if( extra == 1 ) {
  374.             ShowPlayerDialog( playerid , DIALOG_PM_USER_UEBERSICHT , 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" );
  375.         }
  376.         else if( extra == 2 ) {
  377.             ShowPlayerDialog( playerid , DIALOG_PM_USER_UEBERSICHT , 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" );
  378.         }
  379.     }
  380.     else if( dialogid == DIALOG_PM_USER_UEBERSICHT_QUERY ) {
  381.         new
  382.             sString[ 256 ],
  383.             sTitel[ 64 ],
  384.             sName[ MAX_PLAYER_NAME ],
  385.             iRows;
  386.         g_dbrQuery = DBResult:extra;
  387.         iRows = db_num_rows( g_dbrQuery );
  388.         for(new i = 0 ; i < iRows ; i++) {
  389.             db_get_field( g_dbrQuery , 1 , sName , sizeof( sName ) );
  390.             format( sString  ,sizeof(sString) , "%s%s\n" , sString , sName );
  391.             db_next_row( g_dbrQuery );
  392.         }
  393.         format( sTitel , sizeof( sTitel ) , ""#COL_ORANGE"gPM Nachricht  User Übersicht - Query (%d)" , iRows );
  394.         ShowPlayerDialog( playerid , DIALOG_PM_USER_UEBERSICHT_QUERY , DIALOG_STYLE_LIST , sTitel , sString , "Zurück" , "" );
  395.         db_free_result( g_dbrQuery );
  396.     }
  397.     return 1;
  398. }
  399. stock gPM_OnDialogResponse( playerid, dialogid , response , listitem , inputtext[] ) {
  400.     if( dialogid == DIALOG_PM_MENU ) {
  401.         if(response) {
  402.             switch(listitem) {
  403.                 case 0: gPM_ShowDialog( playerid , DIALOG_PM_EINGANG );
  404.                 case 1: gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG );
  405.                 case 2: gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_USER );
  406.                 case 3: gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT );
  407.             }
  408.         }
  409.     }
  410.     else if( dialogid == DIALOG_PM_EINGANG ) {
  411.         if( response ) {
  412.             return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG_NACHRICHT , g_iMessageID[playerid][listitem] );
  413.         }
  414.         else {
  415.             return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  416.         }
  417.     }
  418.     else if( dialogid == DIALOG_PM_EINGANG_NACHRICHT ) {
  419.         return gPM_ShowDialog( playerid , DIALOG_PM_EINGANG );
  420.     }
  421.     else if( dialogid == DIALOG_PM_AUSGANG ) {
  422.         if( response ) {
  423.             return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG_NACHRICHT , g_iMessageID[ playerid ][ listitem ] );
  424.         }
  425.         else {
  426.             return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  427.         }
  428.     }
  429.     else if( dialogid == DIALOG_PM_AUSGANG_NACHRICHT ) {
  430.         return gPM_ShowDialog( playerid , DIALOG_PM_AUSGANG );
  431.     }
  432.     else if( dialogid == DIALOG_PM_SCHREIBEN_USER ) {
  433.         if(response) {
  434.             new
  435.                 iUserID;
  436.             g_sUserInput[ playerid ][ 0 ] = '\0';
  437.             strcat( g_sUserInput[ playerid ] , db_escape( inputtext ) , MAX_PLAYER_NAME );
  438.             iUserID = gPM_GetUserID( g_sUserInput[ playerid ] );
  439.             if( iUserID == INVALID_USERID ) {
  440.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_USER , 0 );
  441.             }
  442.             if( iUserID == g_iUserID[ playerid ] ) {
  443.                 return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_USER , 1 );
  444.             }
  445.             g_iUserInput[ playerid ] = iUserID;
  446.             return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_TEXT );
  447.         }
  448.         else {
  449.             return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  450.         }
  451.     }
  452.     else if( dialogid == DIALOG_PM_SCHREIBEN_TEXT ) {
  453.         if(response) {
  454.             gPM_SendMessage( g_iUserID[ playerid ] , g_iUserInput[ playerid ] , db_escape( inputtext ) );
  455.             return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_VERSENDET );
  456.         }
  457.         else {
  458.             return gPM_ShowDialog( playerid , DIALOG_PM_SCHREIBEN_USER );
  459.         }
  460.     }
  461.     else if( dialogid == DIALOG_PM_SCHREIBEN_VERSENDET ) {
  462.         return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  463.     }
  464.     else if( dialogid == DIALOG_PM_USER_UEBERSICHT ) {
  465.         if(response) {
  466.             new
  467.                 iRows;
  468.             if( strlen(inputtext) < 2 ) {
  469.                 return gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT , 2 );
  470.             }
  471.             g_sUserInput[ playerid ][ 0 ] = '\0';
  472.             strcat( g_sUserInput[ playerid ] , inputtext , MAX_PLAYER_NAME );
  473.             gPM_FilterUsernames( g_sUserInput[ playerid ] , g_dbrQuery );
  474.             iRows = db_num_rows( g_dbrQuery );
  475.             if( iRows == 0 ) {
  476.                 db_free_result( g_dbrQuery );
  477.                 return gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT , 0 );
  478.             }
  479.             if( iRows > MAX_QUERY_RESULTS ) {
  480.                 db_free_result( g_dbrQuery );
  481.                 return gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT , 1 );
  482.             }
  483.             return gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT_QUERY , _:g_dbrQuery );
  484.         }
  485.         else {
  486.             return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  487.         }
  488.     }
  489.     else if( dialogid == DIALOG_PM_USER_UEBERSICHT_QUERY ) {
  490.         return gPM_ShowDialog( playerid , DIALOG_PM_USER_UEBERSICHT );
  491.     }
  492.     else if ( dialogid == DIALOG_PM_EINGANG_EMPTY ) {
  493.         return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  494.     }
  495.     else if ( dialogid == DIALOG_PM_AUSGANG_EMPTY ) {
  496.         return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  497.     }
  498.     return 0;
  499. }
  500. COMMAND:gpm(playerid,params[]) {
  501.     return gPM_ShowDialog( playerid , DIALOG_PM_MENU );
  502. }
  503.  
  504. stock gPM_AddUsers(const file[]) {
  505.     new
  506.         _sTmp[ 54 ],
  507.         File:fFile;
  508.     fFile = fopen( file , io_read );
  509.     if( fFile ) {
  510.         while( fread( fFile , _sTmp , sizeof( _sTmp ) ) ) {
  511.             StripNewLine( _sTmp );
  512.             if( gPM_GetUserID( _sTmp ) == INVALID_USERID ) {
  513.                 gPM_AddUsername( _sTmp );
  514.             }
  515.         }
  516.         fclose( fFile );
  517.         return 1;
  518.     }
  519.     return 0;
  520. }
  521.  
  522. stock StripNewLine(str[]) //ysi_misc.own
  523. {
  524.     new
  525.         l = strlen(str);
  526.     while (l-- && str[l] <= ' ') str[l] = '\0';
  527. }
  528.  
  529. stock gPM_FilterUsernames( const username_filter[] , & DBResult:dbr ) {
  530.     format( g_sQuery , sizeof( g_sQuery ) , "SELECT * FROM `USER` WHERE `Name` LIKE '%%%s%%' ORDER BY `Name` ASC" , username_filter );
  531.     dbr = db_query( g_dbPM , g_sQuery );
  532.     return 1;
  533. }
  534.  
  535. stock gPM_GetUsers() {
  536.     new
  537.         sUsers[8],
  538.         iUsers;
  539.     g_dbrQuery = db_query( g_dbPM , "SELECT COUNT(*) FROM `User`" );
  540.     db_get_field( g_dbrQuery , 0 , sUsers , sizeof( sUsers ) );
  541.     iUsers = strval( sUsers );
  542.     db_free_result( g_dbrQuery );
  543.     return iUsers;
  544. }
  545. stock gPM_GetNachrichten() {
  546.     new
  547.         sNachrichten[8],
  548.         iNachrichten;
  549.     g_dbrQuery = db_query( g_dbPM , "SELECT COUNT(*) FROM `Nachricht`" );
  550.     db_get_field( g_dbrQuery , 0 , sNachrichten , sizeof( sNachrichten ) );
  551.     iNachrichten = strval( sNachrichten );
  552.     db_free_result( g_dbrQuery );
  553.     return iNachrichten;
  554. }
  555.  
  556. stock gPM_GetUsername( userid ) {
  557.     new
  558.         sUsername[ MAX_PLAYER_NAME ] = "INVALID_USERNAME";
  559.     format( g_sQuery , sizeof( g_sQuery ) , "SELECT `Name` FROM `User` WHERE `UserID` = '%d'" , userid );
  560.     g_dbrQuery = db_query( g_dbPM , g_sQuery );
  561.     if( db_num_rows( g_dbrQuery ) ) {
  562.         db_get_field( g_dbrQuery , 0 , sUsername , sizeof( sUsername ) );
  563.     }
  564.     db_free_result( g_dbrQuery );
  565.     return sUsername;
  566. }
  567.  
  568. #define MAX_INI_ENTRY_TEXT 196
  569. stock db_escape(text[]) // Y_LESS
  570. {
  571.     new
  572.         ret[MAX_INI_ENTRY_TEXT * 2],
  573.         ch,
  574.         i,
  575.         j;
  576.     while ((ch = text[i++]) && j < sizeof (ret))
  577.     {
  578.         if (ch == '\'')
  579.         {
  580.             if (j < sizeof (ret) - 2)
  581.             {
  582.                 ret[j++] = '\'';
  583.                 ret[j++] = '\'';
  584.             }
  585.         }
  586.         else if (j < sizeof (ret))
  587.         {
  588.             ret[j++] = ch;
  589.         }
  590.         else
  591.         {
  592.             j++;
  593.         }
  594.     }
  595.     ret[sizeof (ret) - 1] = '\0';
  596.     return ret;
  597. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement