Beiträge von DJ Deagle

    if(GetPlayerMoney(playerid) <= strval(inputtext))


    zu
    if(GetPlayerMoney(playerid) < strval(inputtext))


    Wenn Spielergeld kleiner ODER gleich input ist, dann sagen "nein, hast kein geld" --> Das ist deine Anweisung
    Wenn Spielergeld kleiner als input ist, dann sagen "nein, hast kein geld" --> Das ist meine Anweisung


    Hoffe ist verständlich :)


    lg


    Das hört sich doch mal gut an, warum bin ich da ned selber drauf gekommen? :D
    Danke auf jeden Fall, ich werde mich mal dran setzen :)

    Du erstellst das jeweilige Fahrzeug als Objekt, und attached es dann auf dem LKW. Einsteigen kann man dann aber nicht!


    Einsteigen soll man ja nicht, ist für Transportzwecke gedacht. Als Objekt erstellen und attachen, hört sich nicht grad schlecht an, ich werd es mal austesten :)
    Danke auf jeden Fall schon mal für die Antwort

    Hi,


    ich wollte wissen, ob man ein Fahrzeug auf einen Packer "packen" kann. Meine Tests haben bisher nichts anderes als Asynchronität ergeben :(


    lg
    Deagle.


    PS: Falls möglich, sollten die Fahrzeuge auf dem Packer zu sehen sein

    Füge das OnQueryError mal in deinen Code ein und lasse dir die Werte der Parameter mit Print alle ausgeben. Dann poste was bei Aufruf (wird es ja offensichtlich) geprintet wird.
    Irgendwas geht da nämlich schief.


    http://wiki.sa-mp.com/wiki/MySQL#OnQueryError


    Berechtigungen in der Datenbank hast du aber schon alle, oder?


    Berechtigungen? Ja. Du hattest außerdem einen SyntaxError (SELECT * FORM) anstatt (SELECT * FROM). Das habe ich geändert, trotzdem noch 3x OnQueryError (er lädt trzdem die Autohäuser ohne probleme).
    Hier die Server-Log:

    Code
    ----------------------v0.3z-R4, (C)2005-2014 SA-MP Team[22:50:23] [22:50:23] Server Plugins[22:50:23] --------------[22:50:23]  Loading plugin: mysql.so[22:50:23]   > MySQL plugin R5 successfully loaded.[22:50:23]   Loaded.[22:50:23]  Loading plugin: streamer.so[22:50:23]   Loaded.[22:50:23]  Loading plugin: sscanf.so[22:50:23] [22:50:23]  ===============================[22:50:23]       sscanf plugin loaded.     [22:50:23]          Version:  2.8.1        [22:50:23]    (c) 2012 Alex "Y_Less" Cole  [22:50:23]  ===============================[22:50:23]   Loaded.[22:50:23]  Loading plugin: audio.so[22:50:23] *** Audio Plugin v0.5 R2 by Incognito loaded ***[22:50:23]   Loaded.[22:50:23]  Loading plugin: SyncHTTP.so[22:50:23] SyncHTTP got loaded.[22:50:23]   Loaded.[22:50:23]  Loaded 5 plugins.[22:50:23] [22:50:23] Filterscripts[22:50:23] ---------------[22:50:23]   Loaded 0 filterscripts.[22:50:23] *** Audio Plugin: Started TCP server on port 9853[22:50:23] <-| [MYSQL] Verbindung zur Datenbank wurde erfolgreich hergestellt![22:50:23] Setting server password to: "shanfjdshfjsdhfjkdshfsd"[22:50:23]  [22:50:23]  Alle Maps wurden erfolgreich geladen![22:50:23]  [22:50:23]   Filterscript 'Maps.amx' loaded.[22:50:23]   Filterscript 'AudioHide.amx' loaded.[22:50:23] === WBB_Connect ===Successfully initialized!===================[22:50:23] LoadCarDealers[22:50:23] rows: 5[22:50:23] 1|test1|-306.352|828.016|13.391|0|Zinne|100|1[22:50:23] 0: ** test1 **Besitzer: Zinne[22:50:23] 2|test2|-308.212|823.644|14.0029|0|Niemand|100|1[22:50:23] 1: ** test2 **Dieses Autohaus ist zu verkaufen!Preis: 100€Level: 1Autohaus kaufen: /buybiz[22:50:23] 3|test3|-304.661|824.035|13.7237|0|Niemand|100|1[22:50:23] 2: ** test3 **Dieses Autohaus ist zu verkaufen!Preis: 100€Level: 1Autohaus kaufen: /buybiz[22:50:23] 4|test4|-301.582|822.909|13.8331|0|Niemand|100|1[22:50:23] 3: ** test4 **Dieses Autohaus ist zu verkaufen!Preis: 100€Level: 1Autohaus kaufen: /buybiz[22:50:23] 5|test5|-300.424|824.921|13.6326|0|Niemand|100|1[22:50:23] 4: ** test5 **Dieses Autohaus ist zu verkaufen!Preis: 100€Level: 1Autohaus kaufen: /buybiz[22:50:23]  [22:50:23]  SCRIPT - (c) by Deagle[22:50:23]  [22:50:23] Number of vehicle models: 2[22:50:23] Incoming connection: 127.0.0.1:51358[22:50:23] Incoming connection: 127.0.0.1:34883[22:50:23] [npc:join] Joe has joined the server (0:127.0.0.1)[22:50:23] [npc:join] Jose has joined the server (1:127.0.0.1)


    MySQL Log:

    SQL
    [22:50:23]  [22:50:23] ---------------------------[22:50:23] MySQL Debugging activated (09/30/14)[22:50:23] ---------------------------[22:50:23]  [22:50:23] >> mysql_query( Connection handle: 1 )[22:50:23] CMySQLHandler::Query(SELECT * FROM `haeuser`) - Successfully executed.[22:50:23] >> mysql_store_result( Connection handle: 1 )[22:50:23] CMySQLHandler::StoreResult() - Result was stored.[22:50:23] >> mysql_fetch_row_format( Connection handle: 1 )[22:50:23] >> mysql_free_result( Connection handle: 1 )[22:50:23] CMySQLHandler::FreeResult() - Result was successfully free'd.[22:50:23] OnQueryError() - Called.[22:50:23] OnQueryError() - Called.[22:50:23] OnQueryError() - Called.


    Callback im Script:

    Spoiler anzeigen
    public OnQueryError(errorid, error[], resultid, extraid, callback[], query[], connectionHandle)
    {
    switch(errorid) {
    case CR_COMMAND_OUT_OF_SYNC: { printf("Commands out of sync for thread ID: %d",resultid); }
    case ER_SYNTAX_ERROR: { printf("Something is wrong in your syntax, query: %s",query); }
    }
    return 1;
    }


    hm.. was is da los? :o


    /e: Hab das Callback in deinen Wunsch abgeändert:
    public OnQueryError(errorid, error[], resultid, extraid, callback[], query[], connectionHandle)
    {
    printf("ErrorID: %d",errorid);
    printf("Error: %s",error);
    printf("ResultID: %d",resultid);
    printf("ExtraID: %d",extraid);
    printf("Callback: %s",callback);
    printf("Query: %s",query);
    printf("ConnectionHandle: %d",connectionHandle);
    return 1;
    }


    ServerLOG:



    edit: Mir ist aufgefallen, dass diese Fehler in einem anderen stock liegen, der auch unter OnGameModeInit aufgerufen wird.
    Dort wurden die ganzen formatierten strings vor dem strcat nicht auf 0 Zeichen formatiert. Dieses ist nun behoben.
    Jetzt klappt alles reibungslos und ohne Errors (weder im Compiler, noch in den Logs). :)
    Danke Jeffry, du hast dir wirklich ein Lob verdient :love:

    Kannst du nochmal deine Datenbank und deinen Log leeren und den Befehl nochmal eingeben, bzw. zweimal? Und wenn möglich auch nochmal den Befehl und die zwei stocks dazu, wie sie momentan sind?
    Das ist so durcheinander hier, etwas Ordnung wäre gut. Den Log brauche ich um die Vorgänge zu verfolgen, warum es "verzögert" erstellt wird.


    Okay. Ich habe jetzt grade die Datenbank geleert, und dann alles neu gestartet und 5 neue Autohäuser erstellt. Es hat alles geklappt wie gewollt.
    Doch beim Neustart des Servers wurden die Autohäuser nicht richtig geladen. Dazu wird unter OnGameModeInit der Befehl "LoadCarDealers();" ausgeführt.
    Erst als ich den Command "ccd" wieder ausgeführt habe (um ein Autohaus zu erstellen) wurde das erste Autohaus aus der DB geladen.
    Hier der dazugehörige stock:
    stock LoadCarDealers()
    {
    mysql_query("SELECT * FORM `Cardealers`");
    mysql_store_result();
    if(mysql_num_rows() != 0 && mysql_num_rows() <= 5) {
    new str[1024],idx=0;
    while(mysql_fetch_row(str)) {
    new string[256];
    sscanf(str, "e<p<|>ds[32]fffds[24]dd>",AHInfo[idx]);
    if((!strcmp(AHInfo[idx][zOwner],"Niemand",true))) {
    AHInfo[idx][zPickup]=CreatePickup(1273,1,AHInfo[idx][zPosX],AHInfo[idx][zPosY],AHInfo[idx][zPosZ],0);
    format(string,128,"** %s **\nDieses Autohaus ist zu verkaufen!\nPreis: %s€\nLevel: %d\nAutohaus kaufen: /buybiz",AHInfo[idx][zName],inspoints(AHInfo[idx][zPrice]),AHInfo[idx][zLevel]);
    AHInfo[idx][zLabel]=Create3DTextLabel(string,COLOR_AHLABEL,AHInfo[idx][zPosX],AHInfo[idx][zPosY],AHInfo[idx][zPosZ],10,0,0);
    AHInfo[idx][zCreated] = true;
    } else {
    AHInfo[idx][zPickup]=CreatePickup(1272,1,AHInfo[idx][zPosX],AHInfo[idx][zPosY],AHInfo[idx][zPosZ],0);
    format(string,128,"** %s **\nBesitzer: %s",AHInfo[idx][zName],AHInfo[idx][zOwner]);
    AHInfo[idx][zLabel]=Create3DTextLabel(string,COLOR_AHLABEL,AHInfo[idx][zPosX],AHInfo[idx][zPosY],AHInfo[idx][zPosZ],10,0,0);
    AHInfo[idx][zCreated] = true;
    }
    idx++;
    }
    mysql_free_result();
    }
    return 1;
    }


    Und weil ich dich kenne Jeffry, hier die MySQL-Log:


    Woran liegts mit dem OnQueryError()?


    lg
    Deagle


    /e: Außerdem schreibt er dann beim ccd-Befehl wieder was neues in die Tabelle.


    Jetzt erstellt er das Autohaus erst, wenn ich ein 2. erstelle (Ich gehe an Pos 1, mache ccd [...], dann gehe ich an Pos 2 mache ccd [...] => da wird 1 geladen und nicht 2)
    Anstatt das neu erstellte zu laden lädt er da das Autohaus was in der Datenbank war und am start nicht geladen wurde.


    Folgende Funktion wird am start aufgerufen:
    stock LoadCarDealers()
    {
    mysql_query("SELECT * FORM `Cardealers`");
    mysql_store_result();
    if(mysql_num_rows() != 0 && mysql_num_rows() <= 5) {
    new str[1024],idx=0;
    while(mysql_fetch_row(str)) {
    new string[256];
    sscanf(str, "e<p<|>ds[32]fffds[24]dd>",AHInfo[idx]);
    if((!strcmp(AHInfo[idx][zOwner],"Niemand",true))) {
    AHInfo[idx][zPickup]=CreatePickup(1273,1,AHInfo[idx][zPosX],AHInfo[idx][zPosY],AHInfo[idx][zPosZ],0);
    format(string,128,"** %s **\nDieses Autohaus ist zu verkaufen!\nPreis: %s€\nLevel: %d\nAutohaus kaufen: /buybiz",AHInfo[idx][zName],inspoints(AHInfo[idx][zPrice]),AHInfo[idx][zLevel]);
    AHInfo[idx][zLabel]=Create3DTextLabel(string,COLOR_AHLABEL,AHInfo[idx][zPosX],AHInfo[idx][zPosY],AHInfo[idx][zPosZ],10,0,0);
    AHInfo[idx][zCreated] = true;
    } else {
    AHInfo[idx][zPickup]=CreatePickup(1272,1,AHInfo[idx][zPosX],AHInfo[idx][zPosY],AHInfo[idx][zPosZ],0);
    format(string,128,"** %s **\nBesitzer: %s",AHInfo[idx][zName],AHInfo[idx][zOwner]);
    AHInfo[idx][zLabel]=Create3DTextLabel(string,COLOR_AHLABEL,AHInfo[idx][zPosX],AHInfo[idx][zPosY],AHInfo[idx][zPosZ],10,0,0);
    AHInfo[idx][zCreated] = true;
    }
    idx++;
    }
    mysql_free_result();
    }
    return 1;
    }

    Ja, dann muss mach der strcmp Abfrage (die nach sscanf) auch ein return 1 hin (also nach dem else Teil). Dann dürfte das auch gehen.
    Es muss so sein, weil wenn das Objekt geladen ist, muss der Loop ja nicht weiter laufen, es ist ja erstellt. Sonst wird es nur nochmal erstellt.


    Habe jetzt folgenden Code:
    stock SaveCarDealer(id)
    {
    new query[512];
    format(query,sizeof query,"UPDATE `Cardealers` SET `Owner` = '%s', `Name` = '%s', `Bank` = '%d' WHERE `ID` = '%d'",AHInfo[id][zOwner],AHInfo[id][zName],AHInfo[id][zBank],AHInfo[id][zID]);
    mysql_query(query);
    return 1;
    }


    stock KillCarDealer(id)
    {
    printf("KillDealer ID: %d",id);
    SaveCarDealer(id);
    DestroyPickup(AHInfo[id][zPickup]);
    Delete3DTextLabel(AHInfo[id][zLabel]);
    AHInfo[id][zCreated] = false;
    return 1;
    }


    stock LoadCarDealer(id)
    {
    new q[256];
    format(q,256,"SELECT * FROM `Cardealers` WHERE `ID` = '%d'",id+1);
    mysql_query(q);
    mysql_store_result();
    if(mysql_num_rows() == 1) {
    new str[512];
    while(mysql_fetch_row(str)) {
    for(new i;i<MAX_AUTOHAUS;i++) {
    if(AHInfo[i][zCreated])continue;
    new string[256];
    sscanf(str, "e<p<|>ds[32]fffds[24]dd>",AHInfo[i]);
    if((!strcmp(AHInfo[i][zOwner],"Niemand",true))) {
    AHInfo[i][zPickup]=CreatePickup(1273,1,AHInfo[i][zPosX],AHInfo[i][zPosY],AHInfo[i][zPosZ],0);
    format(string,128,"** %s **\nDieses Autohaus ist zu verkaufen!\nPreis: %s€\nLevel: %d\nAutohaus kaufen: /buybiz",AHInfo[i][zName],inspoints(AHInfo[i][zPrice]),AHInfo[i][zLevel]);
    AHInfo[i][zLabel]=Create3DTextLabel(string,COLOR_AHLABEL,AHInfo[i][zPosX],AHInfo[i][zPosY],AHInfo[i][zPosZ],10,0,0);
    AHInfo[i][zCreated] = true;
    } else {
    AHInfo[i][zPickup]=CreatePickup(1272,1,AHInfo[i][zPosX],AHInfo[i][zPosY],AHInfo[i][zPosZ],0);
    format(string,128,"** %s **\nBesitzer: %s",AHInfo[i][zName],AHInfo[i][zOwner]);
    AHInfo[i][zLabel]=Create3DTextLabel(string,COLOR_AHLABEL,AHInfo[i][zPosX],AHInfo[i][zPosY],AHInfo[i][zPosZ],10,0,0);
    AHInfo[i][zCreated] = true;
    }
    }
    }
    mysql_free_result();
    }
    return 1;
    }


    ocmd:ccd(playerid,params[])
    {
    new name[32],price,level,Float:xPos[3];
    if(pInfo[playerid][pAdmin] != 5)return 1;
    if(sscanf(params,"dds[32]",price,level,name))return SendClientMessage(playerid,COLOR_GREY,"Benutze: /ccd [Preis] [Level] [Name]");
    for(new i;i<MAX_AUTOHAUS;i++) {
    if(AHInfo[i][zCreated])continue;
    new str[256];
    GetPlayerPos(playerid,xPos[0],xPos[1],xPos[2]);
    format(str,sizeof str,"INSERT INTO `Cardealers` (`Owner`, `PosX`, `PosY`, `PosZ`, `Name`, `Price`, `Level`) VALUES ('Niemand', '%f', '%f', '%f', '%s', '%d', '%d')",xPos[0],xPos[1],xPos[2],name,price,level);
    mysql_query(str);
    return LoadCarDealer(i);
    }
    return 1;
    }


    ocmd:buybiz(playerid,params[])
    {
    for(new i;i<MAX_AUTOHAUS;i++) {
    if(!AHInfo[i][zCreated])continue;
    if(IsPlayerInRangeOfPoint(playerid,3,AHInfo[i][zPosX],AHInfo[i][zPosY],AHInfo[i][zPosZ])) {
    if((!strcmp(AHInfo[i][zOwner],"Niemand",true))) {
    if(pInfo[playerid][pMoney] >= AHInfo[i][zPrice]) {
    if(GetPlayerScore(playerid) >= AHInfo[i][zLevel]) {
    GetPlayerName(playerid,sendername,sizeof sendername);
    pInfo[playerid][pMoney] -= AHInfo[i][zPrice];
    pInfo[playerid][pBiz] = i;
    format(AHInfo[i][zOwner],24,"%s",sendername);
    SendClientMessage(playerid,COLOR_LIGHTGREEN,"Du hast dir das Autohaus erfolgreich gekauft!");
    SavePlayer(playerid);
    KillCarDealer(i);
    return LoadCarDealer(i);
    } else {
    return SendClientMessage(playerid,COLOR_LIGHTRED,"Dein Level reicht nicht aus, um dieses Autohaus zu kaufen!");
    }
    } else {
    return SendClientMessage(playerid,COLOR_LIGHTRED,"Du hast nicht genug Geld, um dieses Autohaus zu kaufen!");
    }
    } else {
    return SendClientMessage(playerid,COLOR_LIGHTRED,"Dieses Autohaus ist nicht zu verkaufen!");
    }
    }
    }
    return 1;
    }
    Leider wird nun nur noch 1 Autohaus erstellt.
    Beim Ersten Autohaus werden nach dem Kauf das alte Pickup+Label nicht entfernt.


    Ich habe an dem Code rumgewerkelt wie ein bekloppter, doch nix ist rausgekommen :/


    /e: KillDealer (was geprintet wurde) war immer 0.