/kiss für beide?

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
  • Also,


    Damit ihr versteht was ich meine kurze Erklärung:
    Wenn eine Person x vor einer Person y steht. Kann eine von den Personen /kiss ID machen. Dann werden Automatisch die Personen vor einander gestellt und die Kissanimation ausgeführt
    Ja, man kann so machen das beide einfach /kiss eingeben und dann kommt die Animation, aber das wird nie gescheit getroffen! Also sodass die dann Perfekt voreinander stehen, kann man so etwas machen? Also wenn ihr wisst wie das geht, könnt ihr mir Erklären :3?

  • Hast du denn schon den Befehl angefangen / geschrieben?
    Du kannst ja machen, dass einer "/kiss ID" macht, und dann gefreezed wird.
    Dem Anderen wird ein Dialog angezeigt, es sei denn, der Spieler steht nicht direkt vor dem Anderen.
    Ansonsten wird ihm der Dialog angezeigt, und er kann es annehmen / ablehnen. -> Spieler wird wieder entfreezed - Animation wird ausgeführt bei beiden Spielern


    Du kannst ja die Funktion von Jeffry benutzen, die ist dafür da, die Position vor dem Spieler zu bekommen.


    Am besten fängst du mal mit dem Befehl an und wir können dir hier dann helfen. Wenn du den Befehl schon angefangen hast, dann versuch nun, den Befehl weiterzumachen, ansonsten, wie gesagt, kannst du hier nach Hilfe fragen.

  • Beitrag von WhiteWay ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Hast du denn schon den Befehl angefangen / geschrieben?
    Du kannst ja machen, dass einer "/kiss ID" macht, und dann gefreezed wird.
    Dem Anderen wird ein Dialog angezeigt, es sei denn, der Spieler steht nicht direkt vor dem Anderen.
    Ansonsten wird ihm der Dialog angezeigt, und er kann es annehmen / ablehnen. -> Spieler wird wieder entfreezed - Animation wird ausgeführt bei beiden Spielern


    Du kannst ja die Funktion von Jeffry benutzen, die ist dafür da, die Position vor dem Spieler zu bekommen.


    Am besten fängst du mal mit dem Befehl an und wir können dir hier dann helfen. Wenn du den Befehl schon angefangen hast, dann versuch nun, den Befehl weiterzumachen, ansonsten, wie gesagt, kannst du hier nach Hilfe fragen.


    So,
    die Vorlage habe ich vom /sex befehl genommen.
    Ich weiß nicht ob alles richtig ist, also schreibe ich das hier rein.
    if(strcmp(cmd, "/kiss", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Benutze: /kiss [playerid]");
    return 1;
    }
    giveplayerid = ReturnUser(tmp);
    tmp = strtok(cmdtext, idx);
    if(IsPlayerConnected(giveplayerid))
    {
    if(giveplayerid != INVALID_PLAYER_ID)
    {
    new Float:x, Float:y, Float:z;
    if (ProxDetectorS(8.0, playerid, giveplayerid))
    {
    if(giveplayerid == playerid) { SendClientMessage(playerid, COLOR_GREY, "Du kannst dich nicht selbst Küssen!"); return 1; }
    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string, sizeof(string), "* Du bietest %s einen Kuss.", giveplayer);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "* %s bietet dir einen Kuss. (/kiss annehmen)", sendername);
    SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
    //Setzt den Spieler 5 Meter vor den anderen Spieler.
    GetPosVorSpieler(giveplayerid, 5.0, x, y, z); //pID = Spieler, dessen Position abgefragt wird.
    SetPlayerPos(playerid, x, y, z); //playerid = Spieler, dessen Position gesetzt wird.
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, " Dieser Spieler ist nicht in deiner Nähe !");
    return 1;
    }
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, " Der Spieler ist Offline !");
    return 1;
    }
    return 1;
    }

  • Sollte so klappen:


    new KissAntrag[MAX_PLAYERS];


    if(strcmp(cmd, "/kiss", true) == 0)
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))return SendClientMessage(playerid, COLOR_GRAD1, "Benutze: /kiss [playerid]");
    giveplayerid = ReturnUser(tmp);
    tmp = strtok(cmdtext, idx);
    if(!IsPlayerConnected(giveplayerid))return SendClientMessage(playerid, COLOR_GREY, " Dieser Spieler ist nicht in deiner Nähe !");
    if(giveplayerid == INVALID_PLAYER_ID)return 1;
    if (ProxDetectorS(8.0, playerid, giveplayerid))
    {
    if(giveplayerid == playerid)return SendClientMessage(playerid, COLOR_GREY, "Du kannst dich nicht selbst Küssen!");
    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string, sizeof(string), "* Du bietest %s einen Kuss.", giveplayer);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "* %s bietet dir einen Kuss. (/kiss annehmen)", sendername);
    SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
    TogglePlayerControllable(playerid,false); // Hier wird er gefreezed
    return KissAntrag[playerid] = giveplayerid;
    }
    return 1;
    }



    Jetzt zeig mal bitte dein "Kiss annehmen" Befehl..


  • Das Kiss Annehmen befehl muss ich noch machen, also warten :D


    //edit: Was bringt das return KissAntrag[playerid] = giveplayerid;?
    weil ich würde das so machen, KissAntrag[playerid] = 1;
    und dann /kissannehmen geht wenn KissAntrag 1 ist.

  • Nein, das geht so nicht..
    "KissAntrag[playerid] = giveplayerid;" bewirkt, dass bei Spieler A in der Variable KissAntrag die ID des Spielers B eingetragen wird.
    Das brauchst du, um abzufragen, welcher Spieler mit wem Küssen will ( beim Annehmen-Befehl zum Beispiel )

  • Nein, das geht so nicht..
    "KissAntrag[playerid] = giveplayerid;" bewirkt, dass bei Spieler A in der Variable KissAntrag die ID des Spielers B eingetragen wird.
    Das brauchst du, um abzufragen, welcher Spieler mit wem Küssen will ( beim Annehmen-Befehl zum Beispiel )


    if(strcmp(cmd, "/kiss", true) == 0)
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))return SendClientMessage(playerid, COLOR_GRAD1, "Benutze: /kiss [playerid]");
    giveplayerid = ReturnUser(tmp);
    tmp = strtok(cmdtext, idx);
    if(!IsPlayerConnected(giveplayerid))return SendClientMessage(playerid, COLOR_GREY, " Dieser Spieler ist nicht in deiner Nähe !");
    if(giveplayerid == INVALID_PLAYER_ID)return 1;
    if (ProxDetectorS(8.0, playerid, giveplayerid))
    {
    if(giveplayerid == playerid)return SendClientMessage(playerid, COLOR_GREY, "Du kannst dich nicht selbst Küssen!");
    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string, sizeof(string), "* Du bietest %s einen Kuss.", giveplayer);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "* %s bietet dir einen Kuss. (/kissannehmen)", sendername);
    SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
    TogglePlayerControllable(playerid,false); // Hier wird er gefreezed
    return KissAntrag[playerid] = giveplayerid;
    }
    return 1;
    }
    //---------------------------------------------------------------//
    if(strcmp(cmd, "/kissannehmen", true) == 0)
    {
    if(KissAntrag[playerid] == giveplayerid)
    {
    new Float:x, Float:y, Float:z;
    GetPosVorSpieler(giveplayerid, 5.0, x, y, z); //pID = Spieler, dessen Position abgefragt wird.
    SetPlayerPos(playerid, x, y, z); //playerid = Spieler, dessen Position gesetzt wird.
    }
    return 1;
    }


    Ich weiß nicht ob das richtig ist :3


    //edit: Animationen kommen später rein, wenn alles richtig ist

  • Sollte so klappen..
    if(strcmp(cmd, "/kissannehmen", true) == 0)
    {
    new Float:x, Float:y, Float:z;
    GetPosVorSpieler(KissAntrag[playerid], 5.0, x, y, z); //pID = Spieler, dessen Position abgefragt wird.
    if(!IsPlayerInRangeOfPoint(playerid,3,x,y,z))return 1;// Fragen, ob der Spieler in der Nähe von dem Anderen ist, wenn ja -> SetPlayerPos | Wenn nein: return
    SetPlayerPos(playerid,x,y,z); // Hier wird der Spieler an die Pos gesetzt
    TogglePlayerControllable(KissAntrag[playerid],true); // Hier wird der Spieler wieder entfreezed
    // -> Animation abspielen lassen bei "playerid" & "KissAntrag[playerid]"
    return KissAntrag[playerid] = 0; // Variable wird zurückgesetzt
    }


  • So richtig?
    if(strcmp(cmd, "/kissannehmen", true) == 0)
    {
    new Float:x, Float:y, Float:z;
    GetPosVorSpieler(KissAntrag[playerid], 5.0, x, y, z); //pID = Spieler, dessen Position abgefragt wird.
    if(!IsPlayerInRangeOfPoint(playerid,3,x,y,z))return 1;// Fragen, ob der Spieler in der Nähe von dem Anderen ist, wenn ja -> SetPlayerPos | Wenn nein: return
    SetPlayerPos(playerid,x,y,z); // Hier wird der Spieler an die Pos gesetzt
    TogglePlayerControllable(KissAntrag[playerid],true); // Hier wird der Spieler wieder entfreezed
    ApplyAnimation(playerid,"KISSING","Playa_Kiss_02",4.1,0,0,0,1,1);
    ApplyAnimation(KissAntrag[playerid],"KISSING","Grlfrd_Kiss_02",4.1,0,0,0,1,1);
    return KissAntrag[playerid] = 0; // Variable wird zurückgesetzt
    }
    //edit: habe einen Fehler, bei /kissannehmen passiert nichts.

  • if(!IsPlayerConnected(giveplayerid))return SendClientMessage(playerid, COLOR_GREY, " Dieser Spieler ist nicht in deiner Nähe !");
    if(giveplayerid == INVALID_PLAYER_ID)return 1;


    Was machst du denn hier ?


    Erst fragst du ab, ob der Spieler nicht Connected ist, dann übergibst du die Spielernachricht: Dieser Spieler ist nicht in deiner Nähe !
    Anschließend fragst du ab ob giveplayerid eine ungültige ID ist!
    Wo bleibt der sinn ?(


    Ich würde dir noch empfehlen das ganze so zu machen:
    ocmd:kiss(playerid,params[]){
    new giveplayerid, Float:pPos[3];
    if(sscanf(params,"u",giveplayerid))return SendClientMessage(playerid, COLOR_GRAD1, "Benutze: /kiss [playerid]");
    if(giveplayerid == INVALID_PLAYER_ID)return SendClientMessage(playerid,-1,"Der Spieler ist nicht online!");
    GetPlayerPos(giveplayerid, pPos[0], pPos[1], pPos[2]);
    if(GetPlayerDistanceFromPoint(playerid, pPos[0], pPos[1], pPos[2]) > abstand)return SendClientMessage(playerid,-1,"Du bist nicht in der nähe von dem Spieler!");
    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)),GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string, sizeof(string), "* Du bietest %s einen Kuss.", giveplayer),SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "* %s bietet dir einen Kuss. (/kissannehmen)", sendername),SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
    TogglePlayerControllable(playerid,false); // Hier wird er gefreezed
    }


    ocmd:kissannehmen(playerid){
    new pPos[3];
    GetPosVorSpieler(KissAntrag[playerid], 5.0, pPos[0], pPos[1], pPos[2]);
    if(GetPlayerDistanceFromPoint(playerid, pPos[0], pPos[1], pPos[2]) > 2.9)return 1;
    SetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
    TogglePlayerControllable(KissAntrag[playerid], 1);
    ApplyAnimation(playerid,"KISSING","Playa_Kiss_02",4.1,0,0,0,1,1);
    ApplyAnimation(KissAntrag[playerid],"KISSING","Grlfrd_Kiss_02",4.1,0,0,0,1,1);
    return KissAntrag[playerid] = 0;
    }


    Mit strcmp & strtok ist das nicht gerade anders :thumbup:


  • Und wo wird beim /kiss befehl das KissAntrag benutzt?