Guest User

Freundschaftssystem (c) by Kaliber

a guest
Dec 9th, 2012
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.39 KB | None | 0 0
  1. /* SaMp Filterscript Freundschaftssystem
  2.  *
  3.  * (c) by Kaliber, 2012
  4.  *
  5.  * Grundidee von PinguinLP
  6.  */
  7. #include <a_samp>
  8. #pragma tabsize 0 //Nur hier bei pastebin
  9.  
  10. #if !defined MAX_FREUNDE
  11.     #define MAX_FREUNDE 200
  12. #endif
  13.  
  14. #pragma dynamic 413016
  15.  
  16. #define rot 0xFF0000FF
  17. #define grun 0xFF0000
  18. #define gelb 0xFFFF00FF
  19. #define blau 0x2E9AFEFF
  20.  
  21. #define f_con 700
  22. #define f_1 (f_con + 1)
  23. #define f_2 (f_con + 2)
  24.  
  25. new Player_Freund[MAX_PLAYERS][MAX_FREUNDE], evtl[MAX_PLAYERS], var_f[MAX_PLAYERS], List_Freunde[MAX_PLAYERS][256];
  26.  
  27. public OnFilterScriptInit()
  28. {
  29.     for(new v; v<MAX_PLAYERS; v++)
  30.     {
  31.         evtl[v] = -1;
  32.         for(new i; i<MAX_FREUNDE; i++)
  33.         {
  34.             Player_Freund[v][i] = -1;
  35.         }
  36.     }
  37.     return 1;
  38. }
  39. Stack(playerid, pID)
  40. {
  41.     new string[32];
  42.     format(string, sizeof string,"%s|",GetName(pID));
  43.     strins(List_Freunde[playerid], string, 0, 512);
  44. }
  45. stock Liste_Laden(playerid)
  46. {
  47.     new Pfad[64];
  48.     format(Pfad, 64, "Freunde_von_%s.txt", GetName(playerid));
  49.     if(!fexist(Pfad)) return 1;
  50.     new File:f = fopen(Pfad, io_read), string[512];
  51.     fread(f, string);
  52.     fclose(f);
  53.     new tmp[MAX_FREUNDE][512];
  54.     split(string, tmp, '|');
  55.     for(new i; i<MAX_FREUNDE; i++) Player_Freund[playerid][i] = GetId(tmp[i]);
  56.     return 1;
  57. }
  58. GetId(name[])
  59. {
  60.     if(strlen(name) < 2) return -1;
  61.     new id;
  62.     for(; id<MAX_PLAYERS; id++)
  63.     {
  64.         if(!IsPlayerConnected(id)) continue;
  65.         if(!strcmp(GetName(id), name, false)) return id;
  66.     }
  67.     return -1;
  68. }
  69. public OnPlayerConnect(playerid)
  70. {
  71.     Liste_Laden(playerid);
  72.     return 0;
  73. }
  74. public OnPlayerDisconnect(playerid)
  75. {
  76.     SaveFreunde(playerid);
  77.     return 0;
  78. }
  79.  
  80. public OnPlayerCommandText(playerid, cmdtext[])
  81. {
  82.     new cmd[64], tmp[64], idx, pID, string[128];
  83.     cmd = strtok(cmdtext, idx);
  84.     if(!strcmp(cmd, "/Freund", true))
  85.     {
  86.         tmp = strtok(cmdtext, idx);
  87.         if(!tmp[0]) return SendClientMessage(playerid,rot,"Verwendung: /Freund \"Hinzufügen [spielerid]\" oder \"Löschen [spielerid]\"");
  88.         if(!strcmp(tmp, "Hinzufügen", true))
  89.         {
  90.             tmp = strtok(cmdtext, idx);
  91.             if(!tmp[0]) return SendClientMessage(playerid,rot,"Verwendung: /Freund hinzufügen [spielerid]");
  92.             pID = strval(tmp);
  93.             if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,rot,"Ein Spieler mit dieser spielerid ist nicht online !");
  94.             if(playerid == pID) return SendClientMessage(playerid,rot,"Du kannst dir nicht selbst eine Freundschaftsanfrage schicken !");
  95.             if(IsFreund(playerid, pID)) return SendClientMessage(playerid,rot,"Dieser Spieler ist schon dein Freund !");
  96.             format(string, 128,"Du hast %s eine Freundschaftsanfrage geschickt !",GetName(pID));
  97.             SendClientMessage(playerid,blau,string);
  98.             format(string, 128,"Spieler %s hat dir eine Freundschatfsanfrage geschickt ! (Aktzeptiere diese mit /faccept)",GetName(playerid));
  99.             SendClientMessage(pID,grun,string);
  100.             evtl[pID] = playerid;
  101.         }
  102.         if(!strcmp(tmp, "Löschen", true))
  103.         {
  104.             tmp = strtok(cmdtext, idx);
  105.             if(!tmp[0]) return SendClientMessage(playerid,rot,"Verwendung: /Freund Löschen [spielerid]");
  106.             pID = strval(tmp);
  107.             if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,rot,"Ein Spieler mit dieser spielerid ist nicht online !");
  108.             for(new v; v<MAX_FREUNDE; v++)
  109.             {
  110.                 if(Player_Freund[playerid][v] == pID)
  111.                 {
  112.                     format(string, 128,"Du hast %s erfolgreich von deiner Freundesliste gelöscht !",GetName(pID));
  113.                     SendClientMessage(playerid,blau,string);
  114.                     Player_Freund[playerid][v] = -1;
  115.                     return 1;
  116.                 }
  117.             }
  118.         }
  119.         return 1;
  120.     }
  121.     if(!strcmp(cmd, "/faccept", true))
  122.     {
  123.         pID = evtl[playerid];
  124.         if(pID == -1) return SendClientMessage(playerid,rot,"Niemand hat dir eine Freundschaftsanfrage geschickt !");
  125.         if(!IsPlayerConnected(pID))
  126.         {
  127.             SendClientMessage(playerid,rot,"Der Spieler der ihnen eine Freundschaftsanfrage gesendet hat, ist offline gegangen und deshalb wird die Anfrage annulliert !");
  128.             evtl[playerid] = -1;
  129.             return 1;
  130.         }
  131.         format(string, sizeof string,"Du hast die Freundschaftsanfrage von %s bestätigt !",GetName(pID));
  132.         SendClientMessage(playerid,blau,string);
  133.         format(string, sizeof string,"Spieler %s hat deine Freundschaftsanfrage bestätigt !",GetName(playerid));
  134.         SendClientMessage(pID,grun,string);
  135.         Player_Freund[pID][GetFreeSlot(pID)] = playerid;
  136.         Player_Freund[playerid][GetFreeSlot(playerid)] = pID;
  137.         Stack(pID, playerid);
  138.         Stack(playerid, pID);
  139.         evtl[playerid] = -1;
  140.         return 1;
  141.     }
  142.     if(!strcmp(cmd, "/fonline", true))
  143.     {
  144.         new buffer[32];
  145.         for(new i; i<MAX_PLAYERS; i++)
  146.         {
  147.             if(IsFreund(playerid, i) && i != playerid)
  148.             {
  149.                 format(buffer, 32, "{FFFFFF}%s (ID: %d)\n",GetName(i),i);
  150.                 strcat(string, buffer, sizeof string);
  151.             }
  152.         }
  153.         ShowPlayerDialog(playerid,f_con,DIALOG_STYLE_MSGBOX,"{FF0000}Folgende Freunde sind online:",string,"Bestätigen","");
  154.         return 1;
  155.     }
  156.     if(!strcmp(cmd, "/fsend", true))
  157.     {
  158.         tmp = strtok(cmdtext, idx);
  159.         if(!tmp[0]) return SendClientMessage(playerid,rot,"Verwendung: /fsend [spielerid (muss ein Freund sein)]");
  160.         pID = strval(tmp);
  161.         if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,rot,"Ein Spieler mit dieser spielerid ist nicht online !");
  162.         if(!IsFreund(playerid, pID)) return SendClientMessage(playerid,rot,"Dieser Spieler ist nicht dein Freund !");
  163.         var_f[playerid] = pID;
  164.         format(string, sizeof string,"{FFFFFF}Sende eine Nachricht an {FF0000}%s:",GetName(pID));
  165.         ShowPlayerDialog(playerid,f_1,DIALOG_STYLE_INPUT,"{FF0000}Nachricht System",string,"Bestätigen","Abbrechen");
  166.         return 1;
  167.     }
  168.     if(!strcmp(cmd, "/fsendall", true))
  169.     {
  170.         ShowPlayerDialog(playerid,f_2,DIALOG_STYLE_INPUT,"{FF0000}Nachricht System","{FFFFFF}Sende eine Nachricht an all deine Freunde:","Bestätigen","Abbrechen");
  171.         return 1;
  172.     }
  173.     return 0;
  174. }
  175. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  176. {
  177.     new string[128];
  178.     switch(dialogid) {
  179.         case f_1: {
  180.             if(!response) return 1;
  181.             SendClientMessage(playerid,gelb,"Du hast die Nachricht erfolgreich gesendet !");
  182.             format(string, sizeof string,"Dein Freund %s hat dir eine Nachricht geschickt:",GetName(playerid));
  183.             SendClientMessage(var_f[playerid],blau,string);
  184.             format(string, sizeof string,"{FF0000}Nachricht von %s:",GetName(playerid));
  185.             ShowPlayerDialog(playerid,f_con,DIALOG_STYLE_MSGBOX,string,inputtext,"Bestätigen","");
  186.         }
  187.         case f_2: {
  188.             if(!response) return 1;
  189.             new i, count;
  190.             for(; i<MAX_FREUNDE; i++)
  191.             {
  192.                 if(Player_Freund[playerid][i] != -1 && IsPlayerConnected(i))
  193.                 {
  194.                     count = 1;
  195.                     format(string, sizeof string,"Dein Freund %s hat dir eine Nachricht geschickt:",GetName(playerid));
  196.                     SendClientMessage(i,blau,string);
  197.                     format(string, sizeof string,"{FF0000}Nachricht von %s:",GetName(playerid));
  198.                     ShowPlayerDialog(i,f_con,DIALOG_STYLE_MSGBOX,string,inputtext,"Bestätigen","");
  199.                 }
  200.             }
  201.             if(count) SendClientMessage(playerid,gelb,"Du hast die Nachricht erfolgreich gesendet !");
  202.             else SendClientMessage(playerid,rot,"Es sind momentan keine Freunde online !");
  203.         }
  204.     }
  205.     return 0;
  206. }
  207. IsFreund(playerid, pID)
  208. {
  209.     new i;
  210.     for(; i<MAX_FREUNDE; i++)
  211.     {
  212.         if(Player_Freund[playerid][i] == pID) return 1;
  213.     }
  214.     return 0;
  215. }
  216. GetFreeSlot(playerid)
  217. {
  218.     new i;
  219.     for(; i<MAX_FREUNDE; i++)
  220.     {
  221.         if(Player_Freund[playerid][i] == -1) return i;
  222.     }
  223.     return 0;
  224. }
  225. GetName(playerid)
  226. {
  227.     new name[24];
  228.     GetPlayerName(playerid, name, 24);
  229.     return name;
  230. }
  231. strtok(const string[], &index)
  232. {
  233.     new length = strlen(string);
  234.     while ((index < length) && (string[index] <= ' ')) index++;
  235.     new offset = index, result[20];
  236.     while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
  237.     {
  238.         result[index - offset] = string[index];
  239.         index++;
  240.     }
  241.     result[index - offset] = EOS;
  242.     return result;
  243. }
  244. SaveFreunde(playerid)
  245. {
  246.     new Pfad[64];
  247.     format(Pfad, 64, "Freunde_von_%s.txt", GetName(playerid));
  248.     new File:f = fopen(Pfad, io_write);
  249.     fwrite(f, List_Freunde[playerid]);
  250.     fclose(f);
  251.     return 1;
  252. }
  253. split(const strsrc[], strdest[][], delimiter)
  254. {
  255.     new i, li,aNum,len;
  256.     while(i <= strlen(strsrc))
  257.     {
  258.         if(strsrc[i] == delimiter || i == strlen(strsrc))
  259.         {
  260.             len = strmid(strdest[aNum], strsrc, li, i, 128);
  261.             strdest[aNum][len] = 0;
  262.             li = i+1;
  263.             aNum++;
  264.         }
  265.         i++;
  266.     }
  267.     return 1;
  268. }
Advertisement
Add Comment
Please, Sign In to add comment