printf("Fraktion ID: %d", Frak[fraktion][frakIDx]);
Was passiert, wenn du da rein schreibst:
printf("Fraktion ID: %d", fraktion);
printf("Fraktion ID: %d", Frak[fraktion][frakIDx]);
Was passiert, wenn du da rein schreibst:
printf("Fraktion ID: %d", fraktion);
0/0
Siehst du das?
Das sagt aus, dass beide: Frak[1][frakEisen], Frak[1][frakMaxEisen])
0 sind.
Und genau das habe ich gemeint gehabt mit..printe ob das geladen wird.
Übrigens poste bitte immer ganze Befehle.
Wieso schickst du mir das von dem load Befehl?!?!
Wir reden hier nur über den unload Befehl.
Und bei der Fehlermeldung schreib doch einfach:
if(gebraucht == 0)
So das sind beide Command.
Jaaa und die sind falsch.
Wie ist es möglich...dass du es verkackt hast 4 Zeilen zu kopieren?!?!?!?!
else
{
Vehicle[vehicleid][vehMats] -= gebraucht;
Frak[1][frakEisen] += gebraucht;
Das hast du da stehen.
else
{
Vehicle[vehicleid][vehMats] = 0;
Frak[1][frakEisen] += Vehicle[vehicleid][vehMats];
Das hab ich da stehen...fällt dir irgendwie..irgendwas auf?!?!?!
Negativ ich kann mich ausrüsten also sind Materialien vorhanden.
habe dies schon getestet wen keine vorhanden sind kann man sich nicht ausrüsten.
Habe ich dich gefragt ob du dich ausrüsten kannst oder ob ich wissen will OB da was drinnen ist?
Nein ich habe dich gefragt WIE VIELE GENAU geladen werden und dafür musst du das printen.
Wie bereits ich geschreieben habe habe ich den fehler schon beim laden gesucht da liegt kein fehler da die anzeige genauso daran liegt (3DTextLabel)
Da steht es genauso in der DB: 245.000 und maximale Materialien 250.0000
Das hattest du nicht geschrieben, aber gut zu wissen.
Ja du solltest natürlich noch prüfen ob gebraucht 0 ist, dann ist ja klar, dass er nichts mehr benötigt und du kannst eine Fehlermeldung ausgeben.
in der Frak[1][frakEisen] das war leer.
Anscheinend hast du da einen Fehler beim Laden
Liest du eig was ich schreibe? xD
Und noch was...
der Log oben, stimmt doch überhaupt nicht mit dem Code...ein auf der vorherigen Seite...
Also printe dir das und zeig nochmal deinen aktuellen Befehl ![]()
Ja, stimmt ja alles.
Er hat 250k abgeladen, das bedeutet, in der Frak[1][frakEisen] das war leer.
Anscheinend hast du da einen Fehler beim Laden ![]()
printe dir das mal, bevor du da was einlädst.
bzw zeig mal wie du es lädst ![]()
Hab es soweit angepasst.
Nein, du hast vergessen beim else Vehicle[vehicleid][vehMats] = 0; zu setzen..so wie in meinem Code.
Aber wen die Fraktion nur 5.000 brauchen liefert er trotzdem 25k ab?
Bist du dir denn sicher, dass nur 5k gebraucht werden?
Printe dir doch mal gebraucht und schau, welcher Wert da berechnet wird.
Und ich hoffe dir ist klar, dass du angegeben hast, dass in das Lager 250k passen.
einfach nur hinfahren und die menge was das biz braucht abladen. Wen zuviel geladen ist bleibt der Rest bzw sollte es bleiben. Schließlich bezahlt man dafür so gesehn.
Dann musst du das berechnen.
new gebraucht = 250000-Frak[1][frakEisen]; //Das ist der Wert der benötigt wird, zur vollen Menge
if(Vehicle[vehicleid][vehMats] > gebraucht)
{
//Wenn er mehr dabei hat, als gebraucht wird
Vehicle[vehicleid][vehMats] -= gebraucht;
Frak[1][frakEisen] += gebraucht;
}
else
{
//Wenn er weniger dabei hat
Vehicle[vehicleid][vehMats] = 0;
Frak[1][frakEisen] += Vehicle[vehicleid][vehMats];
}
Alles anzeigen
Vehicle[vehicleid][vehMats] -= Vehicle[vehicleid][vehMats];
Also da steht ja quasi x -= x;
Eine äquivalente andere Schreibweise wäre x = x-x
Daraus resultiert logischerweise x=0 was du da machst.
Hinfahren Materialien abladen heißt wen ich 5000 Materialien ablade sind so gesehn wen ich 30.000 geladen habe
Wie willst du denn 5000 abladen, wenn du gar keinen Parameter angibst.
Vehicle[vehicleid][vehMats] -= Vehicle[vehicleid][vehMats];
Was glaubst du, macht diese Zeile? ![]()
Aber das Problem ist wen ich es ablade werden z.b die 30k Mats ersetzt mit den was ich abgeladen habe?
Was genau..willst du uns damit sagen?
Wen ja der fehler bleibt gleich :o
Dann printe dir doch mal, was er ausgibt in der Konsole...
new veh = GetPlayerVehicleID(playerid);
new trailer = GetVehicleTrailer(veh);
new model = GetVehicleModel(trailer);
printf("veh: %d | trailer: %d | model: %d",veh,trailer,model);
Was sagt er denn dann? ![]()
den Trailer mit der ID 435 angehängt
In diesem Fall müsste die vehicleid 435 sein.
Du willst aber bestimmt, dass die modelid 435 ist ![]()
Also häng ein GetVehicleModel noch drum herum ![]()
kann ich es auch so machen?
Nein.
Entweder das Gegenteil:
new Fraktion[MAX_FRAKTIONEN+1][FraktionDaten];
oder wirklich so, wie ich es geschrieben habe mit dem -1 ![]()
hoffe jemand kann mir helfen
Du machst es dir viel zu kompliziert, schreib es einfach nur so:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(PRESSED(KEY_JUMP) && !IsPlayerInAnyVehicle(playerid) && GetPlayerSpeed(playerid) > 20)
{
ClearAnimations(playerid);
ApplyAnimation(playerid,"ped","FALL_land",4.1,0,0,0,0,0,1);
}
return 1;
}
stock GetPlayerSpeed(playerid)
{
new Float:x,Float:y,Float:z;
GetPlayerVelocity(playerid,x,y,z);
return floatround(VectorSize(x,y,z)*170.0);
}
Alles anzeigen
#define MAX_FRAKTIONEN 1
Okay, alles klar ![]()
Das Problem ist du hast einen index.
Also schauen wir uns das mal an:
new x[1];
x[0] = 5; //Das ist kein Problem, denn ein Array fängt bei 0 an
x[1] = 3; //Das geht nicht...weil wir nur 1nen Index zur Verfügung haben und zwar die 0
Du versuchst aber, genau das untere auf x[1] zuzugreifen.
Die Lösung ist ganz einfach, du musst entweder überall Fraktion[f_ID-1] verwenden oder direkt nur 0 als Fraktion eingeben, da sich das ja auf den Index bezieht ![]()
MAX_FRAKTIONEN
...und wiie ist das definiert? ![]()
[19:33:16] [debug] Run time error 4: "Array index out of bounds"
[19:33:16] [debug] Attempted to read/write array element at index 1 in array of size 1
Da, das ist dein Fehler ![]()
Wie hast du denn Fraktion deklariert? ![]()
Ich komm auf den Fehler nicht ich änder das die ganze zeit und die fehler beleiben..
Dann schreib es doch mal ordentlich ![]()
Oder lager es aus.
Hinzufüge kann der Compeiler den Code nicht compeilen warum? bzw reagiert er nicht mehr
Vermutlich weil die Zeile zu lang ist.
Aber lager das doch aus:
ocmd@2:f,family(playerid,params[])
{
if(!IsLoggedIn(playerid)) return 1;
new string[128];
if(!params[0] || params[0] == '\1') return SCM(playerid, COLOR_WHITE, "{247BA6}* Benutze: {00CC00}(/f)amily [Nachricht]");
if(Spieler[playerid][pMuted] > 0) return SCM(playerid, COLOR_WHITE, "{AFAFAF}Du wurdest stummgeschaltet.");
if(!CheckFrakForFChat(playerid)) return SCM(playerid, COLOR_WHITE, ERROR_FRAKTION);
format(string ,sizeof(string), "{33CCFF}** (( %s %s: %s )) **", GetRankName(Spieler[playerid][pFraktion], Spieler[playerid][pRank]), GetName(playerid), params);
for(new i=GetPlayerPoolSize(); i!=-1; i--)
{
if(IsLoggedIn(i) && Spieler[i][pFraktion] == Spieler[playerid][pFraktion]) SCM(i, COLOR_WHITE, string);
}
return 1;
}
//Entweder so:
stock CheckFrakForFChat(playerid)
{
return (7 <= Spieler[playerid][pFraktion] <= 17);
}
//Oder so:
stock CheckFrakForFChat(playerid)
{
switch(Spieler[playerid][pFraktion])
{
case 7..17: return 1;
}
return 0;
}
Alles anzeigen
Warum kommt bei /makeleader 0 1 dass der Befehl nicht existiert?
Das kommt vermutlich, weil ein RuneTime Error aufgetreten ist.
Um diesen angezeigt zu bekommen und mehr Infos dazu zu erhalten, nutze crashdetect.
Dann wird dir im Log genau angezeigt, wo der Fehler ist ![]()