Biz Sys. lade Fehler.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Biz Sys. lade Fehler.

    Hallo,

    ich hab ein Biz System gescriptet (schon länger her) und mir ist erst jetz aufgefallen. Das wenn dieser Code genutzt wird "LoadBizs();" das der Server (wenn man die Biz´s ingame lädt) sich komplett aufhängt (d.h. ich muss die Console schließen und wieder öffnen) aber wenn ich das direkt unter "OnGameModeini" packe steht in der Console zwar das der Server an ist, aber im "SAMP Browser" ist der aus. Ich lasse die Biz´es so laden bzw erstellen.
    Spoiler anzeigen
    [pwn]stock LoadBizs()
    {
    new schleife = 1, Text[20], Text2[20];
    while(schleife < MAX_BIZZ)
    {
    format(str, sizeof str, "%i", schleife);
    BizInfo[schleife][bCashX] = mysql_GetFloat("Bizz", "CashX", "ID", str);
    BizInfo[schleife][bCashY] = mysql_GetFloat("Bizz", "CashY", "ID", str);
    BizInfo[schleife][bCashZ] = mysql_GetFloat("Bizz", "CashZ", "ID", str);
    BizInfo[schleife][bACashX] = mysql_GetFloat("Bizz", "ACashX", "ID", str);
    BizInfo[schleife][bACashY] = mysql_GetFloat("Bizz", "ACashY", "ID", str);
    BizInfo[schleife][bACashZ] = mysql_GetFloat("Bizz", "ACashZ", "ID", str);
    BizInfo[schleife][bVW] = mysql_GetInt("Bizz", "VW", "ID", str);
    BizInfo[schleife][bTyp] = mysql_GetInt("Bizz", "Typ", "ID", str);
    format(BizInfo[schleife][b3DText], 20, mysql_GetString("Bizz", "3DText", "ID", str));
    format(BizInfo[schleife][b3DText2], 20, mysql_GetString("Bizz", "3DText2", "ID", str));
    BizInfo[schleife][bLevel] = mysql_GetInt("Bizz", "Level", "ID", str);
    BizInfo[schleife][bPreis] = mysql_GetInt("Bizz", "Preis", "ID", str);
    format(BizInfo[schleife][bBesitzer], 16, mysql_GetString("Bizz", "Besitzer", "ID", str));
    BizInfo[schleife][bKasse] = mysql_GetInt("Bizz", "Kasse", "ID", str);
    BizInfo[schleife][bPick1] = CreatePickup(1239, 23, BizInfo[schleife][bCashX], BizInfo[schleife][bCashY], BizInfo[schleife][bCashZ], BizInfo[schleife][bVW]);
    BizInfo[schleife][bText] = Create3DTextLabel(Text, BLAU, BizInfo[schleife][bCashX], BizInfo[schleife][bCashY], BizInfo[schleife][bCashZ], 50, BizInfo[schleife][bVW]);
    if(BizInfo[schleife][bACashX] != 0)
    {
    BizInfo[schleife][bPick2] = CreatePickup(1239, 23, BizInfo[schleife][bACashX], BizInfo[schleife][bACashY], BizInfo[schleife][bACashZ], 0);
    BizInfo[schleife][bText2] = Create3DTextLabel(Text2, BLAU, BizInfo[schleife][bACashX], BizInfo[schleife][bACashY], BizInfo[schleife][bACashZ], 50, 0);
    Update3DTextLabelText(BizInfo[schleife][bText2], BLAU, Text2);
    }
    Update3DTextLabelText(BizInfo[schleife][bText], BLAU, Text);
    }
    return 1;
    }[/pwn]


    MfG
  • Das is nich beim login ^^ sondern beim Serverstart, und auf meinem lowpc geht alles ohne Probleme bzgl. MySQL

    #edit

    Ich versuch mich ma an dem sscanf + mysql von dem Tut von Maddin ^^ ma schaun ob ich das hinbekomm' da ich das eigentlich nicht verstehe :D aber ich setz mich ma rann

    #e2
    Soo, hab nun dashier und habe einen Fehler
    [pwn]stock LoadBizs()
    {
    new Data[512], i = 0;
    mysql_query("SELECT * FROM `bizz`")
    mysql_store_result();//Fehler: error 001: expected token: ";" but found "-identifier-"
    while(mysql_fetch_row_format(Data))
    {
    sscanf(Data, "e<p<|>{i}ffffffiiis[20]s[20]iis[16]i>", BizInfo);
    i++;
    }
    mysql_free_result();
    printf("\tEs wurden %i Businisse geladen", i);
    return 1;
    }[/pwn]

    Der enum
    [pwn]enum Bizenum
    {
    bID,
    Float:bCashX,
    Float:bCashY,
    Float:bCashZ,
    Float:bACashX,
    Float:bACashY,
    Float:bACashZ,
    bVW,
    bInt,
    bTyp,
    Text3D:bText[20],
    Text3D:bText2[20],
    b3DText[20],
    b3DText2[20],
    bPick1,
    bPick2,
    bLevel,
    bPreis,
    bBesitzer[24],
    bKasse
    };
    new BizInfo[MAX_BIZZ][Bizenum];[/pwn]


    kannst du mir da helfen o: ?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von [BlaZZeR]BirD ()

  • Danke, das Problem ist jetzt das vom Biz das Pickup und der 3D Text nicht kommen.
    Das ist mein Code: (Wenn ich diesen Code nutze, hab ich den standart GTA Laufstyle o: )
    [pwn]stock LoadBizs()
    {
    new Data[512], i = 0, idx, query[50], Text[20], Text2[20];
    mysql_query("SELECT * FROM `bizz`");
    mysql_store_result();
    while(mysql_fetch_row_format(Data))
    {
    sscanf(Data, "e<p<|>{i}ffffffiiis[20]s[20]iis[24]i>", idx, BizInfo[bCashX], BizInfo[i][bCashY], BizInfo[i][bCashZ], BizInfo[i][bACashX], BizInfo[i][bACashY], BizInfo[i][bACashZ],
    BizInfo[i][bVW], BizInfo[i][bInt], BizInfo[i][bTyp], BizInfo[i][b3DText], BizInfo[i][b3DText2], BizInfo[i][bLevel], BizInfo[i][bPreis], BizInfo[i][bBesitzer], BizInfo[i][bKasse]);
    idx = BizInfo[i][bID];
    format(query, 50, "UPDATE `bizz` SET `ID` = '%d' WHERE `ID` = '%d'", BizInfo[i][bID], idx);
    mysql_query(query);
    if(BizInfo[i][bCashX] != 0)
    {
    BizInfo[i][bPick2] = CreatePickup(1239, 23, BizInfo[i][bCashX], BizInfo[i][bCashY], BizInfo[i][bCashZ], 0);
    BizInfo[i][bText2] = Create3DTextLabel(Text2, BLAU, BizInfo[i][bCashX], BizInfo[i][bCashY], BizInfo[i][bCashZ], 50, 0);
    Update3DTextLabelText(BizInfo[i][bText2], BLAU, Text2);
    }
    Update3DTextLabelText(BizInfo[i][bText], BLAU, Text);
    i++;
    }
    mysql_free_result();
    printf("\tEs wurden %i Businesse geladen", i);
    return 1;
    }[/pwn]
  • [pwn]sscanf(Data, "e<p<|>{i}ffffffiiis[20]s[20]iis[24]i>", idx, BizInfo[bCashX], BizInfo[i][bCashY], BizInfo[i][bCashZ], BizInfo[i][bACashX], BizInfo[i][bACashY], BizInfo[i][bACashZ],
    BizInfo[i][bVW], BizInfo[i][bInt], BizInfo[i][bTyp], BizInfo[i][b3DText], BizInfo[i][b3DText2], BizInfo[i][bLevel], BizInfo[i][bPreis], BizInfo[i][bBesitzer], BizInfo[i][bKasse]);[/pwn]
    Da solltest du dir sscanf nochmal anschauen.
    Genau die Arbeit nimmt dir sscanf mit dem "Enum-Specifier" ("[i]e< ... >
    ") nämlich ab. :P
    Beispiel:
    [pwn]enum data
    {
    name[32],
    id,
    Float:posX,
    };
    new vehicleData[data];

    sscanf("Sunrise|12|1285.34", "e<p<|>s[32]if>", vehicleData[name], vehicleData[id], vehicleData[posX]);
    // einfacher:
    sscanf("Sunrise|12|1285.34", "e<p<|>s[32]if>", vehicleData);
    [/pwn]

    [pwn]idx = BizInfo[bID];
    format(query, 50, "UPDATE `bizz` SET `ID` = '%d' WHERE `ID` = '%d'", BizInfo[i][bID], idx);
    mysql_query(query);[/pwn]
    Wofür ist der Teil ? Erscheint mir nutzlos. :huh:

    Nebenbei hast du die Variablen Text und Text2 in der Funktion deklariert, weist ihnen aber keinen Wert zu (=> Folge: leerer 3D-Text).
  • Ich hab keine Ahnung wie ich dieses "<e..." machen soll deshalb isses so aber das ist sonst ansich richtig:
    [pwn]sscanf(Data, "e<p<|>{i}ffffffiiis[20]s[20]iis[24]i>", idx, BizInfo[bCashX], BizInfo[i][bCashY], BizInfo[i][bCashZ], BizInfo[i][bACashX], BizInfo[i][bACashY], BizInfo[i][bACashZ],
    BizInfo[i][bVW], BizInfo[i][bInt], BizInfo[i][bTyp], BizInfo[i][b3DText], BizInfo[i][b3DText2], BizInfo[i][bLevel], BizInfo[i][bPreis], BizInfo[i][bBesitzer], BizInfo[i][bKasse]);[/pwn]
    ausser das "e<p<|>" glaub ich

    zum anderen, das soll bewirken, das wenn eine BizID vor der gerade geladenen fehlt, das diese damit ersetzt wird. Aber ich spare mir sowieso den Teil, da mach ich das lieber selbst ^^.
    Die Funktion mit den "Text" ist auch nochnicht fertig.
  • Der Enum-Specifier kann die Arbeit in einigen Fällen erleichtern.
    Wenn es dir so aber leichter fällt, dann lass das e<> einfach weg (das erzeugt e<> zwar in diesem Fall keine Fehler, aber könnte sich auf die Geschwindigkeit auswirken oder in kommenden Versionen zu unerwünschtem Verhalten führen).

    Das würde dann noch übrigbleiben: p<|>{i}ffffffiiis[20]s[20]iis[24]i
    Das i in den geschweiften Klammern bedeutet aber, dass dort eine ganze Zahl ist, die aber nicht gespeichert werden soll.
    Wenn ich das richtig interpretiere, möchtest du aber die Zahl in idx speichern (?), insofern sollten die Klammern dort weg. ;)

    Welche Probleme treten aktuell noch auf?
  • Also, ich habe derzeit das Problem, das kein Icon erscheint, deshalb hab ich das mal geprintet
    [pwn]printf("%i | %f | %f | %f | %f | %f | %f", BizInfo[bID], BizInfo[i][bCashX], BizInfo[i][bCashY], BizInfo[i][bCashZ], BizInfo[i][bACashX], BizInfo[i][bACashY], BizInfo[i][bACashZ]);[/pwn]

    Ausgabe
    -987421901 | 855.591979 | 64.007797 | 0.000000 | 0.000000 | 0.000000 | 0.000000

    Die ID wird falsch geladen und die Z Achse garnicht ..

    #e bzw, da wo X Y steht, werden Y und Z geladen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von [BlaZZeR]BirD ()

  • Lösung dafür sollte oben stehen: :)
    Das i in den geschweiften Klammern bedeutet aber, dass dort eine ganze Zahl ist, die aber nicht gespeichert werden soll.
    Wenn ich das richtig interpretiere, möchtest du aber die Zahl in idx speichern (?), insofern sollten die Klammern dort weg.

    Sodass bei sscanf nur noch so etwas stehen sollte:
    [pwn]sscanf(Data, "p<|>iffffffiiis[20]s[20]iis[24]i", idx /* oder BizInfo[bID] */, BizInfo[i][bCashX], BizInfo[i][bCashY], BizInfo[i][bCashZ], BizInfo[i][bACashX], BizInfo[i][bACashY], BizInfo[i][bACashZ],
    BizInfo[i][bVW], BizInfo[i][bInt], BizInfo[i][bTyp], BizInfo[i][b3DText], BizInfo[i][b3DText2], BizInfo[i][bLevel], BizInfo[i][bPreis], BizInfo[i][bBesitzer], BizInfo[i][bKasse]);[/pwn]

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Piranha ()

  • So, ich meld mich wieder ^^
    Ich hab das Problem das ich die Bizzes nicht betreten kann (bei der Biz ID 1 jedoch geht es ? ... )

    SO lasse ich die Bizzes laden:
    [pwn]stock LoadBizs()
    {
    new Data[512], i = 0, Text[20], Text2[20], Text3[20];
    mysql_query("SELECT * FROM `bizz`");
    mysql_store_result();
    while(mysql_fetch_row_format(Data))
    {
    sscanf(Data, "p<|>iffffffffffffiiis[20]s[20]s[20]iis[24]ii>", BizInfo[bID], BizInfo[i][bCashX], BizInfo[i][bCashY], BizInfo[i][bCashZ], BizInfo[i][bACashX], BizInfo[i][bACashY], BizInfo[i][bACashZ], BizInfo[i][bBCashX], BizInfo[i][bBCashY], BizInfo[i][bBCashZ],
    BizInfo[i][bECashX], BizInfo[i][bECashY], BizInfo[i][bECashZ], BizInfo[i][bVW], BizInfo[i][bInt], BizInfo[i][bTyp], BizInfo[i][b3DText], BizInfo[i][b3DText2], BizInfo[i][b3DText3], BizInfo[i][bLevel], BizInfo[i][bPreis], BizInfo[i][bBesitzer], BizInfo[i][bKasse], BizInfo[i][bBesitz]);
    if(BizInfo[i][bCashX] != 0)
    {
    if(BizInfo[i][bBesitz] >= 1)
    BizInfo[i][bPick1] = CreatePickup(1239, 23, BizInfo[i][bCashX], BizInfo[i][bCashY], BizInfo[i][bCashZ], 0);
    else if(BizInfo[i][bBesitz] == 0)
    BizInfo[i][bPick2] = CreatePickup(19471, 23, BizInfo[i][bCashX], BizInfo[i][bCashY], BizInfo[i][bCashZ], 0);
    BizInfo[i][bPick3] = CreatePickup(1274, 23, BizInfo[i][bBCashX], BizInfo[i][bBCashY], BizInfo[i][bBCashZ], BizInfo[i][bVW]);
    BizInfo[i][bPick1] = CreatePickup(1239, 23, BizInfo[i][bECashX], BizInfo[i][bECashY], BizInfo[i][bECashZ], BizInfo[i][bVW]);
    format(Text, sizeof Text, "%s", BizInfo[i][b3DText]);
    BizInfo[i][bText] = Create3DTextLabel(Text, BLAU, BizInfo[i][bCashX], BizInfo[i][bCashY], BizInfo[i][bCashZ], 50, 0);
    format(Text2, sizeof Text2, "%s", BizInfo[i][b3DText2]);
    BizInfo[i][bText2] = Create3DTextLabel(Text2, BLAU, BizInfo[i][bECashX], BizInfo[i][bECashY], BizInfo[i][bECashZ], 50, BizInfo[i][bVW]);
    format(Text3, sizeof Text3, "%s", BizInfo[i][b3DText3]);
    BizInfo[i][bText3] = Create3DTextLabel(Text3, GOLD, BizInfo[i][bBCashX], BizInfo[i][bBCashY], BizInfo[i][bBCashZ], 50, BizInfo[i][bVW]);
    }
    Update3DTextLabelText(BizInfo[i][bText], BLAU, Text);
    Update3DTextLabelText(BizInfo[i][bText2], BLAU, Text2);
    Update3DTextLabelText(BizInfo[i][bText3], GOLD, Text3);
    printf("\tPositions %f | %f | %f", BizInfo[i][bECashX], BizInfo[i][bECashY], BizInfo[i][bECashZ]);//Hier werden die richtigen Coords geprintet aber bei der "Enter" Abrage kommt es seien keine Coordinaten vorhanden ...
    i++;
    }
    mysql_free_result();
    printf("\tEs wurden %i Businesse geladen", i);
    return 1;
    }[/pwn]

    So betrete ich die Businisse:
    [pwn] if(BIZID >= 1 && GetPlayerInterior(playerid) == 0 && GetPVarInt(playerid, "InHaus") == 0 && GetPVarInt(playerid, "InInt") == 0)
    {
    if(BizInfo[BIZID][bECashX], BizInfo[BIZID][bECashY], BizInfo[BIZID][bECashZ], BizInfo[BIZID][bInt] != 0)
    {
    SetPlayerPos(playerid, BizInfo[BIZID][bECashX], BizInfo[BIZID][bECashY], BizInfo[BIZID][bECashZ]);
    SetPlayerInterior(playerid, BizInfo[BIZID][bInt]);
    SetPlayerVirtualWorld(playerid, BizInfo[BIZID][bVW]);
    SetPVarInt(playerid, "InBiz", BIZID);
    }
    else SendClientMessage(playerid, ROT, "Dieses Business hat keinen Interior");
    }
    if(GetPVarInt(playerid, "InBiz") >= 1 && GetPlayerInterior(playerid) >= 1)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3, BizInfo[BIZID][bECashX], BizInfo[BIZID][bECashY], BizInfo[BIZID][bECashZ]))
    {
    SetPlayerPos(playerid, BizInfo[BIZID][bCashX], BizInfo[BIZID][bCashY], BizInfo[BIZID][bCashZ]);
    SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid, 0);
    SetPVarInt(playerid, "InBiz", 0);
    }
    }[/pwn]

    Geprintet wird dashier:
    [18:05:45] sscanf warning: Format specifier does not match parameter count.
    [18:05:45] Positions -27.183900 | -31.712799 | 1003.559997
    [18:05:45] sscanf warning: Format specifier does not match parameter count.
    [18:05:45] Positions -27.367300 | -31.654399 | 1003.559997
    [18:05:45] Es wurden 2 Businesse geladen