Mit waffe auf den NPC zielen? Rob?

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.
    Wie kann ich ein Robsystem scripten, indem man statt einen Befehl einzugeben, 10 sekunden auf den NPC zielen muss?


    Danke schonmal!


    MFG

    Einmal editiert, zuletzt von .Kid () aus folgendem Grund: 1. Problem gelöst.

  • Die beiden Werte kannst du wie folgt zusammen rechnen und ausgeben:



    new kassenBeute = 1500; // Musst du nicht anlegen, du kannst in Zeile 3 auch direkt 1500 hinschreiben statt "kassenBeute"


    format(string, sizeof(string), "** Du hast %d$ erbeutet!", robbonus + kassenBeute);
    SendClientMessage(playeris, COLOR_GREEN, string);


    Dementsprechend reicht es dann auch aus, einmal GivePlayerMoney zu machen wenn du die beiden zusammengerechnet hast.

  • mit GetPlayerTargetPlayer überprüfen ob er auf den NPC zielt und dann nen timer starten. vielleicht in nem anderen 1 sekunden timer prüfen das der Spieler immer noch auf den NPC zielt und wenn nicht den timer killen lassen

  • Genauer gesagt:



    if(strcmp(cmd, "/robtanke", true) == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 663.949523, -568.755798, 16.343263))
    {
    new beute = random(500) + 1501;
    WantedPoints[playerid] += 2;
    SetPlayerCriminal(playerid, 255, "Tankstelle ausgeraubt!");
    GivePlayerMoney(playerid, beute);
    format(string, sizeof(string), "** Du hast %d$ aus dem Geldbeutel und der Kasse bekommen!", beute );
    SendClientMessage(playerid, COLOR_GREEN, string);
    }
    }
    return 1;
    }


    //EDIT: Ihr wart schneller :D

  • Beitrag von .Kid ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Jetzt nurnoch das mit dem zielen und dann währ alles perfekt :b


    Kannst es so machen:


    new target[MAX_PLAYERS];


    public OnPlayerUpdate(playerid)
    {
    new target = GetPlayerTargetPlayer(playerid);
    if(target == INVALID_PLAYER_ID && !target[playerid]) return 1;
    if(target == INVALID_PLAYER_ID) return target[playerid]=0;
    if(!IsPlayerNPC(target)) return 1; //Hier prüfen ob es der richtige NPC ist!
    if(!target[playerid]) target[playerid] = gettime()+10;
    else {
    if(gettime() >= target[playerid]) {
    //Hier hat er 10Sekunden auf den Bot gezielt!
    }
    }
    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

  • Hallo!


    das hier ist jetzt mein Befehl:


    if(strcmp(cmd, "/robtanke", true) == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 663.949523, -568.755798, 16.343263))
    {
    WantedPoints[playerid] += 2;
    SetPlayerCriminal(playerid,255, "Tankstelle ausgeraubt!");
    GivePlayerMoney(playerid,kassenBeute + robbonus);
    format(string, sizeof(string), "** Du hast %d$ erbeutet!!",robbonus + kassenBeute);
    SendClientMessage(playerid, COLOR_GREEN, string);
    }
    return 1;
    }


    wie bau ich das ein?


    MFG

  • Der Code von Kaliber wird so nicht kompilieren (lokale Variable heißt gleich wie das globale Array), außerdem sind die returns auch nicht grade toll, wenn danach noch Code folgt.


    So:
    new g_target[MAX_PLAYERS];
    public OnPlayerUpdate(playerid)
    {
    new l_target = GetPlayerTargetPlayer(playerid);
    if(l_target == INVALID_PLAYER_ID)
    {
    if(g_target[playerid]) g_target[playerid]=0;
    }
    else if(IsPlayerNPC(l_target))
    {
    if(!g_target[playerid]) g_target[playerid] = gettime()+10;
    else
    {
    if(gettime() >= g_target[playerid])
    {
    //Hier hat er 10Sekunden auf den Bot gezielt!
    g_target[playerid] = 0;
    //Hier dann die Nachricht aus deinem /robtanke.
    }
    }
    }
    return 1;
    }