Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* SaMp Filterscript Freundschaftssystem
- *
- * (c) by Kaliber, 2012
- *
- * Grundidee von PinguinLP
- */
- #include <a_samp>
- #pragma tabsize 0 //Nur hier bei pastebin
- #if !defined MAX_FREUNDE
- #define MAX_FREUNDE 200
- #endif
- #pragma dynamic 413016
- #define rot 0xFF0000FF
- #define grun 0xFF0000
- #define gelb 0xFFFF00FF
- #define blau 0x2E9AFEFF
- #define f_con 700
- #define f_1 (f_con + 1)
- #define f_2 (f_con + 2)
- new Player_Freund[MAX_PLAYERS][MAX_FREUNDE], evtl[MAX_PLAYERS], var_f[MAX_PLAYERS], List_Freunde[MAX_PLAYERS][256];
- public OnFilterScriptInit()
- {
- for(new v; v<MAX_PLAYERS; v++)
- {
- evtl[v] = -1;
- for(new i; i<MAX_FREUNDE; i++)
- {
- Player_Freund[v][i] = -1;
- }
- }
- return 1;
- }
- Stack(playerid, pID)
- {
- new string[32];
- format(string, sizeof string,"%s|",GetName(pID));
- strins(List_Freunde[playerid], string, 0, 512);
- }
- stock Liste_Laden(playerid)
- {
- new Pfad[64];
- format(Pfad, 64, "Freunde_von_%s.txt", GetName(playerid));
- if(!fexist(Pfad)) return 1;
- new File:f = fopen(Pfad, io_read), string[512];
- fread(f, string);
- fclose(f);
- new tmp[MAX_FREUNDE][512];
- split(string, tmp, '|');
- for(new i; i<MAX_FREUNDE; i++) Player_Freund[playerid][i] = GetId(tmp[i]);
- return 1;
- }
- GetId(name[])
- {
- if(strlen(name) < 2) return -1;
- new id;
- for(; id<MAX_PLAYERS; id++)
- {
- if(!IsPlayerConnected(id)) continue;
- if(!strcmp(GetName(id), name, false)) return id;
- }
- return -1;
- }
- public OnPlayerConnect(playerid)
- {
- Liste_Laden(playerid);
- return 0;
- }
- public OnPlayerDisconnect(playerid)
- {
- SaveFreunde(playerid);
- return 0;
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- new cmd[64], tmp[64], idx, pID, string[128];
- cmd = strtok(cmdtext, idx);
- if(!strcmp(cmd, "/Freund", true))
- {
- tmp = strtok(cmdtext, idx);
- if(!tmp[0]) return SendClientMessage(playerid,rot,"Verwendung: /Freund \"Hinzufügen [spielerid]\" oder \"Löschen [spielerid]\"");
- if(!strcmp(tmp, "Hinzufügen", true))
- {
- tmp = strtok(cmdtext, idx);
- if(!tmp[0]) return SendClientMessage(playerid,rot,"Verwendung: /Freund hinzufügen [spielerid]");
- pID = strval(tmp);
- if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,rot,"Ein Spieler mit dieser spielerid ist nicht online !");
- if(playerid == pID) return SendClientMessage(playerid,rot,"Du kannst dir nicht selbst eine Freundschaftsanfrage schicken !");
- if(IsFreund(playerid, pID)) return SendClientMessage(playerid,rot,"Dieser Spieler ist schon dein Freund !");
- format(string, 128,"Du hast %s eine Freundschaftsanfrage geschickt !",GetName(pID));
- SendClientMessage(playerid,blau,string);
- format(string, 128,"Spieler %s hat dir eine Freundschatfsanfrage geschickt ! (Aktzeptiere diese mit /faccept)",GetName(playerid));
- SendClientMessage(pID,grun,string);
- evtl[pID] = playerid;
- }
- if(!strcmp(tmp, "Löschen", true))
- {
- tmp = strtok(cmdtext, idx);
- if(!tmp[0]) return SendClientMessage(playerid,rot,"Verwendung: /Freund Löschen [spielerid]");
- pID = strval(tmp);
- if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,rot,"Ein Spieler mit dieser spielerid ist nicht online !");
- for(new v; v<MAX_FREUNDE; v++)
- {
- if(Player_Freund[playerid][v] == pID)
- {
- format(string, 128,"Du hast %s erfolgreich von deiner Freundesliste gelöscht !",GetName(pID));
- SendClientMessage(playerid,blau,string);
- Player_Freund[playerid][v] = -1;
- return 1;
- }
- }
- }
- return 1;
- }
- if(!strcmp(cmd, "/faccept", true))
- {
- pID = evtl[playerid];
- if(pID == -1) return SendClientMessage(playerid,rot,"Niemand hat dir eine Freundschaftsanfrage geschickt !");
- if(!IsPlayerConnected(pID))
- {
- SendClientMessage(playerid,rot,"Der Spieler der ihnen eine Freundschaftsanfrage gesendet hat, ist offline gegangen und deshalb wird die Anfrage annulliert !");
- evtl[playerid] = -1;
- return 1;
- }
- format(string, sizeof string,"Du hast die Freundschaftsanfrage von %s bestätigt !",GetName(pID));
- SendClientMessage(playerid,blau,string);
- format(string, sizeof string,"Spieler %s hat deine Freundschaftsanfrage bestätigt !",GetName(playerid));
- SendClientMessage(pID,grun,string);
- Player_Freund[pID][GetFreeSlot(pID)] = playerid;
- Player_Freund[playerid][GetFreeSlot(playerid)] = pID;
- Stack(pID, playerid);
- Stack(playerid, pID);
- evtl[playerid] = -1;
- return 1;
- }
- if(!strcmp(cmd, "/fonline", true))
- {
- new buffer[32];
- for(new i; i<MAX_PLAYERS; i++)
- {
- if(IsFreund(playerid, i) && i != playerid)
- {
- format(buffer, 32, "{FFFFFF}%s (ID: %d)\n",GetName(i),i);
- strcat(string, buffer, sizeof string);
- }
- }
- ShowPlayerDialog(playerid,f_con,DIALOG_STYLE_MSGBOX,"{FF0000}Folgende Freunde sind online:",string,"Bestätigen","");
- return 1;
- }
- if(!strcmp(cmd, "/fsend", true))
- {
- tmp = strtok(cmdtext, idx);
- if(!tmp[0]) return SendClientMessage(playerid,rot,"Verwendung: /fsend [spielerid (muss ein Freund sein)]");
- pID = strval(tmp);
- if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,rot,"Ein Spieler mit dieser spielerid ist nicht online !");
- if(!IsFreund(playerid, pID)) return SendClientMessage(playerid,rot,"Dieser Spieler ist nicht dein Freund !");
- var_f[playerid] = pID;
- format(string, sizeof string,"{FFFFFF}Sende eine Nachricht an {FF0000}%s:",GetName(pID));
- ShowPlayerDialog(playerid,f_1,DIALOG_STYLE_INPUT,"{FF0000}Nachricht System",string,"Bestätigen","Abbrechen");
- return 1;
- }
- if(!strcmp(cmd, "/fsendall", true))
- {
- ShowPlayerDialog(playerid,f_2,DIALOG_STYLE_INPUT,"{FF0000}Nachricht System","{FFFFFF}Sende eine Nachricht an all deine Freunde:","Bestätigen","Abbrechen");
- return 1;
- }
- return 0;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- new string[128];
- switch(dialogid) {
- case f_1: {
- if(!response) return 1;
- SendClientMessage(playerid,gelb,"Du hast die Nachricht erfolgreich gesendet !");
- format(string, sizeof string,"Dein Freund %s hat dir eine Nachricht geschickt:",GetName(playerid));
- SendClientMessage(var_f[playerid],blau,string);
- format(string, sizeof string,"{FF0000}Nachricht von %s:",GetName(playerid));
- ShowPlayerDialog(playerid,f_con,DIALOG_STYLE_MSGBOX,string,inputtext,"Bestätigen","");
- }
- case f_2: {
- if(!response) return 1;
- new i, count;
- for(; i<MAX_FREUNDE; i++)
- {
- if(Player_Freund[playerid][i] != -1 && IsPlayerConnected(i))
- {
- count = 1;
- format(string, sizeof string,"Dein Freund %s hat dir eine Nachricht geschickt:",GetName(playerid));
- SendClientMessage(i,blau,string);
- format(string, sizeof string,"{FF0000}Nachricht von %s:",GetName(playerid));
- ShowPlayerDialog(i,f_con,DIALOG_STYLE_MSGBOX,string,inputtext,"Bestätigen","");
- }
- }
- if(count) SendClientMessage(playerid,gelb,"Du hast die Nachricht erfolgreich gesendet !");
- else SendClientMessage(playerid,rot,"Es sind momentan keine Freunde online !");
- }
- }
- return 0;
- }
- IsFreund(playerid, pID)
- {
- new i;
- for(; i<MAX_FREUNDE; i++)
- {
- if(Player_Freund[playerid][i] == pID) return 1;
- }
- return 0;
- }
- GetFreeSlot(playerid)
- {
- new i;
- for(; i<MAX_FREUNDE; i++)
- {
- if(Player_Freund[playerid][i] == -1) return i;
- }
- return 0;
- }
- GetName(playerid)
- {
- new name[24];
- GetPlayerName(playerid, name, 24);
- return name;
- }
- strtok(const string[], &index)
- {
- new length = strlen(string);
- while ((index < length) && (string[index] <= ' ')) index++;
- new offset = index, result[20];
- while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
- {
- result[index - offset] = string[index];
- index++;
- }
- result[index - offset] = EOS;
- return result;
- }
- SaveFreunde(playerid)
- {
- new Pfad[64];
- format(Pfad, 64, "Freunde_von_%s.txt", GetName(playerid));
- new File:f = fopen(Pfad, io_write);
- fwrite(f, List_Freunde[playerid]);
- fclose(f);
- return 1;
- }
- split(const strsrc[], strdest[][], delimiter)
- {
- new i, li,aNum,len;
- while(i <= strlen(strsrc))
- {
- if(strsrc[i] == delimiter || i == strlen(strsrc))
- {
- len = strmid(strdest[aNum], strsrc, li, i, 128);
- strdest[aNum][len] = 0;
- li = i+1;
- aNum++;
- }
- i++;
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment