Beiträge von #save

    Wobei Chris. ich eine (meiner Meinung nach) bessere Methode habe. Würde das ganze unter OnPlayerEnterVehicle reinpacken und in einer for- Schleife durchgehen lassen, da wenn es zu viele for- Schleifen nach einander sind, es oft passieren kann das bei der 4ten for- Schleife die anderen for- Schleifen nicht mehr beachtet werden können.


    Würde einmal unter OnPlayerEnterVehicle die Spielerposition des Spielers abrufen und wenn er nicht in das Auto rein darf ihn wieder zu der Stelle zurück porten. So vermeidet man schonmal das der Spieler sich nicht mal mehr rein setzen kann. Hatte das früher auch unter OnPlayerStateChange, muss aber ehrlich sagen, dass OnPlayerEnterVehicle finde ich in diesem Falle besser ist.


    Klärt mich auf fals ich falsch liege ^^

    Danke euch allen, ich wollte noch am selben Tag noch antworten weil ich noch was testen wollte und dann bei einem eventuellen Problem mich nochmal hier melden. Aber gut, ich habe es dann doch vergessen. Jetzt ist es mir aber wieder eingefallen. Also danke nochmal ^^

    Guten Abend,


    ich habe gerade ein ziemliches Problem. Ich habe gerade einen sehr großen Denkfehler/Blackout und sitze verzweifelt an einer simplen Rechung drann.


    Warning:

    Code
    warning 213: tag mismatch


    Zeile:
    fuelPrice = fuelNew * TANKEN_PRICE;


    Pawn-Code komplett:

    ocmd:tanken (playerid, params[])
    {
    new money, fuelPrice, fuel[10], fuelMax[10], query[180], string[256];
    new Float:fuelNew;

    if (IsPlayerInRangeOfPoint(playerid, 5.0, 1004.2894, -940.3350, 42.1797) || IsPlayerInRangeOfPoint(playerid, 5.0, 1003.6624, -933.5280, 42.1797))
    {
    if (!IsPlayerInAnyVehicle(playerid))
    {
    SendClientMessage(playerid, red, "Du musst in einem Fahrzeug sitzen!");
    }
    else
    {
    if (GetVehicleModel(GetPlayerVehicleID(playerid)) == 509 || GetVehicleModel(GetPlayerVehicleID(playerid)) == 481 || GetVehicleModel(GetPlayerVehicleID(playerid)) == 510)
    {
    SendClientMessage(playerid, red, "Du kannst ein Fahrrad nicht betanken!");
    }
    else
    {
    if (VehicleEngine[GetPlayerVehicleID(playerid)] == true)
    {
    SendClientMessage(playerid, red, "Bitte schalte zuerst den Motor ab!");
    }
    else
    {
    format(query, sizeof(query), "SELECT * FROM users_cars WHERE ingameID = %d", GetPlayerVehicleID(playerid));
    mysql_query(query);
    mysql_store_result();

    if (mysql_num_rows())
    {
    mysql_fetch_field("fuel", fuel);
    mysql_fetch_field("fuelMax", fuelMax);
    mysql_free_result();

    fuelNew = floatstr(fuelMax) - floatstr(fuel);
    fuelPrice = fuelNew * TANKEN_PRICE;

    money = GetPVarInt(playerid, "playerMoney") - fuelPrice;
    SetPlayerMoney(playerid, money);

    format(string, sizeof(string), "* Du hast dein Fahrzeug mit %f Liter für $%d Dollar betankt!", fuelNew, money);
    SendClientMessage(playerid, lightblue, string);

    format(string, sizeof(string), "UPDATE users_cars SET fuel = '%f' WHERE ingameID = %d", fuelMax, GetPlayerVehicleID(playerid));
    mysql_query(query);
    }
    else
    {
    mysql_free_result();
    SendClientMessage(playerid, red, "Du kannst nur Privatfahrzeuge betanken!");
    }
    }
    }
    }
    }
    else
    {
    SendClientMessage(playerid, red, "Du bist nicht in der Nähe einer Tankstelle");
    }

    return 1;
    }


    TANKEN_PRICE wurde oben im Script mit dem Wert 15 festgelegt.


    Wo liegt hier mein Denkfehler ?


    Danke schonmal im Voraus für eure Hilfe :)

    Normal das ich jetzt 16 Warnings habe ? (Eigentlich 20 aber 4 sind noch wegen etwas anderes):


    Kopf im Script:

    new PlayerText:WantedStarTextDraw[MAX_PLAYERS];
    new PlayerText:WantedLevelTextDraw[MAX_PLAYERS];


    Dann habe ich jetzt das aus OnGameModeInit gelöscht:

    // Wanted Stern Anzeige erstellen
    WantedStarTextDraw = TextDrawCreate(498.3, 102, "]");
    TextDrawFont(WantedStarTextDraw, 0);
    TextDrawTextSize(WantedStarTextDraw, 50.0, 100.0);
    TextDrawLetterSize(WantedStarTextDraw, 0.5, 2.0);
    TextDrawSetOutline(WantedStarTextDraw , true);
    TextDrawSetShadow(WantedStarTextDraw, 0);
    TextDrawColor(WantedStarTextDraw, gold);

    // Wanted Level Anzeige erstellen
    WantedLevelTextDraw = TextDrawCreate(520, 102, "0");
    TextDrawFont(WantedLevelTextDraw , 3);
    TextDrawLetterSize(WantedLevelTextDraw , 0.3, 1.8999999999999995);
    TextDrawColor(WantedLevelTextDraw , white);
    TextDrawSetOutline(WantedLevelTextDraw , true);
    TextDrawSetProportional(WantedLevelTextDraw , true);
    TextDrawSetShadow(WantedLevelTextDraw , 0);


    Habe dann das ganze in OnPlayerConnect eingefügt und modifiziert:

    // Wanted Stern Anzeige erstellen
    WantedStarTextDraw[playerid] = TextDrawCreate(498.3, 102, "]");
    TextDrawFont(WantedStarTextDraw[playerid], 0);
    TextDrawTextSize(WantedStarTextDraw[playerid], 50.0, 100.0);
    TextDrawLetterSize(WantedStarTextDraw[playerid], 0.5, 2.0);
    TextDrawSetOutline(WantedStarTextDraw[playerid], true);
    TextDrawSetShadow(WantedStarTextDraw[playerid], 0);
    TextDrawColor(WantedStarTextDraw[playerid], gold);


    // Wanted Level Anzeige erstellen
    WantedLevelTextDraw[playerid] = TextDrawCreate(520, 102, "WantedLevel");
    TextDrawFont(WantedLevelTextDraw[playerid], 3);
    TextDrawLetterSize(WantedLevelTextDraw[playerid], 0.3, 1.8999999999999995);
    TextDrawColor(WantedLevelTextDraw[playerid], white);
    TextDrawSetOutline(WantedLevelTextDraw[playerid], true);
    TextDrawSetProportional(WantedLevelTextDraw[playerid], true);
    TextDrawSetShadow(WantedLevelTextDraw[playerid], 0);


    Und das hier ist meine neue Public Funktion:

    public WantedsCheck()
    {
    new string[3];

    for (new i = 0; i <= MAX_PLAYERS; i++)
    {
    if (IsPlayerConnected(i))
    {
    if (GetPVarInt(i, "wanteds") != 0)
    {
    TextDrawShowForPlayer(i, WantedStarTextDraw[i]);

    format(string, sizeof(string), "%i", GetPVarInt(i, "wanteds"));
    TextDrawSetString(WantedLevelTextDraw[i], string);
    PlayerTextDrawShow(i, WantedLevelTextDraw[i]);
    }
    else
    {
    PlayerTextDrawHide(i, WantedStarTextDraw[i]);
    PlayerTextDrawHide(i, WantedLevelTextDraw[i]);
    }
    }
    }
    }


    Warnings sind immer gleich:

    Code
    warning 213: tag mismatch


    Genau wie bei meinem anderen Problem (hat nichts hier mit dem Problem zu tun). Die Warnings befinden sich in jeder Zeile in der WantedStarTextDraw oder WantedLevelTextDraw befindet.

    Guten Tag,


    ich habe 2 TextDraws im Kopf des Scripts wie folgt definiert:

    new Text:WantedStarTextDraw;
    new Text:WantedLevelTextDraw;


    Dann habe ich die 2 TextDraws unter OnGameModeInit modifiziert und einen Timer festgelegt:

    // Wanted Stern Anzeige erstellen
    WantedStarTextDraw = TextDrawCreate(498.3, 102, "]");
    TextDrawFont(WantedStarTextDraw, 0);
    TextDrawTextSize(WantedStarTextDraw, 50.0, 100.0);
    TextDrawLetterSize(WantedStarTextDraw, 0.5, 2.0);
    TextDrawSetOutline(WantedStarTextDraw , true);
    TextDrawSetShadow(WantedStarTextDraw, 0);
    TextDrawColor(WantedStarTextDraw, gold);

    // Wanted Level Anzeige erstellen
    WantedLevelTextDraw = TextDrawCreate(520, 102, "0");
    TextDrawFont(WantedLevelTextDraw , 3);
    TextDrawLetterSize(WantedLevelTextDraw , 0.3, 1.8999999999999995);
    TextDrawColor(WantedLevelTextDraw , white);
    TextDrawSetOutline(WantedLevelTextDraw , true);
    TextDrawSetProportional(WantedLevelTextDraw , true);
    TextDrawSetShadow(WantedLevelTextDraw , 0);


    SetTimer("WantedsCheck", 500, true);


    Dann habe ich die Public Funktion so aufgebaut:

    public WantedsCheck()
    {
    new string[3];

    for (new i = 0; i <= MAX_PLAYERS; i++)
    {
    if (IsPlayerConnected(i))
    {
    if (GetPVarInt(i, "wanteds") != 0)
    {
    TextDrawShowForPlayer(i, WantedStarTextDraw);

    format(string, sizeof(string), "%i", GetPVarInt(i, "wanteds"));
    TextDrawSetString(WantedLevelTextDraw, string);
    TextDrawShowForPlayer(i, WantedLevelTextDraw);
    }
    else
    {
    TextDrawHideForPlayer(i, WantedStarTextDraw);
    TextDrawHideForPlayer(i, WantedLevelTextDraw);
    }
    }
    }
    }


    Die Frage ist eigentlich ganz simpel aber ich komme damit nicht klar irgendwie. Mein Problem ist einfach das ich für jeden Spieler eine individuelle Anzeige von WantedLevelTextDraw geben möchte. Nicht jeder Spieler hat nicht die selben Wanteds (wenn überhaupt welche).


    Ich habe praktisch das Problem das wenn ich Wanteds habe und ich vergebe jemand Wanteds, dass bei mir und ihm seine Wanteds angezeigt werden. Bei mir sollen meine Wanteds stehen und bei ihm seine Wanteds. Wenn er garkeine hat soll er WantedStarTextDraw und WantedLevelTextDraw nicht sehen können. Dachte eigentlich das es so funktioniert wie ich das aufgebaut habe aber anscheinend doch nicht.

    Das hat nichts gebracht und davor ging es ebenfalls so das ich nur x, y, z eintragen muss. Steht so auch in der Wiki wenn ich es attachen will. x, y, z steht ja nur dafür wo es hin platziert werden soll (also an welche Position). Wenn es attached werden soll muss man x, y, z einfach nur festlegen und dann in die Funktion einbauen. Der Warning kommt ja auch nicht in der Zeile.


    Der Warning ist ja in Zeile 18.

    Guten Morgen,


    ich habe ein Problem mit OnPlayerStreamIn. Ich habe folgenden Code in OnPlayerStreamIn stehen:

    public OnPlayerStreamIn(playerid, forplayerid)
    {
    new PlayerText3D:labelid;
    new playername[MAX_PLAYER_NAME+1], pname[MAX_PLAYER_NAME+1];
    new fracname[30], query[180];
    new WantedTextLabel[30];
    new Float:x, Float:y, Float:z;

    GetPVarString(forplayerid, "fracname", fracname, sizeof(fracname));

    mysql_real_escape_string(playername, pname);

    if (GetPVarInt(playerid, "wanteds") != 0)
    {
    if (!strcmp("fbi", fracname, false) || !strcmp("lspd", fracname, false))
    {
    format(WantedTextLabel, sizeof(WantedTextLabel), "\n\n\n\n\n\nWanted-Level: %d", GetPVarInt(playerid, "wanteds"));
    labelid = CreatePlayer3DTextLabel(forplayerid, WantedTextLabel, lightblue, x, y, z, 30.0, playerid, INVALID_VEHICLE_ID, 0);

    format(query, sizeof(query), "INSERT INTO wanted_text_labels (playerid, forplayerid, labelid) VALUES (%d, %d, %d);", playerid, forplayerid, PlayerText3D:labelid);
    mysql_query(query);
    }
    }

    return 1;
    }


    Dann bringt mir der Compiler:

    Code
    warning 213: tag mismatch


    Ich habe den Fehlerklärbär gefragt und habe herausgefunden das ich anscheinend eine Variable falsch genutzt habe. Aber ich erkenne den Fehler einfach nicht. Welche Variable von den 3en habe ich falsch angewand ?

    // Lade alle Autos von der Datenbank
    mysql_query("SELECT * FROM vehicles WHERE ownerID = 0");
    mysql_store_result();


    while (mysql_fetch_row(sqldata))
    {
    // Speichere alle Daten ab
    mysql_fetch_field("vehicleID", carID);
    mysql_fetch_field("modelID", vehicleID);
    mysql_fetch_field("color1", color1);
    mysql_fetch_field("color2", color2);
    mysql_fetch_field("posX", positionX);
    mysql_fetch_field("posY", positionY);
    mysql_fetch_field("posZ", positionZ);
    mysql_fetch_field("posAngle", positionAngle);
    mysql_fetch_field("platetext", platetext);


    //SetVehicleNumberPlate(CreateVehicle(strval(vehicleID), strval(positionX), strval(positionY), strval(positionZ), strval(positionAngle), strval(color1), strval(color2), 0), platetext);
    ingameID = CreateVehicle(strval(vehicleID), strval(positionX), strval(positionY), strval(positionZ), strval(positionAngle), strval(color1), strval(color2), 0);


    format(query2, sizeof(query2), "UPDATE vehicles SET ingameID = %d WHERE vehicleID = %d", ingameID, carID);
    mysql_query(query2);
    }


    mysql_free_result();


    Ebenfalls das Problem das nur 1 Auto geladen wird. Und die IngameID wird ebenfalls nicht eingetragen.


    Auszug aus dem Log:

    Guten Tag,


    Lasst euch bitte nicht von diesem Text hier in die Irre führen. Der aktuelle Quell-Code findet ihr unten bei meinem Beitrag mit dem Titel "Veränderung". Danke an alle die mir helfen wollen.

    Spoiler anzeigen
    ich habe eine while-Schleife die bei OnGameModeInit immer geladen wird. In der while-Schleife werden alle eingetragenen Autos aus der Datenbank gelesen und auf dem Server hinzugefügt. Mein Problem ist jetzt, ich habe vor die ganzen ID's die die Autos In-Game haben in die Datenbank zu schreiben. Das sieht wie folgt aus:

    // Lade alle Autos von der Datenbank
    mysql_query("SELECT * FROM vehicles WHERE ownerID = 0");
    mysql_store_result();

    Spoiler anzeigen
    while (mysql_fetch_row_data())
    {
    // Speichere alle Daten ab
    mysql_fetch_field("vehicleID", carID);
    mysql_fetch_field("modelID", vehicleID);
    mysql_fetch_field("color1", color1);
    mysql_fetch_field("color2", color2);
    mysql_fetch_field("posX", positionX);
    mysql_fetch_field("posY", positionY);
    mysql_fetch_field("posZ", positionZ);
    mysql_fetch_field("posAngle", positionAngle);
    mysql_fetch_field("platetext", platetext);

    Spoiler anzeigen
    vehicleID = CreateVehicle(strval(vehicleID), strval(positionX), strval(positionY), strval(positionZ), strval(positionAngle), strval(color1), strval(color2), 0)
    format(query, sizeof(query), "UPDATE vehicles SET ingameID = %d WHERE vehicleID = %d", vehicleID, carID);
    mysql_query(query);
    }

    Spoiler anzeigen
    Jetzt habe ich das Problem das genau 1 Auto geladen wird, da dieser Code drinnen steht:

    format(query, sizeof(query), "UPDATE vehicles SET ingameID = %d WHERE vehicleID = %d", vehicleID, carID);
    mysql_query(query);

    Spoiler anzeigen
    Würde ich jetz den Code entfernen, werden alle Autos geladen. Aber ich muss ja auch an die ID der Autos kommen. Wie kann ich in eine MySQL SELECT while-Schleife ein MySQL Update noch einbauen ?