/go mit Deaktiviersystem

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
  • Heyho,
    ich scripte für ein paar Freunde und mich einen kleinen Fun Server mit /go [ID] (Teleportieren) für jeden Spieler. Das klappt auch wunderbar, jedoch hab ich das Problem, ich will, dass jeder Spieler /go deaktivieren kann, so dass sich kein anderer mehr zu ihm teleportieren kann, das ganze mit dem befehl /gos. Daran scheiter ich leider, ich habs schon mit mehreren methoden geschafft, aber scheiter immer wieder.


    Oben hab ich die Variable
    new gos[MAX_PLAYERS] = "allowed";


    Bei den Befehlen (/go)
    if(strcmp(cmd, "/go", true ) == 0) {
    new tmp[256];
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) {
    CmdUsageMessage(playerid, "/go [Spieler]");
    return 1;
    }
    new Float:X, Float:Y, Float:Z;


    if(strcmp(gos[playerid], "allowed")) {
    if(GetPlayerVehicleID(playerid))
    {
    GetPlayerPos( strval(tmp), X, Y, Z );
    SetVehiclePos( GetPlayerVehicleID(playerid), X+2, Y+2, Z );
    new string[128], pname[40];
    GetPlayerName(idx, pname, sizeof(pname));
    format(string, sizeof(string), "Du hast dich zu %s teleportiert!", pname);
    InfoMessage(playerid, string);
    return 1;
    } else {
    GetPlayerPos( strval(tmp), X, Y, Z );
    SetPlayerPos( playerid, X+2, Y+2, Z );
    new string[128], pname[40];
    GetPlayerName(idx, pname, sizeof(pname));
    format(string, sizeof(string), "Du hast dich zu %s teleportiert!", pname);
    InfoMessage(playerid, string);
    return 1;
    }
    }
    else
    {
    InfoMessage(playerid, "Dieser Spieler hat Teleportation zu ihm deaktiviert!");
    return 1;
    }
    }


    Bei /gos
    if(strcmp(cmd, "/gos", true) == 0) {
    if(strcmp(gos[playerid], "allowed")) {
    gos[playerid] = "deny";
    InfoMessage(playerid, "Teleportation zu dir wurde für alle Spieler deaktiviert!");
    return 1;
    } else {
    gos[playerid] = "allowed";
    InfoMessage(playerid, "Teleportation zu dir wurde für alle Spieler aktiviert!");
    return 1;
    }
    }


    Jedoch klappt das nicht so ganz. Ich habs schon so hinbekommen, dass das an und ausschalten klappt, ich habs versucht zurück zu setzen jedoch bin ich da auch gescheitert.
    Wie würde es funktionieren? Hab schon bei Google geschaut, hab aber nichts gefunden, entweder gibts da nichts zu oder ich bin zu blöd dazu...


    Danke im Vorraus, LG!

  • new bool:gos[MAX_PLAYERS];


    if(strcmp(cmdtext,"/gos",true)==0)
    {
    if(gos[playerid]==false) gos[playerid]=true;
    else gos[playerid]=false;
    }


    if(strcmp(cmd,"/go",true)==0)
    {
    new id=strval(strtok(cmdtext,idx));
    if(gos[i]==true) return 1;
    //Teleportieren
    }

  • Hey,
    wie kommst du bei /go bei der If Abfrage auf "i", müsste ich da nicht idx schreiben? Hab schon länger nicht mehr gecoded und verlier langsam den überblick :(
    Naja, danke für die schnelle Antwort!


    Lg!


    #edit: Wenn ich dein Snippet benutze, crashed der Compiler

    Einmal editiert, zuletzt von doge_ ()

  • Hey,
    ja schon, ich habs schon zu id geändert, dennoch crashed der, nicht toll...


    Lg


    P.s.: Ich hab keine Ahnung worauf du hinaus willst, mit der Denkhilfe, ich komm immernoch nicht so wirklich weiter...

  • Eine Booleanvariable kann zwei Zustände haben: True & False.
    Wenn der Spieler den Befehl eingibt um das Teleportieren zu sich zu verbieten,
    setzt du seine Variable auf true.


    gos[playerid]=true;


    Bei dem Teleportbefehl musst du erst die ID herausbekommen,
    die der Spieler eingibt (Bsp: /go 5 -> Spieler ID 5, in Variable speichern).


    Und jetzt fragst du ab ob die Variable auf True ist, wenn,
    dann soll das Teleportieren verhindert werden:


    if(gos[id]==true) return 1;