BoT Animation?

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
  • Hallo Community,


    irgendwie will mein Bot keine Animation machen.. woran liegt es? Obwohl er jede 10 Sekunden oder so neu spawnen tut macht er einfach keine Animation...


    So sieht mein Code aus:


    if(IsPlayerNPC(playerid))
    {
    TogglePlayerControllable(playerid,1);
    new botname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, botname, sizeof(botname));
    if(!strcmp(botname,"Frank",false))
    {
    SetPlayerSkin(playerid,72);
    ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
    }
    }


    LG

  • Um Animationen so abspielen zu könne bräuchtest du ein FCNPC o.a.

    Ihr immer mit eurem FNPC etc.
    Aus ner kleinen Mücke nen Elefanten machen -.-


    Er kann genauso den Bot eine Animation zu weisen mit:


    ApplyAnimation(GetPlayerID("BOT"),"CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);


    Einfach die ID vom Bot abfragen und ihn dadurch eine Animation zu weisen.
    Beispiel ich mache /test dann führt der Bot die Animation XY aus.
    Da braucht man weder ein FNPC, RNPC oder sonst was.

  • Sagmal wie defeniere ich GetPlayerID ?


  • stock GetPlayerID(const accname[])
    {
    new sname[MAX_PLAYER_NAME];
    if(IsPlayerConnected(i))
    {
    GetPlayerName(i,sname,sizeof(sname));
    if(strcmp(accname,sname,true) == 0)
    return i;
    }
    return -1;
    }


    Abfragen mit:
    if(GetPlayerTargetPlayer(playerid) == GetPlayerID("Bot"))
    Und dann eben mit ApplyAnimation (letzter Beitrag von mir hier im Thema) die Animation zuweisen


    Das GetPlayerID bezieht sich auf den Namen des Bots wie du ihn im Script genannt hast.
    Bsp:
    ConnectNPC("Klaus","Klaus1");
    Dann also: GetPlayerID("Klaus")

  • if(IsPlayerNPC(playerid))
    {
    TogglePlayerControllable(playerid,1);
    new botname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, botname, sizeof(botname));
    //if(!strcmp(botname,"Frank",false))
    if(GetPlayerTargetPlayer(playerid) == GetPlayerID("Frank"))
    {
    SetPlayerSkin(playerid,72);
    ApplyAnimation(playerid,"SMOKING", "M_smklean_loop", 4.0, 1, 0, 0, 0, 0);
    }
    }


    //e außerdem bekomme ich Errors in deinem sTock wegen "i" hast du da iwo ne schleife?

  • Die Funktion sollte so aussehen:


    stock GetPlayerID(const accname[]) {
    new sname[MAX_PLAYER_NAME],i;
    for(; i<MAX_PLAYERS; i++) {
    if(!IsPlayerConnected(i)) continue;
    GetPlayerName(i,sname,sizeof(sname));
    if(!strcmp(accname,sname)) return i;
    }
    return -1;
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • //edit


    if(IsPlayerNPC(playerid))
    {
    TogglePlayerControllable(playerid,1);
    new botname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, botname, sizeof(botname));
    if(!strcmp(botname,"Frank",false))
    //if(GetPlayerTargetPlayer(playerid) == GetPlayerID("Frank"))
    {
    SetPlayerSkin(playerid,72);
    ApplyAnimation(GetPlayerID("Frank"),"CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
    }
    }


    So hab ich es nun, aber die Animation geht nicht

  • Kaliber
    Ohne mich hier verzetteln zu wollen: Wieso sollte das schneller sein? Auch bei deiner Variante muss ein Index im RAM angelegt und initialisiert werden.


    Edit:
    @TE, dein Code ergibt für mich keinen Sinn.
    Oben fragst du ab, ob "playerid" ein NPC ist und weiter unten fragst du das Target des NPCs ab.


    #Brotfischbaron


    In schā'a llāh

    Einmal editiert, zuletzt von namespace ()

  • Brauche immer noch hilfe...


    if(IsPlayerNPC(playerid))
    {
    TogglePlayerControllable(playerid,1);
    new botname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, botname, sizeof(botname));
    if(!strcmp(botname,"Frank",false))
    //if(GetPlayerTargetPlayer(playerid) == GetPlayerID("Frank"))
    {
    SetPlayerSkin(playerid,98);
    ApplyAnimation(GetPlayerID("Frank"),"CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);


    }
    }


    Er hat nur den Skin an mehr nicht...


    //edit


    muss ihn vielleicht erst teleportieren oder eine InteriorID setzen damit das klappt?

  • Er hat nur den Skin an mehr nicht...

    Ich glaube du hast den Sinn des stocks nicht ganz erkannt.
    Beispiel:


    OCMD:befehl(playerid,params[])
    {
    if(GetPlayerTargetPlayer(playerid) == GetPlayerId("Frank")) //hier wird die ID des Bots Namens "Frank" "gesucht"
    SendClientMessage(playerid,-1,"Du hast dir ein paar Drogen gekauft"); //Hier eben, was passiert und bla
    ApplyAnimation(GetPlayerID("Frank"),"CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);//Animation bezogen auf "Frank" wird ausgeführt
    }


    Du kannst es demnach nicht einfach bei deinem Public rein setzen, wo du den Bot alles zuteilst.
    Eine Möglichkeit wäre auch noch, wenn der die Animation über den Aufnehmen dennoch nicht ausführt diese in die .pwn Datei des Bots einzutragen.
    Oder andere Möglichkeit Ingame nen Timer, der nach XY Minuten die Animation für den Bot ausführen lässt, ebenfalls mit GetPlayerID.