Beiträge von Simon

    ich kann mal die komplette Debug senden, da steht drinne das er die Tankstellen für Fahrzeuge alle sauber reinsetzt, was ich auch dann hinterher in der Datenbank sehe aber dann bei den Flugzeug Tankstellen nicht.


    OnGameModeInit()
    {
    for(new i = 0; i < sizeof Tanken; i++)
    {
    new dstr[300],zeitstr[20],bstr[30];
    if(!mysql_CheckAutoTanke(i)) mysql_CreateAutoTanke(i);
    else
    {
    format(Tanken[i][Besitzer],MAX_PLAYER_NAME,"%s",mysql_GetString("Tankstelle_Fahrzeug", "Besitzer", "PSName", Tanken[i][PSName]));
    format(Tanken[i][robname],MAX_PLAYER_NAME,"%s",mysql_GetString("Tankstelle_Fahrzeug", "robname", "PSName", Tanken[i][PSName]));
    Tanken[i][Kasse] = mysql_GetInt("Tankstelle_Fahrzeug", "Kasse", "PSName", Tanken[i][PSName]);
    Tanken[i][Literpreis] = mysql_GetInt("Tankstelle_Fahrzeug", "Literpreis", "PSName", Tanken[i][PSName]);
    Tanken[i][Benzin] = mysql_GetInt("Tankstelle_Fahrzeug", "Benzin", "PSName", Tanken[i][PSName]);
    Tanken[i][Zeit] = mysql_GetInt("Tankstelle_Fahrzeug", "Zeit", "PSName", Tanken[i][PSName]);
    Tanken[i][robtime] = mysql_GetInt("Tankstelle_Fahrzeug", "robtime", "PSName", Tanken[i][PSName]);
    Tanken[i][nextrobtime] = mysql_GetInt("Tankstelle_Fahrzeug", "nextrobtime", "PSName", Tanken[i][PSName]);
    }
    }
    for(new i = 0; i < sizeof Flugzeugtanken; i++)
    {
    new dstr[300],zeitstr[20],bstr[30];
    if(mysql_CheckFlugTanke(i) == 0) mysql_CreateFlugTanke(i);
    else
    {
    format(Flugzeugtanken[i][Besitzer],MAX_PLAYER_NAME,"%s",mysql_GetString("Tankstelle_Flugzeug", "Besitzer", "PSName", Flugzeugtanken[i][PSName]));
    format(Flugzeugtanken[i][robname],MAX_PLAYER_NAME,"%s",mysql_GetString("Tankstelle_Flugzeug", "robname", "PSName", Flugzeugtanken[i][PSName]));
    Flugzeugtanken[i][Kasse] = mysql_GetInt("Tankstelle_Flugzeug", "Kasse", "PSName", Flugzeugtanken[i][PSName]);
    Flugzeugtanken[i][Literpreis] = mysql_GetInt("Tankstelle_Flugzeug", "Literpreis", "PSName", Flugzeugtanken[i][PSName]);
    Flugzeugtanken[i][Benzin] = mysql_GetInt("Tankstelle_Flugzeug", "Benzin", "PSName", Flugzeugtanken[i][PSName]);
    Flugzeugtanken[i][Zeit] = mysql_GetInt("Tankstelle_Flugzeug", "Zeit", "PSName", Flugzeugtanken[i][PSName]);
    Flugzeugtanken[i][robtime] = mysql_GetInt("Tankstelle_Flugzeug", "robtime", "PSName", Flugzeugtanken[i][PSName]);
    Flugzeugtanken[i][nextrobtime] = mysql_GetInt("Tankstelle_Flugzeug", "nextrobtime", "PSName", Flugzeugtanken[i][PSName]);
    }
    }
    return 1;
    }

    Guten Tag


    Ich habe Tankstellen für Fahrzeuge und Tankstellen für Flugobjekte.
    Beide sind im prinzip gleich aufgebaut, haben aber 2 verschiedene Tabellen.
    Die Tabelle mit den Fahrzeug Tankstellen wird vernünftig gefüllt, die mit den Flugzeug Tankstellen nicht.
    Warum? Mir ein Rätsel.


    Folgendes steht in der Debug:

    Code
    [14:48:37] >> mysql_num_rows( Connection handle: 1 )
    [14:48:37] CMySQLHandler::NumRows() - You cannot call this function now. (Reason: Dead Connection)
    [14:48:37] >> mysql_real_escape_string( Connection handle: 1 )
    [14:48:37] CMySQLHandler::EscapeString(Las Venturas Airport Petrol Station); - Escaped 35 characters to Las Venturas Airport Petrol Station.
    [14:48:37] >> mysql_query( Connection handle: 1 )
    [14:48:37] CMySQLHandler::Query(INSERT INTO Tankstelle_Flugzeug (PSName) VALUES ('Las Venturas Airport Petrol Station')) - An error has occured. (Error ID: 2014, Commands out of sync; you can't run this command now)


    folgend füge ich das in meine Tabelle ein:
    stock mysql_CreateAutoTanke(tankenid)
    {
    new query[512];
    mysql_real_escape_string(Tanken[tankenid][PSName], Tanken[tankenid][PSName]);
    format(query, sizeof(query), "INSERT INTO Tankstelle_Fahrzeug (PSName) VALUES ('%s')", Tanken[tankenid][PSName]);
    mysql_query(query);
    return true;
    }


    stock mysql_CreateFlugTanke(tankenid)
    {
    new query[512];
    mysql_real_escape_string(Flugzeugtanken[tankenid][PSName], Flugzeugtanken[tankenid][PSName]);
    format(query, sizeof(query), "INSERT INTO Tankstelle_Flugzeug (PSName) VALUES ('%s')", Flugzeugtanken[tankenid][PSName]);
    mysql_query(query);
    return true;
    }


    Liebe Grüße

    Guten Tag


    Ich bin mir nicht sicher ob dies der richtige Bereich ist...


    Ich bräuchte einmal eure Hilfe bezüglich Beziehungen in SQL via phpMyAdmin.
    Meine Datenbank bezieht sich auf SAMP, falls Beziehungen unnötig oder störend sind dann hat sich das eigentlich erledigt.


    Und zwar habe ich als Beispiel 2 Datenbanken: Tankstellen und User.
    In der Tabelle user wird halt alles mögliche vom User gespeichert. in der Tabelle Tankstellen wird alles mögliche zu der jeweiligen Tankstelle gespeichert, zum Beispiel der Besitzer der Tankstelle.


    Ich möchte nun eine Beziehung zwischen 2 Tabellen hinzufügen. Und zwar soll sich der Besitzer auf den Primär Schlüssel der User (Nickname) beziehen.
    Dies soll bewirken das ich den besitzer jederzeit löschen kann, jedoch nicht den User, falls dieser irgentwo als Besitzer steht, zumindest nicht ohne ihn vorher als Besitzer zu löschen.


    Das erste was ich mich frage: Wie müssen die Beziehnung eigentlich genau gemacht werden. ich kenne mich da nicht so super aus.
    Die nächste Frage wäre dann: ist es möglich, das wenn ich den User lösche und dieser als Besitzer einer Tanke eingetragen ist und sich somit auf den Primary vom User bezieht, dass ich dann den Wert vom Besitzer auf einen bestimmten Wert setze?


    Ich hoffe ihr habt verstanden was ich meine und könnt mir helfen.


    Liebe Grüße

    achsoo da war der haken..


    Du musst die die normale X-Y-Z-Achse ändern damit sich die rotation bei MoveObject langsam bewegt und nicht setzt? Was ein scheiß :D
    Auch wieder was dazu gelernt.

    Man versteht kein Wort von dem was du sagst.


    Also ich glaube du willst das Objekt nicht nur auf x,y,z-Achse Bewegen sondern auch rotieren lassen, das heißt die Rot. Achsen von einer Position in eine andere bewegen lassen, zum beispiel eine Schranke öffnen oder schließen.


    Ich weiß nicht ob es bisher ein Fehler meinerseits war oder es von SAMP so gemacht ist aber du kannst zwar in der Funktion MoveObject die rot-x,y,z angeben aber bewegen tut er sie nicht sondern "setzen" wie bei SetObjectRot.
    Ich habe das damals mit einer eigenen Funktion gelöst wo die Objekte dann auch rotiert sind und nicht auf ein schlag gesetzt wurden, indem ich immer wieder die rot-Achsen um ein kleines Stück in Richtung "Ziel" gesetzt habe.


    Ich hoffe ich habe dich richtig verstanden und das war was du meinst

    Wenn du das in deinem GameMode haben möchtest musst du das sowieso einbauen und all sowas.


    Ich gebe dir mal ein Tipp in dem ich dir sage wie ich das gelöst habe:


    Ich habe in meiner MySQL Datenbank folgende Spalten erstellt: tBanTime & tBanDate.
    Nun habe ich InGame ein Befehl geschrieben in dem man mit /tban jemand für eine gewisse Anzahl von Stunden bannt.
    Ich habe dann 2 eigene Funtkionen geschrieben, die mir errechnen wann der Bann aufgehoben sein wird.
    Beispiel:


    gebannt: 20:00 am 01.01.2013 Für 50 Stunden.
    Meine Funktionen rechnen nun:


    20:00 + 50 = 70:00
    70:00 > 24 also 70-24 = 46
    46 > 24 also 46-24 = 22
    22 < 24 also ist er um 22:00 Uhr wieder entbannt.


    Nun das Datum:
    er rechnet mit einer while Schleife immer eine Stunde auf die aktuelle Zeit und sobald die Zeit auf 24 ist, wird sie auf 0 gesetzt und der Tag um ein höher. das selbe dann auch mit Monaten und Jahren. Bis die Stundenzahl auf 0 ist.
    So hast du dann ein Datum und eine Uhrzeit wann der Spieler entbannt ist. du musst also nur noch beim connecten Abfragen ob die jetztige Zeit "vor" oder "nach" der gebannten Zeit ist, was ich ebenfalls mit einer eigenen Funktion gelöst habe.


    Im ganzen einfach nur ein bisschen Rechnen.

    Oder wenn der Spieler den Punkt ruhig "sehen" darf kannst du dir die ganze Timer- "Scheisse" sparen und es entweder mit einem Pickup machen oder mit einem Checkpoint.
    Mit dem Pickup wäre es ganz einfach, du müsstes als Spawn Typ nur vernünftig anpassen, d.h. wenn das nur kommen soll wenn er in einem Fahrzeug sitzt wäre es Spawn Typ 14.
    Ansonsten halt einen Checkpoint setzen.


    Wenn du Tatsächlich einfach ein Punkt haben willst, wo weder ein Checkpoint, ein Pickup oder sonst irgentetwas angezeigt wird, wäre das hier eine Lösung:


    forward PointCheck();


    OnGameModeInit()
    {
    SetTimer("PointCheck", 500, 1) //Die 500 sind millisekunden, jenachdem wie groß die range ist kann man die verändern und anpassen.
    return 1;
    }


    public PointCheck()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i) /*Weitere Verbindungs Abfragen */) continue;
    if(IsPlayerInRangeOfPoint(i,x,y,z,range)) //Was passieren soll
    else if(IsPlayerInRangeOfPoint(i, x, y, z, range)) //Ein anderer Punkt wo was passieren kann dafür brauchste keinen 2. Timer
    }
    return 1;
    }

    Ich mag den Lokalen Chat nicht :(


    Also habe versucht den Lokalen Chat auszuschalten und anstelle davon einen sozusagen "Selfmade" lokalen chat zu machen.
    hat ja auch geklappt nur habe ich eine Zeile eingeügt, die bei einem "Mute" dem Spieler das schreiben verhindern soll.
    Das klappt auch, nur wird jetzt der standard lokale Chat wieder gesendet :(


    Hier mal mein Code:


    public OnPlayerText(playerid, text[])
    {
    if(Spieler[playerid][Mute] > 0) return SendClientMessage(playerid,COLOR_GREY,"Sie sind gemutet!"); //Die Zeile wurde eingefügt
    new Float:x, Float:y, Float:z, String[150];
    GetPlayerPos(playerid, x, y, z);
    format(String, sizeof String, "%s sagt: %s", pName[playerid], text);
    SetPlayerChatBubble(playerid, text, 0xFF0000FF, 31.0, 10000);
    SendClientMessage(playerid, COLOR_DISTANCE_1, String);
    for(new i = 0; i <= MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i) || !GetPVarBool(i,"LoggedIn") || IsPlayerNPC(i) || i == playerid) continue;
    if(GetPlayerInterior(i) != GetPlayerInterior(playerid) || GetPlayerVirtualWorld(i) != GetPlayerVirtualWorld(playerid)) continue;
    if(IsPlayerInRangeOfPoint(i, 5.0, x, y, z)) SendClientMessage(i, COLOR_DISTANCE_1, String);
    else if(IsPlayerInRangeOfPoint(i, 10.0, x, y, z)) SendClientMessage(i, COLOR_DISTANCE_2, String);
    else if(IsPlayerInRangeOfPoint(i, 16.0, x, y, z)) SendClientMessage(i, COLOR_DISTANCE_3, String);
    else if(IsPlayerInRangeOfPoint(i, 23.0, x, y, z)) SendClientMessage(i, COLOR_DISTANCE_4, String);
    else if(IsPlayerInRangeOfPoint(i, 31.0, x, y, z)) SendClientMessage(i, COLOR_DISTANCE_5, String);
    }
    return 0; //Damit er den Lokalen Chat nicht senden
    }

    wenn das auto nicht durch einen spieler kaputt geht kommt da meistens eine unfassbare killerid raus. Musst vorher abfragen ob killerid != INVALID_PLAYER_ID ist. Oder wenn das nicht klappt, ob die killerid eigentlich aufn Server ist.