Beiträge von Kasakow

    Jap, API.isPlayerShooting(Client player) & player.isShooting funktionieren einfach nicht, dann muss wohl auf eine Fehlerkorrektur gewartet werden, traurig aber wahr :)

    Nein, nehme an dass es sich um einen Fehler in der API handelt, was ziemlich schade ist.
    Ich habe daraufhin einen Bugreport in deren Bugtracker eingereicht.

    Ich benutze die Modifikation 'GT-MP', man kann in der Mod Bootstrap und eigene Styles einbinden. (Quasi modernere Dialoge als wie in SA-MP) Hab ich schon auf 2-3 Gameservern gesehen ;)

    Tag, hätte mal eine Frage auf das Thema Javascript und CSS bezogen
    Beispielsweise, ich möchte ein Login & Register Fenster einbauen, ein schön gestaltetes Fenster, basiert auf JS & CSS. (und html)
    Wie geh ich da am besten vor ? ^^

    Daran wird es nicht liegen, habe versucht mir eine Nachricht ausgeben zu lassen um genau das zu Testen.
    Er erkennt nicht einmal, dass ich gerade geschossen habe beispielsweise.
    Habs dann mit einer anderen Schleife probiert und einer anderen weise der Erkennung des Schusses probiert.


    -> CODE <-


    //EDIT -> Ohne die Abfrage erstellt er Explosionen auf den gezielten Punkten.

    @LuckyPatcher Das war von der Schleife.
    Es funktioniert übrigens nicht ganz, hab zwar keine Fehler beim Compilen aber Ingame passiert nichts wenn ich schieße, aber ich weis dass das Callback oben aufgerufen wird.


    -> /explodegun <-


    -> Update <-

    Hey, probiere dort eine Explosion zu erstellen wo hingeschossen wurde, habe dort aber ein kleines Problem mit Vector3.


    -> Fehler <-


    -> CODE <-

    Bitte auf keinen Fall einen SELECT * ohne Bedingung auf die komplette Tabelle machen, das ist komplett am Sinn vorbei und überhaupt nicht performant! Wenn in der Datenbank 50.000 registrierte Spieler stehen, dann werden alle 50.000 Datensätze an den Server gesendet, das macht keinen Sinn.


    Um nur die Anzahl der Datensätze zu erhalten, reicht es, wie Douq auch schon sagte, einen SELECT COUNT zu machen, damit bekommt man genau einen Datensatz mit einem Wert zurück, anstatt die komplette Tabelle.

    Danke für die Korrektur, schon richtig was du schreibst, Jeffry :thumbup:

    Tag leute, wollte mal fragen ob mir hier jemand weiterhelfen kann?
    Ich wollte einen einfachen /vehicle Command erstellen, aber es wird kein Fahrzeug erstell, genauso wenig wird eine Nachricht ausgegeben dass bereits ein Fahrzeug erstellt wurde.


    new GetGuys = 0; //oben ins script
    stock GetRegisteredGuy() //Zählen
    {
    mysql_pquery(dbhandle, "SELECT * FROM `accounts`", "@UpdateGuys", "");
    return 1;
    }
    @UpdateGuys();
    @UpdateGuys() //Updaten
    {
    cache_get_row_count(GetGuys);
    return 1;
    }


    Musst du halt noch auf deinen Code anpassen, nutzen lässt sich das ganze recht einfach.



    ocmd:getregguys(playerid)
    {
    new string[64]; //string erstellen
    GetRegisteredGuys(); //Accounts zählen lassen und in variable 'GetGuys' setzen
    format(string, sizeof string, "Auf dem Server sind derzeit %d Spieler.", GetGuys), //String formatieren
    SendClientMessage(playerid, -1, string); //Nachricht in weis ausgeben
    return 1;
    }

    Probiere dich doch mal daran zu orentieren was ich oben geschrieben hatte, zeig halt mal her wie du die Accounts speichern lässt. Quasi deine Speicherfunktion, Ladefunktion und Spielervariable.

    Würde für die Fraktionen am besten eine Spalte in der Datenbank hinzufügen, wo du alles rundum Spieleraccount verwaltest.


    simple - Erklärung

    schritt 2:


    Natürlich musst du den Wert 'Fraktion' auch speichern und auslesen lassen.




    //auslesen
    PlayerInfo[playerid][pFraktion] = cache_get_field_content_int(0, "Fraktion", dbhandle); //Muss natürlich auf dein Script angepasst werden



    Auf jeden Fall um zur Funktion zu kommen die den Fraktionsnamen ausgibt.




    stock FraktionsName(playerid)
    {
    new fraktname[50];
    switch(PlayerInfo[playerid][pFraktion])
    {
    case 0:{fraktname="Keine";}
    case 1:{fraktname="S.A.P.D";}
    case 2:{fraktname="F.B.I";}
    case 3:{fraktname="San Andreas Emergency Department";}
    case 4:{fraktname="Las Venturas Vagos";}
    case 5:{fraktname="Grove Street";}
    case 6:{fraktname="San Andreas Army";}
    case 7:{fraktname="Saint Jefferson Ballas";}
    case 8:{fraktname="Terroristen";}
    case 9:{fraktname="Yakuza";}
    case 10:{fraktname="San Andreas News Corporation";}
    case 11:{fraktname="Traffic Authority of San Andreas";}
    case 12:{fraktname="La Cosa Nostra";}
    case 13:{fraktname="Varrios Los Aztecas";}
    case 14:{fraktname="San Andreas Driving School";}
    case 15:{fraktname="San Andreas Electrical Service";}
    case 16:{fraktname="Goverment of San Andreas";}
    case 17:{fraktname="Russische Mafia";}
    case 18:{fraktname="United Turks";}
    case 19:{fraktname="Hitman Agency";}
    default:{fraktname="ERROR";}
    }
    return fraktname;
    }

    Du speicherst doch sicherlich den Account in der Datenbank mit einem Datensatz der entweder ein Text ist ("Name" z.B) oder anhand einer SQL ID die jedem Spieler zugewiesen ist, wüsste sonst nicht wie du deine Accounts speichern lässt.

    Bei einer Switch-Funktion musst du bei case immer einen break nutzen.
    Wenn du am Ende der Anweisung kein break setzt, so wird die Ausführung mit dem nächsten case fortgesetzt.
    Dadurch wird dir der letzte case ausgegeben.

    Er muss nicht immer break hinzufügen, das beendet dann nur das Fragen der anderen Sachen, was nicht unbedingt dumm ist wenn er eh schon sein Ergebnis hat, aber zwingend ist es nicht.


    Wäre das gleiche wie :



    stock Datencheck(datacheck[])
    {
    new abgleich[40] = "Banane";
    if(!strcmp(datacheck, abgleich, true))
    {
    print("Datenabgleich erfolgt, stimmt überein!");
    }
    if(strcmp(datacheck, abgleich, true))
    {
    print("Datenablgleich erfolgt, stimmt nicht überein!");
    }
    return 1;
    }

    Auch wenn datacheck "Banane" wäre, würde er unten nochmal prüfen ob datacheck nicht "Banane" ist, und dass weil man das ganze nicht stoppt, sobald eine Übereinstimmung statt findet. Aber die funktion an sich, kann er so lassen eigentlich.