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.
Wieder das gleiche, er meinte bin nicht in der nähe.
Schreibe die Schleife so, das hatte ich übersehen:
for(new i=0; i<sizeof(tkInfo); i++)
Was wurde dort verändert? Sehe eigentlich keine Veränderung
Im sizeof stand zuvor bsInfo.
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:
[13:16:02] [debug] Run time error 4: "Array index out of bounds"
[13:16:02] [debug] Accessing element at index 15 past array upper bound 14
[13:16:02] [debug] AMX backtrace:
[13:16:02] [debug] #0 00053424 in public ocmd_fillcar (playerid=0, params[]=@000c0d6c " ") at myRL.p:5187
[13:16:02] [debug] #1 native CallLocalFunction () from samp-server.exe
[13:16:02] [debug] #2 000006f0 in public OnPlayerCommandText (playerid=0, cmdtext[]=@000c0d48 "/fillcar") at C:\Users\R5\Desktop\Pawnstar\cc\include\ocmd.inc:78
[13:16:19] [debug] Run time error 4: "Array index out of bounds"
[13:16:19] [debug] Accessing element at index 15 past array upper bound 14
[13:16:19] [debug] AMX backtrace:
[13:16:19] [debug] #0 00053424 in public ocmd_fillcar (playerid=0, params[]=@000c0d6c " ") at myRL.p:5187
[13:16:19] [debug] #1 native CallLocalFunction () from samp-server.exe
[13:16:19] [debug] #2 000006f0 in public OnPlayerCommandText (playerid=0, cmdtext[]=@000c0d48 "/fillcar") at C:\Users\R5\Desktop\Pawnstar\cc\include\ocmd.inc:78
Alles anzeigen
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:
[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
Welche der verwendeten Variablen bzw Arrays hast du mit [15] deklariert?
Ne hatte eig gedacht ob ich eine Zahl definiere.
Das kann ich denke raus nehmen, und die varable so heißen lassen
new tkInfo[][tankSystem] = {
{..}
};
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?
Warum tkInfo[i][b_gasprice]?
Dies gehört doch zu bsInfo[i][b_gasprice].
Zeile:
format(string,128,"Willkommen bei der Tankstelle.\nAktueller Preis pro Liter: %i$",tkInfo[i][b_gasprice]);
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.");
}
Hehe
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.
Ahhja, dann gibt es natürlich Sinn. Alles richtig gemacht dann, vergiss was ich zuvor gesagt habe.
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;
[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