Dynamisches Tankstellen System

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
  • Hi.


    Habe mal eine Frage. Ich habe eine MySQL Tabelle für meine ganzen Biz. Nun möchte ich gerne das bei dem Befehl /fill, er automatisch schaut ob man an einer Tankstelle ist. Da nun in der MySQL Tabelle mehrere Tankstellen hinterlegt sind, muss er ja auch schauen ob man an einer der vielen Tankstellen ist, wenn ja soll man Tanken können, wenn nein soll eine Fehlereldung kommen. Ich habe das ganze jetz mal so versucht:


    ocmd:fill(playerid, params[])
    {
    #pragma unused params
    new cord_x; new cord_z; new cord_z;
    cord_x = mysql_GetFloat("biz","PosX");
    cord_y = mysql_GetFloat("biz","PosY");
    cord_z = mysql_GetFloat("biz","PosZ");
    if(IsPlayerInRangeOfPoint(playerid, 5.0, cord_x, cord_y, cord_z))
    {
    if(!IsPlayerInAnyVehicle(playerid))
    {
    return SendClientMessage(playerid, COLOR_GREY, "Fehler: Du bist in keinem Fahrzeug!");
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_FILL, DIALOG_STYLE_INPUT, "Tankstelle","Wieviele Liter möchten Sie tanken?","Bestätigen","Abbrechen");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Fehler: Du bist an keiner offenen Tankstelle!");
    }
    return 1;
    }


    Vorher musste man in dem : if(IsPlayerInRangeOfPoint(playerid, 5.0, cord_x, cord_y, cord_z)) alles so: if(IsPlayerInRangeOfPoint(playerid, 5.0, 1081.4109,-1761.4855,13.0811) && mysql_GetInt("biz","Gekauft","Nummer","6") == 1 || IsPlayerInRangeOfPoint(playerid, 5.0, 1004.5555,-939.9163,41.9068) && mysql_GetInt("biz","Gekauft","Nummer","4") == 1 || IsPlayerInRangeOfPoint(playerid, 5.0, 1937.7122,-1772.1178,13.1099) && mysql_GetInt("biz","Gekauft","Nummer","5") == 1) angeben.


    Leider bekomme ich bei meiner Änderrung eine Fehlermeldung beim compilen. Weis einer wieso?


    Error:
    C:\Dokumente und Einstellungen\**********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8632) : error 021: symbol already defined: "cord_z"
    C:\Dokumente und Einstellungen\**********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8633) : warning 202: number of arguments does not match definition
    C:\Dokumente und Einstellungen\**********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8633) : warning 202: number of arguments does not match definition
    C:\Dokumente und Einstellungen\**********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8633) : warning 213: tag mismatch
    C:\Dokumente und Einstellungen\**********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8634) : error 017: undefined symbol "cord_y"
    C:\Dokumente und Einstellungen\**********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8634) : warning 202: number of arguments does not match definition
    C:\Dokumente und Einstellungen\**********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8634) : warning 202: number of arguments does not match definition
    C:\Dokumente und Einstellungen\**********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8635) : warning 202: number of arguments does not match definition
    C:\Dokumente und Einstellungen\**********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8635) : warning 202: number of arguments does not match definition
    C:\Dokumente und Einstellungen\**********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8635) : warning 213: tag mismatch
    C:\Dokumente und Einstellungen\**********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8636) : error 017: undefined symbol "cord_y"
    C:\Dokumente und Einstellungen\**********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8632) : warning 203: symbol is never used: "cord_z"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    3 Errors.


    Ich hoffe mir kann wer weiterhelfen.


    Gruß Tim

  • du hast einemal bei new cord x; new cord z; new cord z; das kann ich dir jetzt schon sagen bei dem zweiten new ein y statt z


  • ocmd:fill(playerid)
    {
    new Float:cord_x, Float:cord_y, Float:cord_z;
    cord_x = mysql_GetFloat("biz","PosX");
    cord_y = mysql_GetFloat("biz","PosY");
    cord_z = mysql_GetFloat("biz","PosZ");
    if(IsPlayerInRangeOfPoint(playerid, 5.0, cord_x, cord_y, cord_z))
    {
    if(!IsPlayerInAnyVehicle(playerid))
    {
    return SendClientMessage(playerid, COLOR_GREY, "Fehler: Du bist in keinem Fahrzeug!");
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_FILL, DIALOG_STYLE_INPUT, "Tankstelle","Wieviele Liter möchten Sie tanken?","Bestätigen","Abbrechen");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Fehler: Du bist an keiner offenen Tankstelle!");
    }
    return 1;
    }


    Ungetestet

  • Hi.


    Nun kommt folgender Error:


    C:\Dokumente und Einstellungen\************\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8632) : warning 202: number of arguments does not match definition
    C:\Dokumente und Einstellungen\**********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8632) : warning 202: number of arguments does not match definition
    C:\Dokumente und Einstellungen\***********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8633) : warning 202: number of arguments does not match definition
    C:\Dokumente und Einstellungen\***********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8633) : warning 202: number of arguments does not match definition
    C:\Dokumente und Einstellungen\*********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8634) : warning 202: number of arguments does not match definition
    C:\Dokumente und Einstellungen\*********\Desktop\Samp\Selfmade\Gamemodes\nsl_1.2.2.pwn(8634) : warning 202: number of arguments does not match definition
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    6 Warnings.


    Gruß Tim

  • Hier hastes sogar Zeilensparender ^^
    ocmd:fill(playerid)
    {
    new Float:cord_x, Float:cord_y, Float:cord_z;
    cord_x = mysql_GetFloat("biz","PosX");
    cord_y = mysql_GetFloat("biz","PosY");
    cord_z = mysql_GetFloat("biz","PosZ");
    if(IsPlayerInRangeOfPoint(playerid, 5.0, cord_x, cord_y, cord_z)){
    if(IsPlayerInAnyVehicle(playerid)){
    ShowPlayerDialog(playerid, DIALOG_FILL, DIALOG_STYLE_INPUT, "Tankstelle","Wieviele Liter möchten Sie tanken?","Bestätigen","Abbrechen");


    }else SendClientMessage(playerid, COLOR_GREY, "Fehler: Du bist in keinem Fahrzeug!");
    }else SendClientMessage(playerid, COLOR_GREY, "Fehler: Du bist an keiner offenen Tankstelle!");
    return 1;
    }

  • Hi.


    Da kommen leider immernoch die Warnings die ich oben gepostet habe :(


    Hier ist mal das mysql_GetFloat:


    stock Float:mysql_GetFloat(Table[], Field[], Where[], Where2[])
    {
    new query[128], Get[128];
    format(query, 128, "SELECT %s FROM %s WHERE %s = '%s'", Field, Table, Where, Where2);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(Get);
    return floatstr(Get);
    }


    Vllt. ist ja mein Befehl falsch oder so?

  • es liegt an den hier


    cord_z = mysql_GetFloat("biz","PosZ");


    du gibst nur 2 werte an er brauch aber 4........

  • Es sind diese Zeilen wo er die Warnings raushaut:


    cord_x = mysql_GetFloat("biz","PosX");
    cord_y = mysql_GetFloat("biz","PosY");
    cord_z = mysql_GetFloat("biz","PosZ");


    Marius: Und wie soll ich es dann angeben? Die Strukture der MySQL Datenbank sieht wie folgt aus:


    Tabelle: biz
    Feld: PosZ bzw. PosY, ...


    Ich möchte ja nur die PosZ auslesen und diese dann in cord_z "einsetzen"

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • mysql_GetFloat(Table[], Field[], Where[], Is[])


    Table[] = Tabelle
    Field[] = Das Feld
    Where[] = Was z.b. Name
    Is[] = Der wert von den Namen z.b. Hans Wurst


    du greifst nur die Tabelle und die spalte an mehr nicht

  • dann ist der warn zwar weg aber es wird nichts geladen da du nicht sagst von Wo er das nehmen soll daher auch das Where

  • Table[] = Tabelle
    Field[] = Das Feld
    Where[] = Was z.b. Name
    Is[] = Der wert von den Namen z.b. Hans Wurst

    Ich hab doch nen Muster erstellt
    daran kannst du alles sehen

  • mach nen feld mit name
    dann machst du es so:


    cord_z = mysql_GetFloat("biz","PosZ","Name","Tanke1");

  • Hi.


    Aber das ganze soll ja dann Dynamisch werden, sprich das ich im Skript nichtsmehr ändern muss, sondern nurnoch neue Tankstellen in die Tabelle eintrage und er diese dann Inworld automatisch lädt


    edit: Habs hinbekommen. Lösung: cord_x = mysql_GetFloat("biz","PosX","Tankstelle","1");
    cord_y = mysql_GetFloat("biz","PosY","Tankstelle","1");
    cord_z = mysql_GetFloat("biz","PosZ","Tankstelle","1");