Autohaus funktioniert nicht richtig..

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
  • Hallo!
    Ich habe ein Autohaussystem. Leider funktioniert es nicht ganz..


    Es passiern 2 Sachen.. Mal dies mal das..


    Ablauf vom Autokauf:
    Man geht ins Autohauskauft sich ein Auto. Klappt!
    Man geht zum Ordnungsamt um das Auto abzuholen!
    Man tippt ein /autoabholen [KEY] Also den Schlüssel den man gekauft hat. Klappt
    Message: "Das Fahrzeug steht vor dem Gebäude." klappt nicht. bzw. die Message ist da, aber da steht kein Auto..


    Einmal stand das Auto da, ich konnte allerdings nicht einsteigen...


    Code von /autoabholen:

    Spoiler anzeigen
    ocmd:autoabholen(playerid,params[])//neu-g
    {
    new var = 0;
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(SpielerInfo[i][pFraktion] == 4)
    {
    if(Duty[i] == 1)
    {
    var++;
    }
    }
    }
    if(var > 0) return SCM(playerid,GRAU,"Du musst dich an einen Ordnungshüter wenden, da einer im Dienst ist.");
    new vehID,AutoID[20],kontrolle;
    if(IsPlayerInRangeOfPoint(playerid,2.0,324.7560,305.1213,999.1484))
    {
    if(sscanf(params,"i",vehID)){
    SCM(playerid,GRAU,"NUTZE: /autoabholen [Nummer vom Kennzeichen] | Bsp.: GP-09, nimmst du die {FF0000}9");
    SCM(playerid,GRAU,"Deine Kennzeichen findest du unter {FF7800}/keys.");
    return 1;}
    format(AutoID,sizeof(AutoID),"%d",vehID);
    kontrolle = mysql_GetInt("vehicles", "oamt", "ID", AutoID);
    if(kontrolle == 0){ SCM(playerid,GRAU,"Dieses Fahrzeug ist nicht im Lager."); return 1; }
    if(vehID == SpielerInfo[playerid][pVeh1] || vehID == SpielerInfo[playerid][pVeh2])
    {
    O_Autosladen(vehID);
    SCM(playerid,WEIS,"Dein Fahrzeug steht nun vorm Gebäude.");
    return 1;
    }
    SCM(playerid,GRAU,"Du bist nicht der Besiter dieses Fahrzeuges (/keys).");
    return 1;
    }
    SCM(playerid,GRAU,"Du bist nicht im Ordnungsamtgebäude.");
    return 1;
    }


    O_Autosladen:

    Spoiler anzeigen
    forward O_Autosladen(vehicleid);
    public O_Autosladen(vehicleid)
    {
    new autostring[250], String[10], kennzeichen[15];
    format(String, sizeof(String), "%d", vehicleid);
    format(kennzeichen, sizeof(kennzeichen), "GP-%d", vehicleid);
    VehicleInfo[vehicleid][Oamt] = mysql_GetInt("vehicles", "oamt", "ID", String);
    VehicleInfo[vehicleid][Verkauft] = mysql_GetInt("vehicles", "verkauft", "ID", String);
    if(VehicleInfo[vehicleid][Verkauft] == 0 && VehicleInfo[vehicleid][Oamt] == 1)
    {
    format(VehicleInfo[vehicleid][Owner], MAX_PLAYER_NAME, mysql_GetString("vehicles", "owner", "ID", String));
    VehicleInfo[vehicleid][Model] = mysql_GetInt("vehicles", "model", "ID", String);
    VehicleInfo[vehicleid][Zustand] = mysql_GetFloat("vehicles","zustand","ID", String);
    VehicleInfo[vehicleid][Lock] = mysql_GetInt("vehicles", "clock", "ID", String);
    VehicleInfo[vehicleid][Tank] = mysql_GetInt("vehicles", "tank", "ID", String);
    VehicleInfo[vehicleid][Farbe1] = mysql_GetInt("vehicles", "farbe1", "ID", String);
    VehicleInfo[vehicleid][Farbe2] = mysql_GetInt("vehicles", "farbe2", "ID", String);
    new Auto = CreateVehicle(VehicleInfo[vehicleid][Model],-1689.0150,406.7240,6.8955,316.5948,VehicleInfo[vehicleid][Farbe1],VehicleInfo[vehicleid][Farbe2],-1);
    SetVehicleHealth(Auto,VehicleInfo[vehicleid][Zustand]);
    Motor[Auto] = false;
    GAS[Auto] = VehicleInfo[vehicleid][Tank];
    SetVehicleNumberPlate(Auto,kennzeichen);
    VehicleInfo[Auto][vID] = vehicleid;
    VehicleInfo[Auto][Oamt] = 0;
    VehicleInfo[Auto][Pos][Auto_X] = -1983.6538;
    format(VehicleInfo[Auto][Owner], MAX_PLAYER_NAME, mysql_GetString("vehicles", "owner", "ID", String));
    format(autostring,sizeof(autostring),"Model: %d | Owner: %s | vID: %d | ID: %d",VehicleInfo[vehicleid][Model],VehicleInfo[vehicleid][Owner],VehicleInfo[Auto][vID],vehicleid);
    //printf(autostring);
    mysql_SetInt("vehicles", "oamt",VehicleInfo[Auto][Oamt], "ID", String);
    }
    return 1;
    }


    mfg

  • Das ganze System kann so nicht funktionieren, weil:
    O_Autosladen(vehID);
    hier übergibst du die 9 vom Nummernschild des Fahrzeugs. Gut, dann gehst du in die Funktion, dort greifst du bis zu CreateVehicle mit der 9 auf die Variablen zu:
    VehicleInfo[vehicleid /*angenommen 9*/][Model]


    Nun wird das Fahrzeug erstellt.
    new Auto = CreateVehicle(VehicleInfo[vehicleid][Model], ...
    In Auto steht nun die vehicleid. Diese muss nicht 9 sein (es wird ja einfach die nächst-freie ID genommen).


    Danach greifst du mit der neuen ID, sagen wir 15, auf den Index zu:
    VehicleInfo[Auto /*angenommen 15*/][Oamt]
    Somit stimmen die Werte nicht mehr, da ein Teil in 9 steht, und einer in 15.


    Generell darfst du bei dem System die vehicleid (return von CreateVehicle) nicht mit dem Index von VehicleInfo (das was zwischen den ersten [ ] steht) gleichsetzen, da die vehicleid sich ändern kann.
    Du solltest daher die ID auf der Nummerntafel als die ID des Indexes nehmen, und bei O_Autosladen nur mit [vehicleid] auf VehicleInfo zugreifen (das vehicleid in dem Funktionsparameter benennst du besser zu index um, sonst verwirrt das), also mit [index], wenn umbenannt.


    Wahrscheinlich musst du auch einige Änderungen am Rest des Codes machen, je nach dem wo das verwendet wird.


    Code:
    forward O_Autosladen(index);
    public O_Autosladen(index)
    {
    new autostring[250], String[10], kennzeichen[15];
    format(String, sizeof(String), "%d", index);
    format(kennzeichen, sizeof(kennzeichen), "GP-%d", index);
    VehicleInfo[index][Oamt] = mysql_GetInt("vehicles", "oamt", "ID", String);
    VehicleInfo[index][Verkauft] = mysql_GetInt("vehicles", "verkauft", "ID", String);
    if(VehicleInfo[index][Verkauft] == 0 && VehicleInfo[index][Oamt] == 1)
    {
    format(VehicleInfo[index][Owner], MAX_PLAYER_NAME, mysql_GetString("vehicles", "owner", "ID", String));
    VehicleInfo[index][Model] = mysql_GetInt("vehicles", "model", "ID", String);
    VehicleInfo[index][Zustand] = mysql_GetFloat("vehicles","zustand","ID", String);
    VehicleInfo[index][Lock] = mysql_GetInt("vehicles", "clock", "ID", String);
    VehicleInfo[index][Tank] = mysql_GetInt("vehicles", "tank", "ID", String);
    VehicleInfo[index][Farbe1] = mysql_GetInt("vehicles", "farbe1", "ID", String);
    VehicleInfo[index][Farbe2] = mysql_GetInt("vehicles", "farbe2", "ID", String);
    new Auto = CreateVehicle(VehicleInfo[index][Model],-1689.0150,406.7240,6.8955,316.5948,VehicleInfo[index][Farbe1],VehicleInfo[index][Farbe2],-1);
    SetVehicleHealth(Auto,VehicleInfo[index][Zustand]);
    Motor[Auto] = false;
    GAS[Auto] = VehicleInfo[index][Tank];
    SetVehicleNumberPlate(Auto,kennzeichen);
    VehicleInfo[index][vID] = index;
    VehicleInfo[index][Oamt] = 0;
    VehicleInfo[index][Pos][Auto_X] = -1983.6538;
    format(VehicleInfo[index][Owner], MAX_PLAYER_NAME, mysql_GetString("vehicles", "owner", "ID", String));
    format(autostring,sizeof(autostring),"Model: %d | Owner: %s | vID: %d | ID: %d",VehicleInfo[index][Model],VehicleInfo[index][Owner],VehicleInfo[index][vID],index);
    //printf(autostring);
    mysql_SetInt("vehicles", "oamt",VehicleInfo[index][Oamt], "ID", String);
    }
    return 1;
    }

  • Jeffry
    Oh man.. Irgendwas geht da nicht.. Das Auto Spawned einfach nicht vor dem Gebäude..


    Hier mal alles:
    /autoabholen
    ocmd:autoabholen(playerid,params[])//neu-g
    {
    new var = 0;
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(SpielerInfo[i][pFraktion] == 4)
    {
    if(Duty[i] == 1)
    {
    var++;
    }
    }
    }
    if(var > 0) return SCM(playerid,GRAU,"Du musst dich an einen Ordnungshüter wenden, da einer im Dienst ist.");
    new vehID,AutoID[20],kontrolle;
    if(IsPlayerInRangeOfPoint(playerid,2.0,324.7560,305.1213,999.1484))
    {
    if(sscanf(params,"i",vehID)){
    SCM(playerid,GRAU,"NUTZE: /autoabholen [Nummer vom Kennzeichen] | Bsp.: GP-09, nimmst du die {FF0000}9");
    SCM(playerid,GRAU,"Deine Kennzeichen findest du unter {FF7800}/keys.");
    return 1;}
    format(AutoID,sizeof(AutoID),"%d",vehID);
    kontrolle = mysql_GetInt("vehicles", "oamt", "ID", AutoID);
    if(kontrolle == 0){ SCM(playerid,GRAU,"Dieses Fahrzeug ist nicht im Lager."); return 1; }
    if(vehID == SpielerInfo[playerid][pVeh1] || vehID == SpielerInfo[playerid][pVeh2])
    {
    O_Autosladen(vehID);
    SCM(playerid,WEIS,"Ihr Fahrzeug steht nun vorm' Gebäude.");
    SCM(playerid,WEIS,"Wir wünschen ihnen viel Spaß beim fahren.");
    return 1;
    }
    SCM(playerid,GRAU,"Du bist nicht der Besiter dieses Fahrzeuges (/keys).");
    return 1;
    }
    SCM(playerid,GRAU,"Du bist nicht im Ordnungsamtgebäude.");
    return 1;
    }


    O_Autosladen
    forward O_Autosladen(index);
    public O_Autosladen(index)
    {
    new autostring[250], String[10], kennzeichen[15];
    format(String, sizeof(String), "%d", index);
    format(kennzeichen, sizeof(kennzeichen), "GP-%d", index);
    VehicleInfo[index][Oamt] = mysql_GetInt("vehicles", "oamt", "ID", String);
    VehicleInfo[index][Verkauft] = mysql_GetInt("vehicles", "verkauft", "ID", String);
    if(VehicleInfo[index][Verkauft] == 0 && VehicleInfo[index][Oamt] == 1)
    {
    format(VehicleInfo[index][Owner], MAX_PLAYER_NAME, mysql_GetString("vehicles", "owner", "ID", String));
    VehicleInfo[index][Model] = mysql_GetInt("vehicles", "model", "ID", String);
    VehicleInfo[index][Zustand] = mysql_GetFloat("vehicles","zustand","ID", String);
    VehicleInfo[index][Lock] = mysql_GetInt("vehicles", "lock", "ID", String);
    VehicleInfo[index][Tank] = mysql_GetInt("vehicles", "tank", "ID", String);
    VehicleInfo[index][Farbe1] = mysql_GetInt("vehicles", "farbe1", "ID", String);
    VehicleInfo[index][Farbe2] = mysql_GetInt("vehicles", "farbe2", "ID", String);
    new Auto = CreateVehicle(VehicleInfo[index][Model],-1689.0150,406.7240,6.8955,316.5948,VehicleInfo[index][Farbe1],VehicleInfo[index][Farbe2],-1);
    SetVehicleHealth(Auto,VehicleInfo[index][Zustand]);
    Motor[Auto] = false;
    GAS[Auto] = VehicleInfo[index][Tank];
    SetVehicleNumberPlate(Auto,kennzeichen);
    VehicleInfo[index][vID] = index;
    VehicleInfo[index][Oamt] = 0;
    VehicleInfo[index][Pos][Auto_X] = -1983.6538;
    format(VehicleInfo[index][Owner], MAX_PLAYER_NAME, mysql_GetString("vehicles", "owner", "ID", String));
    format(autostring,sizeof(autostring),"Model: %d | Owner: %s | vID: %d | ID: %d",VehicleInfo[index][Model],VehicleInfo[index][Owner],VehicleInfo[index][vID],index);
    //printf(autostring);
    mysql_SetInt("vehicles", "oamt",VehicleInfo[index][Oamt], "ID", String);
    }
    return 1;
    }


    O_Autosspeichern
    forward O_Autosspeichern(vehicleid);
    public O_Autosspeichern(vehicleid)
    {
    if(VehicleInfo[vehicleid][vID] > 0)
    {
    new String[10];
    format(String, sizeof(String), "%d", VehicleInfo[vehicleid][vID]);
    VehicleInfo[vehicleid][Tank] = GAS[vehicleid];
    GetVehicleHealth(vehicleid,VehicleInfo[vehicleid][Zustand]);
    mysql_SetInt("vehicles", "tank",VehicleInfo[vehicleid][Tank], "ID", String);
    mysql_SetFloat("vehicles", "zustand",VehicleInfo[vehicleid][Zustand], "ID", String);
    mysql_SetInt("vehicles", "lock",VehicleInfo[vehicleid][Lock], "ID", String);
    mysql_SetInt("vehicles", "verkauft",VehicleInfo[vehicleid][Verkauft], "ID", String);
    mysql_SetInt("vehicles", "oamt",VehicleInfo[vehicleid][Oamt], "ID", String);
    mysql_SetInt("vehicles", "farbe1",VehicleInfo[vehicleid][Farbe1], "ID", String);
    mysql_SetInt("vehicles", "farbe2",VehicleInfo[vehicleid][Farbe2], "ID", String);
    }
    return 1;
    }


    Autospeichern:
    forward Autosspeichern(vehicleid);
    public Autosspeichern(vehicleid)
    {
    if(VehicleInfo[vehicleid][vID] > 0)
    {
    new String[10];
    format(String, sizeof(String), "%d", VehicleInfo[vehicleid][vID]);
    GetVehiclePos(vehicleid,VehicleInfo[vehicleid][Pos][Auto_X],VehicleInfo[vehicleid][Pos][Auto_Y],VehicleInfo[vehicleid][Pos][Auto_Z]);
    GetVehicleZAngle(vehicleid,VehicleInfo[vehicleid][Pos][Auto_A]);
    VehicleInfo[vehicleid][Tank] = GAS[vehicleid];
    GetVehicleHealth(vehicleid,VehicleInfo[vehicleid][Zustand]);
    mysql_SetFloat("vehicles", "auto_x",VehicleInfo[vehicleid][Pos][Auto_X], "ID", String);
    mysql_SetFloat("vehicles", "auto_y",VehicleInfo[vehicleid][Pos][Auto_Y], "ID", String);
    mysql_SetFloat("vehicles", "auto_z",VehicleInfo[vehicleid][Pos][Auto_Z], "ID", String);
    mysql_SetFloat("vehicles", "auto_a",VehicleInfo[vehicleid][Pos][Auto_A], "ID", String);
    mysql_SetInt("vehicles", "tank",VehicleInfo[vehicleid][Tank], "ID", String);
    mysql_SetFloat("vehicles", "zustand",VehicleInfo[vehicleid][Zustand], "ID", String);
    mysql_SetInt("vehicles", "lock",VehicleInfo[vehicleid][Lock], "ID", String);
    mysql_SetInt("vehicles", "verkauft",VehicleInfo[vehicleid][Verkauft], "ID", String);
    mysql_SetInt("vehicles", "oamt",VehicleInfo[vehicleid][Oamt], "ID", String);
    mysql_SetInt("vehicles", "farbe1",VehicleInfo[vehicleid][Farbe1], "ID", String);
    mysql_SetInt("vehicles", "farbe2",VehicleInfo[vehicleid][Farbe2], "ID", String);
    }
    return 1;
    }


    Autosladen:
    forward Autosladen(vehicleid);
    public Autosladen(vehicleid)
    {
    new String[10], kennzeichen[15], ID;
    format(String, sizeof(String), "%d", vehicleid);
    format(kennzeichen, sizeof(kennzeichen), "GP-%d", vehicleid);
    format(VehicleInfo[vehicleid][Owner], MAX_PLAYER_NAME, mysql_GetString("vehicles", "owner", "ID", String));
    VehicleInfo[vehicleid][Model] = mysql_GetInt("vehicles", "model", "ID", String);
    VehicleInfo[vehicleid][Pos][Auto_X] = mysql_GetFloat("vehicles", "auto_x", "ID", String);
    VehicleInfo[vehicleid][Pos][Auto_Y] = mysql_GetFloat("vehicles", "auto_y", "ID", String);
    VehicleInfo[vehicleid][Pos][Auto_Z] = mysql_GetFloat("vehicles", "auto_z", "ID", String);
    VehicleInfo[vehicleid][Pos][Auto_A] = mysql_GetFloat("vehicles", "auto_a", "ID", String);
    VehicleInfo[vehicleid][Zustand] = mysql_GetFloat("vehicles","zustand","ID", String);
    VehicleInfo[vehicleid][Lock] = mysql_GetInt("vehicles", "lock", "ID", String);
    VehicleInfo[vehicleid][Tank] = mysql_GetInt("vehicles", "tank", "ID", String);
    VehicleInfo[vehicleid][Oamt] = mysql_GetInt("vehicles", "oamt", "ID", String);
    VehicleInfo[vehicleid][Farbe1] = mysql_GetInt("vehicles", "farbe1", "ID", String);
    VehicleInfo[vehicleid][Farbe2] = mysql_GetInt("vehicles", "farbe2", "ID", String);
    VehicleInfo[vehicleid][Verkauft] = mysql_GetInt("vehicles", "verkauft", "ID", String);
    ID = mysql_GetInt("vehicles", "ID", "ID", String);
    if(VehicleInfo[vehicleid][Verkauft] == 0 && VehicleInfo[vehicleid][Oamt] == 0)
    {
    new Auto = CreateVehicle(VehicleInfo[vehicleid][Model],VehicleInfo[vehicleid][Pos][Auto_X],VehicleInfo[vehicleid][Pos][Auto_Y],VehicleInfo[vehicleid][Pos][Auto_Z],VehicleInfo[vehicleid][Pos][Auto_A],VehicleInfo[vehicleid][Farbe1],VehicleInfo[vehicleid][Farbe2],-1);
    SetVehicleHealth(Auto,VehicleInfo[vehicleid][Zustand]);
    Motor[Auto] = false;
    VehicleInfo[Auto][vID] = ID;
    GAS[Auto] = VehicleInfo[vehicleid][Tank];
    SetVehicleNumberPlate(Auto,kennzeichen);
    }
    return 1;
    }


    Meine DB:


    MFG :/

  • Beim Laden:
    VehicleInfo[index][vID] = index;
    zu:
    VehicleInfo[index][vID] = Auto;


    Und beim anderen Laden:
    VehicleInfo[Auto][vID] = ID;
    zu:
    VehicleInfo[vehicleid][vID] = Auto;


    Das wird nicht viel ändern, aber dann passt der Teil schonmal.
    Poste dann bitte mal den MySQL Log, der kommt, wenn du das Auto abholen willst. Mache dazu den mysql_debug an.

  • Jeffry
    wie benutze ich den mysql_debug? Habe es bei OnGameModeInit rein, dann kann ich aber nicht mehr aufm Server o.o Es erscheint einfach nicths ausser die "Uhr" oben rechts und unten links das TS³ Textdraw..



    public OnGameModeInit()
    {
    mysql_debug(1);

  • Jeffry


    Spoiler anzeigen
    Beim Laden:

    PAWN Quelltext

    Spoiler anzeigen
    VehicleInfo[index][vID] = index;

    Spoiler anzeigen
    zu:

    PAWN Quelltext

    Spoiler anzeigen
    VehicleInfo[index][vID] = Auto;

    Spoiler anzeigen
    Und beim anderen Laden:

    PAWN Quelltext

    Spoiler anzeigen
    VehicleInfo[Auto][vID] = ID;

    Spoiler anzeigen
    zu:

    PAWN Quelltext

    Spoiler anzeigen
    VehicleInfo[vehicleid][vID] = Auto;


    Da hat geholfen.. Funktioniert jetzt


    MFG



    E: Habe einen Warning bei den sachen..


    "warning 204: symbol is assigned a value that is never used: "ID" "


    Zeile:
    ID = mysql_GetInt("vehicles", "ID", "ID", String);

    2 Mal editiert, zuletzt von .Kid ()