[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • ChristianW: Unter welches Callback soll ich es denn machen?


    Also entweder machst du unter OnGamemodeInit ein Timer


    In der Timerfunktion loopst du dann alle Spieler und fragst ab ob diese an dem Ort sind


    ODER


    Beim Connecten erstellst du einen PlayerTimer und fragst immer dann nur ab ob sich playerid an diesem Ort befindet


    (Methode 1 mit dem loopen ist die Bessere, da du nur einen Timer hast)


    Stelle den Timer auf eine Sekunde ein

  • OnGameModeInit:


    SetTimer("lookup",1000, true);


    Oben forward lookup();


    Unten:

    public lookup() {
    for(new i; i < MAX_PLAYERS; i++) {
    if(!IsPlayerConnected(i)) continue;
    if(!IsPlayerInRangeOfPoint(i,30,1795.6313,-2453.5166,173)) continue;
    SetPlayerPos(i,30,1770.1097,-2510.1968,177);
    }
    }


    Gruß


    Edit: Fail

  • Sorry bin ein bisschen durcheinander:


    Habe das glaub ich komplett falsch:


    Oben im Script


    Spoiler anzeigen

    forward lookup();

    Spoiler anzeigen
    public lookup() {
    for(new i; i < MAX_PLAYERS; i++) {
    if(!IsPlayerConnected(i)) continue;
    if(!IsPlayerInRangeOfPoint(i,30,1795.6313,-2453.5166,173)) continue;
    SetPlayerPos(i,30,1770.1097,-2510.1968,177);
    }
    }


    OnGameModeInit:


    Spoiler anzeigen

    SetTimer("lookup",1000, true);
    IsPlayerInRangeOfPoint(30,1795.6313,-2453.5166,173);
    SetPlayerPos(30,1770.1097,-2510.1968,177);


    Was muss ich entfernen von beiden?


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Alles klar, ich erhalte diese Warnung:


    C:\Users\Dave\Desktop\Hoe's Wonderland\gamemodes\LnD.pwn(22) : warning 202: number of arguments does not match definition
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Warning.


    Die Zeile sieht so aus:
    SetPlayerPos(i,30,1770.1097,-2510.1968,177);


    Ich bin mir ziemlich sicher das liegt an meinen Koordinaten, ich hab vergessen wie man die X Y und die Z Achse entnimmt.



    Von hier habe ich die genommen:


    AddPlayerClass(30,1770.1097,-2510.1968,177.2891,178.9054,0,0,0,0,0,0); // Drinnen


    Mit freundlichen Grüßen
    JustMe.77 8)


  • Ich glaube da fehlt ein
    PlayerSpectatePlayer(playerid, pID);


    Zwar keine Fehlermeldung, jedoch funktioniert es immer noch nicht.
    Jeffry:


    Viele Grüße

    Einmal editiert, zuletzt von Aviero ()

  • ocmd:tv(playerid,params[])
    {
    new pID,string[128];
    if(!isAdmin(playerid,1))return SendClientMessage(playerid,COLOR_GREY,"Du darfst diesen Befehl nicht benutzen.");
    if(sscanf(params,"i",pID))return SendClientMessage(playerid,COLOR_GREY,"Verwendung: /tv [Spieler]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,COLOR_GREY,"Dieser Spieler ist nicht online.");
    if(pID == playerid)return SendClientMessage(playerid,COLOR_GREY,"Du kannst dich nicht selbst beobachten.");
    TogglePlayerSpectating(playerid,1);
    PlayerSpectatePlayer(playerid, pID);
    format(string,sizeof(string),"Du beobachtest nun Spieler: %s.",PlayerName(pID));
    SendClientMessage(playerid,COLOR_BLUE,string);
    return 1;
    }
    Sollte schon so aussehen.


    Nur bedenke, das die Spieler sich in der gleichen Virtuellen Welt und im selben Interior befinden müssen.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ich kann den Befehl irgendwie nur mit der ID des Spielers ausführen, also statt: /tv Aviero muss ich die ID nehmen, also bspw: /tv 88. Möchte jedoch, dass beides funktioniert.


    und..


    habe mal probiert das in einen Befehl zu packen, hat auch funktioniert, will jedoch, dass die Person die Tvt hat wieder in seine Ausgangsposition (die Position, von wo er angefangen hat zu tvn) gesetzt wird.
    Ich weiß, dass ich die Koordinaten des Spielers in einer Variable speichern muss, weiß jedoch nicht richtig wie ich das umsetzen soll.


    Danke im Voraus :)


    Aktueller Befehl:



    ocmd:tv(playerid,params[])
    {
    if(isAdmin(playerid,1))
    {
    if(GetPVarInt(playerid, "tvmodus") == 0){
    new pID,string[128];
    if(sscanf(params,"i",pID))return SendClientMessage(playerid,COLOR_GREY,"Verwendung: /tv [Spieler]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,COLOR_GREY,"Dieser Spieler ist nicht online.");
    if(pID == playerid)return SendClientMessage(playerid,COLOR_GREY,"Du kannst dich nicht selbst beobachten.");
    TogglePlayerSpectating(playerid,1);
    PlayerSpectatePlayer(playerid, pID);
    format(string,sizeof(string),"Du beobachtest nun Spieler: %s.",PlayerName(pID));
    SendClientMessage(playerid,COLOR_BLUE,string);
    SetPVarInt(playerid,"tvmodus",1);
    }else{
    TogglePlayerSpectating(playerid,0);
    SetCameraBehindPlayer(playerid);
    SendClientMessage(playerid,COLOR_BLUE,"Du hast die Beobachtung beendet.");
    SetPVarInt(playerid,"tvmodus",0);
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREY,"Du darfst diesen Befehl nicht benutzen.");
    }
    return 1;
    }

  • Kann man das irgendwie abkürzen?


    if(sInfo[i][pFrak] == 6 || sInfo[i][pFrak] == 7 || sInfo[i][pFrak] == 8 || sInfo[i][pFrak] == 9 || sInfo[i][pFrak] == 10 || sInfo[i][pFrak] == 11 || sInfo[i][pFrak] == 12 || sInfo[i][pFrak] == 13)



    @Aviero
    das "i" in der sscanf abfrage zu einem "u".


    Und die Koordinaten würde ich (könnte man) mit PVarFloat speichern und danach wieder setzen.

    Mit freundlichen Grüßen,
    Derakar

  • Beitrag von Derakar ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • do.de - Domain-Offensive - Domains für alle und zu super Preisen