Car Slot System Funktioniert nicht ganz

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
  • Beitrag von Pascal. ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Jeffry:
    Habe ein kleines Problem, der sagt mir immer ich bin nicht in der nähe einer Tankstelle.
    Er ruft therotisch immer die ID 0 auf.


    new tkInfo[MAX_GAS_PICKUP][TanksysEnum] = {
    {1650,1944.5758,-1772.4338,13.3906}, // Gas-pickup1
    {1650,1939.2408,-1774.1803,13.3828}, // Gas-pickup2
    {1650,1004.2105,-940.2197,42.1797}, // Gas-pickup3
    {1650,1002.9594,-933.5105,42.1797}, // Gas-pickup4
    {1650,659.1233,-559.9279,16.3359}, // Gas-pickup5
    {1650,652.9409,-559.7982,16.3359}, // Gas-pickup6


    {1650,652.7424,-570.5248,16.3359}, // Gas-pickup7
    {1650,659.3297,-570.4598,16.3359}, // Gas-pickup8
    {1650,70.3961,1219.0920,18.8116}, // Gas-pickup9
    {1650,605.1962,1704.9261,6.9922}, // Gas-pickup10
    {1650,608.6716,1699.7888,6.9922}, // Gas-pickup11
    {1650,612.1439,1694.9742,6.9922}, // Gas-pickup12
    {1650,615.8878,1690.0388,6.9922}, // Gas-pickup13
    {1650,619.0166,1685.0979,6.9922}, // Gas-pickup14
    {1650,622.6285,1680.3275,6.9922}, // Gas-pickup15
    {1650,2147.7566,2757.2898,10.8203},// Gas-pickup16
    {1650,2148.3975,2747.7144,10.8203}, // Gas-pickup17
    {1650,2147.6809,2739.5132,10.8203}, // Gas-pickup18
    {1650,1596.8491,2206.8811,10.8203}, // Gas-pickup19
    {1650,1595.9824,2198.8271,10.8203}, // Gas-pickup20
    {1650,1594.7578,2189.2378,10.8203}, // Gas-pickup21
    {1650,2114.7007,912.0361,10.8203}, // Gas-pickup22
    {1650,2114.4224,920.3278,10.8203}, // Gas-pickup23
    {1650,2114.6304,930.1177,10.8203}, // Gas-pickup24
    {1650,2640.1975,1096.1158,10.8203}, // Gas-pickup25
    {1650,2640.4846,1106.2550,10.8203}, // Gas-pickup26
    {1650,2640.3726,1117.3439,10.8203} // Gas-pickup27
    };


    ocmd:fillcar(playerid,params[])
    {
    if(pInfo[playerid][pEingeloggt] == 0)return SCM(playerid,COLOR_GRAU,"Info: Du bist nicht Eingeloggt!");
    if(!IsPlayerInAnyVehicle(playerid))return SCM(playerid,COLOR_GRAU,"Du bist in keinem Fahrzeug!");
    new vID = GetPlayerVehicleID(playerid);
    for(new t=0; t<sizeof(tkInfo); t++)
    {
    if(tkInfo[t][tk_x] == 0.0)continue;
    printf("Tankstelle: %i",t);
    SetPVarInt(playerid,"tankstelle_Fill",t);
    break;
    }
    for(new i=0; i<sizeof(bsInfo); i++)
    {
    new id = GetPVarInt(playerid,"tankstelle_Fill");
    if(!HasCarMotor(vID))return SCM(playerid,COLOR_GRAU,"Dieses Fahrzeug besitzt kein Motor!");
    if(GetPVarInt(playerid,"tank_Rechnung")>0)return SCM(playerid,COLOR_GRAU,"Begleiche erst die Rechnung in der Tankstelle.");
    if(IsMotorOn(vID))return SCM(playerid,COLOR_GRAU,"Schalte erst den Motor ab bevor du Tanken tust.");
    if(!IsPlayerInRangeOfPoint(playerid,2,tkInfo[id][tk_x],tkInfo[id][tk_y],tkInfo[id][tk_z]))return SCM(playerid,COLOR_GRAU,"Du bist nicht in der nähe einer Tankstelle.");
    new string[128];
    if(!bsInfo[i][db_id])continue;
    if(bsInfo[i][b_id] !=2)continue;
    format(string,128,"Willkommen bei der Tankstelle.\nAktueller Preis pro Liter: %i$",bsInfo[i][b_gasprice]);
    ShowPlayerDialog(playerid,DIALOG_FILLCAR,DIALOG_STYLE_INPUT,"Tankstelle",string,"Tanken","Abbrechen");
    return 1;
    }
    return 1;
    }

  • Schreibe es so:
    ocmd:fillcar(playerid,params[])
    {
    if(pInfo[playerid][pEingeloggt] == 0)return SCM(playerid,COLOR_GRAU,"Info: Du bist nicht Eingeloggt!");
    if(!IsPlayerInAnyVehicle(playerid))return SCM(playerid,COLOR_GRAU,"Du bist in keinem Fahrzeug!");
    new vID = GetPlayerVehicleID(playerid);
    new string[128];
    if(!HasCarMotor(vID))return SCM(playerid,COLOR_GRAU,"Dieses Fahrzeug besitzt kein Motor!");
    if(GetPVarInt(playerid,"tank_Rechnung")>0)return SCM(playerid,COLOR_GRAU,"Begleiche erst die Rechnung in der Tankstelle.");
    if(IsMotorOn(vID))return SCM(playerid,COLOR_GRAU,"Schalte erst den Motor ab bevor du Tanken tust.");
    for(new i=0; i<sizeof(tkInfo); i++)
    {
    if(!bsInfo[i][db_id])continue;
    if(bsInfo[i][b_id] !=2)continue;
    if(!IsPlayerInRangeOfPoint(playerid,2,tkInfo[i][tk_x],tkInfo[i][tk_y],tkInfo[i][tk_z])) continue;
    format(string,128,"Willkommen bei der Tankstelle.\nAktueller Preis pro Liter: %i$",bsInfo[i][b_gasprice]);
    ShowPlayerDialog(playerid,DIALOG_FILLCAR,DIALOG_STYLE_INPUT,"Tankstelle",string,"Tanken","Abbrechen");
    return 1;
    }
    return SCM(playerid,COLOR_GRAU,"Du bist nicht in der nähe einer Tankstelle.");
    }


    Das return bei der if-Abfrage gehört nicht in die Schleife, wenn du mehrere prüfen willst.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Jetzt sagt er mir das ich den Motor abschalten soll, egal wo ich bin.
    Wenn ich den abgeschaltet habe, sagt er zu mir dass der Befehl nicht existiert.
    Dazu bekomme ich noch so ein Debug code:


  • Dann musst du es in die Schleife nach allen continues packen.
    ocmd:fillcar(playerid,params[])
    {
    if(pInfo[playerid][pEingeloggt] == 0)return SCM(playerid,COLOR_GRAU,"Info: Du bist nicht Eingeloggt!");
    if(!IsPlayerInAnyVehicle(playerid))return SCM(playerid,COLOR_GRAU,"Du bist in keinem Fahrzeug!");
    new vID = GetPlayerVehicleID(playerid);
    new string[128];
    if(!HasCarMotor(vID))return SCM(playerid,COLOR_GRAU,"Dieses Fahrzeug besitzt kein Motor!");
    if(GetPVarInt(playerid,"tank_Rechnung")>0)return SCM(playerid,COLOR_GRAU,"Begleiche erst die Rechnung in der Tankstelle.");
    if(IsMotorOn(vID))return SCM(playerid,COLOR_GRAU,"Schalte erst den Motor ab bevor du Tanken tust.");
    for(new i=0; i<sizeof(tkInfo); i++)
    {
    if(!bsInfo[i][db_id])continue;
    if(bsInfo[i][b_id] !=2)continue;
    if(!IsPlayerInRangeOfPoint(playerid,2,tkInfo[i][tk_x],tkInfo[i][tk_y],tkInfo[i][tk_z])) continue;
    if(!HasCarMotor(vID))return SCM(playerid,COLOR_GRAU,"Dieses Fahrzeug besitzt kein Motor!");
    if(GetPVarInt(playerid,"tank_Rechnung")>0)return SCM(playerid,COLOR_GRAU,"Begleiche erst die Rechnung in der Tankstelle.");
    if(IsMotorOn(vID))return SCM(playerid,COLOR_GRAU,"Schalte erst den Motor ab bevor du Tanken tust.");
    format(string,128,"Willkommen bei der Tankstelle.\nAktueller Preis pro Liter: %i$",tkInfo[i][b_gasprice]);
    ShowPlayerDialog(playerid,DIALOG_FILLCAR,DIALOG_STYLE_INPUT,"Tankstelle",string,"Tanken","Abbrechen");
    return 1;
    }
    return SCM(playerid,COLOR_GRAU,"Du bist nicht in der nähe einer Tankstelle.");
    }

  • Funktioniert leider auch nicht, er meint wieder das es fillcar nicht gibt.
    Folgender debug code der kam:

    Code
    [20:17:41] [debug] Run time error 4: "Array index out of bounds"
    [20:17:41] [debug]  Accessing element at index 15 past array upper bound 14
    [20:17:41] [debug] AMX backtrace:
    [20:17:41] [debug] #0 0005329c in public ocmd_fillcar (playerid=0, params[]=@000c0d6c " ") at myRL.p:5184
    [20:17:41] [debug] #1 native CallLocalFunction () from samp-server.exe
    [20:17:41] [debug] #2 000006f0 in public OnPlayerCommandText (playerid=0, cmdtext[]=@000c0d48 "/fillcar") at C:\Users\R5\Desktop\Pawnstar\cc\include\ocmd.inc:78
  • Ahh, ich sehe grade, dass da ja auch noch bsInfo's drin sind.
    Schreibe es so:
    ocmd:fillcar(playerid,params[])
    {
    if(pInfo[playerid][pEingeloggt] == 0)return SCM(playerid,COLOR_GRAU,"Info: Du bist nicht Eingeloggt!");
    if(!IsPlayerInAnyVehicle(playerid))return SCM(playerid,COLOR_GRAU,"Du bist in keinem Fahrzeug!");
    new vID = GetPlayerVehicleID(playerid);
    new string[128];
    if(!HasCarMotor(vID))return SCM(playerid,COLOR_GRAU,"Dieses Fahrzeug besitzt kein Motor!");
    if(GetPVarInt(playerid,"tank_Rechnung")>0)return SCM(playerid,COLOR_GRAU,"Begleiche erst die Rechnung in der Tankstelle.");
    if(IsMotorOn(vID))return SCM(playerid,COLOR_GRAU,"Schalte erst den Motor ab bevor du Tanken tust.");
    for(new i=0; i<sizeof(tkInfo); i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid,2,tkInfo[i][tk_x],tkInfo[i][tk_y],tkInfo[i][tk_z])) continue;
    if(!HasCarMotor(vID))return SCM(playerid,COLOR_GRAU,"Dieses Fahrzeug besitzt kein Motor!");
    if(GetPVarInt(playerid,"tank_Rechnung")>0)return SCM(playerid,COLOR_GRAU,"Begleiche erst die Rechnung in der Tankstelle.");
    if(IsMotorOn(vID))return SCM(playerid,COLOR_GRAU,"Schalte erst den Motor ab bevor du Tanken tust.");
    format(string,128,"Willkommen bei der Tankstelle.\nAktueller Preis pro Liter: %i$",tkInfo[i][b_gasprice]);
    ShowPlayerDialog(playerid,DIALOG_FILLCAR,DIALOG_STYLE_INPUT,"Tankstelle",string,"Tanken","Abbrechen");
    return 1;
    }
    return SCM(playerid,COLOR_GRAU,"Du bist nicht in der nähe einer Tankstelle.");
    }


    Geht's dann?

  • Weil du abfragst nahe welcher Tankstelle der Spieler ist, die Tankstellen haben nichts mit bsInfo zu tun.
    Ansonsten müsstest du es eben so schreiben:
    format(string,128,"Willkommen bei der Tankstelle.\nAktueller Preis pro Liter: %i$",bsInfo[2][b_gasprice]); //Die 2 ersetzen, mit der Business ID der Tankstelle.

  • Funktioniert nun, dass mit dem tank Preis habe ich etwas anders gemacht mit einer weiteren Schleife.
    Vielen Dank :)


    Sieht nun so aus:
    ocmd:fillcar(playerid,params[])
    {
    if(pInfo[playerid][pEingeloggt] == 0)return SCM(playerid,COLOR_GRAU,"Info: Du bist nicht Eingeloggt!");
    if(!IsPlayerInAnyVehicle(playerid))return SCM(playerid,COLOR_GRAU,"Du bist in keinem Fahrzeug!");
    new vID = GetPlayerVehicleID(playerid);
    new string[128];
    if(!HasCarMotor(vID))return SCM(playerid,COLOR_GRAU,"Dieses Fahrzeug besitzt kein Motor!");
    if(GetPVarInt(playerid,"tank_Rechnung")>0)return SCM(playerid,COLOR_GRAU,"Begleiche erst die Rechnung in der Tankstelle.");
    if(IsMotorOn(vID))return SCM(playerid,COLOR_GRAU,"Schalte erst den Motor ab bevor du Tanken tust.");
    for(new i=0; i<sizeof(bsInfo); i++)
    {
    if(!bsInfo[i][db_id])continue;
    if(bsInfo[i][b_id] !=2)continue;
    SetPVarInt(playerid,"biz_tank_ID",i);
    break;
    }
    for(new i=0; i<sizeof(tkInfo); i++)
    {
    new id = GetPVarInt(playerid,"biz_tank_ID");
    if(!IsPlayerInRangeOfPoint(playerid,2,tkInfo[i][tk_x],tkInfo[i][tk_y],tkInfo[i][tk_z])) continue;
    if(!HasCarMotor(vID))return SCM(playerid,COLOR_GRAU,"Dieses Fahrzeug besitzt kein Motor!");
    if(GetPVarInt(playerid,"tank_Rechnung")>0)return SCM(playerid,COLOR_GRAU,"Begleiche erst die Rechnung in der Tankstelle.");
    if(IsMotorOn(vID))return SCM(playerid,COLOR_GRAU,"Schalte erst den Motor ab bevor du Tanken tust.");
    format(string,128,"Willkommen bei der Tankstelle.\nAktueller Preis pro Liter: %i$",bsInfo[id][b_gasprice]);
    ShowPlayerDialog(playerid,DIALOG_FILLCAR,DIALOG_STYLE_INPUT,"Tankstelle",string,"Tanken","Abbrechen");
    return 1;
    }
    return SCM(playerid,COLOR_GRAU,"Du bist nicht in der nähe einer Tankstelle.");
    }

  • Beitrag von Jeffry ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Hehe :D
    Aber nein das Problem ist ja das ich die 2 nicht einfach rein schreiben kann, da die ID nicht die aufgelistete datenbank ID ist sondern eine andere
    die jedes Business zugewiesen bekommt sobald das geschäft gewählt wurde.
    Heißt es gibt eine "db_id" die automatisch hoch zählt und eine "b_id" das ist in dem Fall die 2.

  • Jeffry:
    Hab mal wieder ein Problem ;( Dieses Car system ist irgendwie etwas schwirig.
    Ich weiß nicht was daran falsch ist an der mID-400.
    Sobald ich diesen befehl aufrufe bekommen ich folgenden debug log:


    ocmd:slots(playerid,params[])
    {
    new string[250];
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(!strcmp(cInfo[i][besitzer], SpielerName(playerid)))
    {
    new carID = cInfo[i][c_slot];
    new mID = GetVehicleModel(cInfo[carID][model]);
    if(carID >0)
    {
    format(string,250,"%s",VehicleName[mID-400]);
    SCM(playerid,COLOR_GRAU,string);
    }
    }
    return 1;
    }
    return 1;



    Code
    [23:28:31] [debug] Run time error 4: "Array index out of bounds"
    [23:28:31] [debug]  Accessing element at negative index -400
    [23:28:31] [debug] AMX backtrace:
    [23:28:31] [debug] #0 0004e4dc in public ocmd_slots (playerid=0, params[]=@000c3c18 " ") at myRL.p:4925
    [23:28:31] [debug] #1 native CallLocalFunction () from samp-server.exe
    [23:28:31] [debug] #2 00000760 in public OnPlayerCommandText (playerid=0, cmdtext[]=@000c3bfc "/slots") at C:\Users\R5\Desktop\Pawnstar\cc\include\ocmd.inc:78