Freundessystem

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Guten Tag,


    Ich habe gestern angefangen ein Freundessystem zu machen, leider komme ich grad irgendwie gar nicht weiter....


    CODE:
    ocmd:friendadd(playerid,params[]){
    new pID,string[258];
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,COLOR_BENUTZETEXT,"Benutze: /friendadd [SpielerName/ID]");
    format(string,sizeof(string),"* [Freundessystem] %s hat dir eine Freundschaftsanfrage geschickt.",SpielerName(playerid));
    SendClientMessage(pID,COLOR_BEIGE,string);
    format(string,sizeof(string),"* Du hast %s eine Freundschaftsanfrage geschickt.",SpielerName(pID));
    SendClientMessage(playerid,COLOR_BEIGE,string);
    Freundschaftsanfrage[pID] = playerid;
    return 1;
    }


    ocmd:friendrequests(playerid,params[]){
    new string[258];
    format(string,sizeof(string),"%s\n",SpielerName(Freundschaftsanfrage[playerid]));
    ShowPlayerDialog(playerid,DIALOG_FRIENDS,DIALOG_STYLE_LIST,"Freundschaftsanfragen",string,"Verwalter","Abbrechen");
    return 1;
    }


    if(dialogid == DIALOG_FRIENDS){
    if(!response) return 1;
    if(response == 1){
    new string1[128];
    format(string1,sizeof(string1),"Freundschaftsanfrage von %s");//Hier soll ausgelesen werden auf welche Person man im DIALOG_STYLE_LIST geklickt hat.
    format(string,sizeof(string),"Annehmen\nAblehnen","Auswählen","Abbrechen");//Hier soll ausgelesen werden ob man die Freundschaftsanfrage angenommen oder abgelehnt hat.
    ShowPlayerDialog(playerid,DIALOG_FRIENDS1,DIALOG_STYLE_LIST,string1,string,"Auswählen","Abbrechen");
    }
    }
    if(dialogid == DIALOG_FRIENDS1){
    new stringF[500];
    if(!response) return 1;
    switch(listitem){
    case 1:{
    format(stringF,sizeof(stringF),"* Du hast die Freundschaftsanfrage von %s|%s abgelehnt.");//Hier soll ausgelesen werden welcher Name jetzt bei DIALOG_STYLE_LIST stand
    SendClientMessage(playerid,COLOR_BEIGE,stringF);
    }
    case 0:{
    format(stringF,sizeof(stringF),"* Du hast die Freundschaftsanfrage von %s|%s angenommen.";
    SendClientMessage(playerid,COLOR_BEIGE,stringF);
    }
    }
    }


    Ich hoffe ihr versteht das Problem und könnt mir helfen.
    Im Groben und ganzen ist das so ich verschicke eine Freundschaftsanfrage kann dann /friendrequests machen, wenn ich das gemacht habe erscheint ein DIALOG_STYLE_LIST, dort steht der
    Name von dem, der mir eine anfrage geschickt hat, wenn ich da jetzt draufklicke komme ich halt nicht weiter, wie ich auslesen kann das ich genau dort drauf auf den Spieler geklickt habe.


    MfG
    Julian

  • Zitat

    format(string1,sizeof(string1),"Freundschaftsanfrage von %s");//Hier soll ausgelesen werden auf welche Person man im DIALOG_STYLE_LIST geklickt hat.


    Das wird nicht gehen, da du es so vom Code ausgelegt hast, dass jeder Spieler gleichzeitig nur 1 Freundschaftsanfrage haben kann.
    Siehe im Code Zeile 8.
    Er kann also immer nur auf den Spieler geklickt haben,der sowieso hinter Freundschaftsanfrage[playerid] steht bzw listitem 0.
    Für Zeile 33 und 37 gillt das Gleiche. Es kann nur Freundschaftsanfrage[playerid] sein.

  • Wie würde was gehen ?
    Gleichzeitig mehrere Anfragen versenden und haben ?


    Du müsstest mit einem Array arbeiten Freundschaftsanfrage[playerid][0...5 zB ].
    Das ist aber nicht ganz so einfach:
    - Beim Anfrage senden einen leeren Slots suchen und dort die Freundschaftsanfrage speichern.
    - Bei /friendrequests das Array abgehen und alle Einträge auflisten
    - Bei DIALOG_FRIENDS vom listitem ( inputtext ) auf den Spieler(namen) zurückschließen. Ich würde es über inputtext machen. Außerdem irgendwo zwischenspeichern, wessen Spielers Freundschaftsanfrage du verarbeitest.
    - DIALOG_FRIENDS1 den ausgewählte Spieleranfrage verarbeiten


  • Klingt jetzt irgendwie sehr Kompliziert... :S Trotzdem bedanke ich mich für deinen beitrag.

  • Auf Anfrage per PM:


    So wie Goldkiller es erklärt hat ist es eigentlich schon richtig, so in der Art, oder ähnlich solltest du es schon machen.
    Hier hast du mal ein Beispiel System: http://forum.sa-mp.com/showthread.php?t=287688


    Ich kann dir vorschlagen, du schaust mal in mein Tutorial zu Interaktiven Dialogen rein, das würde dir hier sicher schonmal sehr helfen:
    [ SCRIPTING ] [jTuT] Interaktive Dialoge


    Ansonsten sollte dir hier klar sein, das ein Freunde System kein System ist das man in 5 Minuten hinklatscht, sondern das wird einige Zeit in Anspruch nehmen, ich spreche da von 10 und mehr Stunden reiner Arbeitszeit. Und längenmäßig wird es weit über deine vorhandenen 40 Zeilen gehen, vor allem wenn du es speichern und laden willst, was ja sinnvoll wäre.


  • natürlich war es mir bewusst :) Ich danke für deine antwort, diese wird mir jetzt auch bestimmt helfen. Ich habe da schon paar ideen :)


    MfG
    Julian