Beiträge von Douq

    Da bieten sich verschiedene Konstruktionen an. Bei der Variation ist es ja derzeit so, dass du den Code ab Zeile 10 nicht mehr weitergehst, da ein Fraktionsfahrzeug nach der Funktion getVehicleOwner == -1 ist. Es bietet sich an, genau an dieser Stelle auf das return zu verzichten, sondern lieber solch eine Konstruktion zu versuchen:



    Code
    if((vehicleOwner = getVehicleOwner(vehicleid, slot)) != -1) {
    // Spielerfahrzeugkram
    }
    else if((vehicleOwner = IsAFraktionsVeh(vehicleid)) != INVALID_PLAYER_ID) {
    // Fraktionskram
    }
    else {
    // Fehlermeldung, weder Spielerfahrzeug noch Fraktionsfahrzeug
    }

    Eventuell ergibt es in Hinblick der Ressourcennutzung eher Sinn, zuerst das auf Fraktionsfahrzeug und danach aufs Spielerfahrzeug zu überprüfen - aber Optimierungen können sich da sowieso vornehmen .. :D

    Dann verwende mal die Funktion getVehicleOwner() die ich oben genannt habe - funktioniert's dann?


    Die Abfrage in Zeile 4 musst du noch verschieben - sofern dieser Befehl auch für Spieler bei ihrem eigenen Fahrzeug gehen soll. Auch ist die Funktion PlayerIsAtAnyCar nicht sinnvoll, da man bei carinfo scheinbar eine vehicleID angeben muss. Da ergibt es mehr Sinn zu überprüfen, ob der Spieler im Radius des Fahrzeuges ist (was du bereits in Zeile 12 machst, deswegen kann die Abfrage raus).

    Also ich glaube der Code, der uns zurzeit zur Verfügung steht ist nicht aktuell? Angenommen die Funktion getVehicleOwner() sieht folgend aus:



    Code
    stock getVehicleOwner(vehicleid, &slot) {
        for(new i=0;i<GetMaxPlayers();i++) {
        	for(slot = 0; slot < MAX_PLAYER_VEHICLES; slot++) {
               if(vehicleid == PrivateVehicle[i][slot][vehID]) {
    				return i;
    			} 	
        	}
    	}
    	return -1;
    }

    Kann die Schleife in Zeile 8 weg und die Variable slot deklariert werden. Dann nur noch die erste Dimension des Arrays PrivateVehicle von playerid in vehicleOwner umändern und dann sollte das kein Problem mehr darstellen.


    Natürlich muss noch ein Check rein, dass der Spieler das Fahrzeug sehen kann, sofern es sein eigenes ist (sprich die Abfrage 4 nicht betrachten, wenn der vehicleOwner der playerID entspricht).

    In den Zeilen 13 + 33 und 38 + 58 sind die geschweiftem Klammern nicht notwendig


    +


    Das liegt daran, dass dein Code weiterläuft obwohl du bereits eine Pflanze platzierst hast. Füge einmal ein return 1 hinzu wo du auch die Drogensamen auf 0 setzt.

    Sieht echt gut aus. Mir gefällt der Style. Wenigstens mal nicht dieser typische Bankautomat den es auf jeden Server gibt.


    Aber ich würde besser finden, wenn die Spieler zu Bank fahren müssen zum einzahlen, ist ja letztendlich in der Realität nicht anders.

    Es gibt auch Bankautomaten, zu mindestens in Hamburg, wo auch eingezahlt werden kann. Sonst so weit interessantes System!

    weiss zwar nicht mehr wie es in PAWNO war aber in C# müsstest du nach jedem case ein break; setzen damit der auch wenn er in den case geht danach auch aufhört

    In PAWN ist das tatsächlich nicht notwendig / möglich.


    Füg mal in Zeile 559 eine geschleifte Klammer und schließe sie ggf. wieder unter der switch-case Anweisung (sofern nicht vorhanden, erkenne es durch die Formatierung nicht).

    Ich will halt das diese Nachricht [list=1][*]TSC_SendClientMessage(clientid, "Willkommen auf dem German-Reallife Teamspeak!");[*]TSC_SendClientMessage(clientid, "Um dich freizuschalten schreibe mir bitte deinen Ingame-Name!");[/list]


    nur kommt wenn man den Rang Gast hat und wenn man member ist eben nicht

    Naja, per sscanf2 kannst du die Zeichenkette ziemlich einfach teilen:


    Code
    new tsIDs[5];
    sscanf(data, "p<,>a<i>[5]", tsIDs);

    Dann sind die gruppenIDs in tsIDs, du musst lediglich noch per Schleife durchlaufen und überprüfen, ob das jeweilige Element gleich deiner gewünschten ID ist und falls ja -> keine Nachricht, falls nicht -> Nachricht.

    Uff ich glaube ich geh gleich erstmal schlafen und guck es mir dann an es geht gerade nicht in mein Kopf rein ^^

    Was denn genau? Also data könnte beispielsweise dann so aussehen "13,21,223,7" und um die 7 zu bekommen, musst du diese Zeichenkette aufteilen, um die rohe Zahl zu erhalten. Diese Zahl kannst du durch verschiedene Funktionalitäten bekommen: sscanf2 oder der split - Funktion. Nutzt du das sscanf2 Plugin?

    Moin mir ist bewusst das es falsch ist aber könnte mir das jemand erklären? ich will das wenn er die Servergruppe 7 hat das er keine nachricht mehr bekommt


    public TSC_OnClientConnect(clientid, nickname[]){TSC_QueryClientData(clientid,CLIENT_SERVER_GROUPS:7,"test");TSC_SendClientMessage(clientid, "Willkommen auf dem German-Reallife Teamspeak!");TSC_SendClientMessage(clientid, "Um dich freizuschalten schreibe mir bitte deinen Ingame-Name!");return 1;}

    Moin, der zweite Parameter erwartet nicht die GruppenID sondern ein Wert vom Tag TSC_CLIENT_QUERYDATA. Die 7 musst du entfernen. Der dritte und vierte Parameter sind zum einen die Bezeichnung des Callbacks und die Parameter, die du mit übergeben möchtest. Beispiel wäre:



    Code
    TSC_QueryClientData(clientid, CLIENT_SERVER_GROUPS,  "DeinCallback", "d", playerid);
    
    
    forward DeinCallback(playerid);
    public DeinCallback(playerid) {
    new data[128];
    TSC_GetQueriedData(data, 128);
    return 1;
    }

    In data befinden sich dann die GruppenIDs, welcher der client besitzt, getrennt durch Kommata. Um die reinen GruppenIDs zu bekommen, brauchst du entweder eine split-Funktion oder du nutzt sscanf2 / je nach dem was beliebt.

    Moin, die Include liefert die Funktion TSC_QueryClientData() mit:


    Code
    TSC_QueryClientData(clientid, TSC_CLIENT_QUERYDATA:data, const callback[], const format[] = "", {Float, _}:...);

    TSC_CLIENT_QUERYDATA wäre dann CLIENT_SERVER_GROUPS, welche dir einen String mit den GruppenIDs per Funktion TSC_GetQueriedData() zurück gibt. Du musst dann einfach im Skript deklarieren, welche GruppenID zu welcher deiner gewünschten Gruppe gehört.

    Tipps: Scripting-Probleme richtig erklären


    Uns fehlen einige Informationen, um dir vernünftig helfen zu können. Das Accountsystem scheint ja per MySQL abgewickelt zu werden - wie speicherst du die Accounts? Wir brauchen Code, um zu sehen wo der Fehler liegen könnte. Gibt der mysql_log Fehler aus? Starte ggf. den debug Modus wie im Thread oben beschrieben. Wird überhaupt irgendwo der Account gespeichert bzw. wird überhaupt ein Query zur Datensicherung an den Server gesendet?