Kannst du uns mal Beispiel Koordinaten geben, bzw die die du verwendest.
Sonst ist das schwer zu reproduzieren, was du da machst ![]()
Kannst du uns mal Beispiel Koordinaten geben, bzw die die du verwendest.
Sonst ist das schwer zu reproduzieren, was du da machst ![]()
Woran kann das liegen?
Zu lange heißt meistens zu große Arrays.
Hast du irgendwo ausversehen...zu viele erstellt oder hast es geschafft...bestimmte Includes in Schleife zu Includen?! ![]()
Habe 2500 Liter abgeladen
Ja und jetzt?
Wenn, dann printe dir ALLE Variablen vorher und nacher..und sag genau, was nicht stimmt...
printf("Tankstelle: Diese Tankstelle hat %d Benzin erhalten.", floatadd(gebraucht, Tanke[i][tLiterBenzin]))
floatadd gibt immer einen Float Wert zurück.
Also musst du:
printf("Tankstelle: Diese Tankstelle hat %d Benzin erhalten.", floatround(floatadd(gebraucht, Tanke[i][tLiterBenzin])));
machen.
jemand da der mir evtl weiterhelfen könnte
Schauen wir uns das doch mal an ![]()
sscanf scheint glaube bei dir veraltet zu sein (du scheinst die Funktion zu nutzen, aber das Plugin ist um einiges besser), in diesem Fall, wo man auch nur einen Parameter nutzt, sollte man gänzlich darauf verzichten (erst bei einem String).
Schreib das alles mal so:
ocmd:a(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 1) return SendClientMessage(playerid, COLOR_RED, ""err""COLOR_HEX_WHITE""a404"");
if(!params[0] || params[0] == '\1') return SendClientMessage(playerid, COLOR_WHITE, "[Nutzung] /a(dminchat) [Text]");
new string[144];
format(string, sizeof(string), "%s "COLOR_HEX_YELLOW"%s"COLOR_HEX_WHITE": %s", admName(playerid), PlayerName(playerid), params);
SendToAdms(COLOR_WHITE, string);
return 1;
}
stock SendToAdms(COLOR, const msg[])
{
for(new i=GetPlayerPoolSize(); i!=-1; i--)
{
if(IsPlayerConnected(i) && PlayerInfo[i][pAdmin] >= 1) SendClientMessage(i, COLOR, msg);
}
return 1;
}
Alles anzeigen
Neuer Server, neu Anfangen.
Auf deinem Server sollten ganz andere Preissysteme herrschen.
Und bei dir kommt man auch durch ganz andere Arbeit etc an Dinge...wieso sollte man da irgendwas bekommen?
Fande so Systeme noch nie sinnvoll...und da haben die Server gar keinen Spaß gemacht..jeder kam mit fake screens und fertig xD
vor einigen Jahren war sowas Utopie.
Awas, gab schon vor 5 Jahren, wenn nicht noch länger her Zombie Server, die einen angegriffen haben oder so.
Halt alles um einiges schlechter realisiert, aber gegeben hat es das schon.
Gerade in der englischen bzw russischen Szene xD
Aber ich erinnere mich auch mal an einen Deutschen Server von Beavis und Blackace oder so xD
Ist es machbar NPC, bzw. Bots zu bauen, welche bspw. als annehmbare Gegner in einem Deathmatch dienen koennen?
Die sich also auf den Spieler zu bewegen, man diese vernichten kann, und auch den Gegner angreifen?
Jup, das geht mit FCNPC.
Zwar etwas fricklig, aber es wurde mal n gutes Include realisiert, was dir vielleicht weiter hilft: https://forum.sa-mp.com/showthread.php?t=663155
Ist das angeben eines :default wertes bei switch sinvoll? Bzw. warum macht man das? Oder dient das einfach nur als "else" ?
Dient einfach nur als else.
Muss man nicht angeben, der Code darunter würde ja quasi einfach weiter laufen.
Oben im Script einbaue findet er SCM nicht
Das muss natürlich unter das SCM oder schreibe es so:
#define SCME(%0,%1,%2,%3) format(string,sizeof(string),%2,%3),SendClientMessage(%0,%1,string)
Muss man da kein float davor machen oder so?
Entweder fällt dir lesen schwer, oder das kopieren.
Habe ich da irgendwo in meinem Code SendClientMessage stehen?
Und jetzt frage dich, wieso das du das?
Theoretisch muss man da kein Float vor machen, da du ja ganze Liter haben willst und das über das floatround gerundet wird.
Und..meine letzte Frage, in welcher Zeile der Fehler auftritt sagst du mir nicht und gibst uns keine Debug Informationen...
as Problem dabei ist dass das System manchmal 5x 5 Tokens gibt. Hat jemand eine Lösung dafür?
Du erstellst einen Timer für jeden Spieler und Loopst bei jedem Spieler durch alle Spieler o:
Daaavon ist abzuraten ![]()
//Edit:
Ahh wait, du willst, dass für jeden Spieler der Timer individuell gestartet wird.
Mach es so:
//Unter OnPlayerConnect
SetPVarInt(playerid,"reward_timer", SetTimerEx("PlayReward", 900000, true, "i", playerid));
//Unter OnPlayerDisconnect
KillTimer(GetPVarInt(playerid, "reward_timer"));
forward PlayReward(i);
public PlayReward(i)
{
if(!PlayerInfo[i][LoggedIn] || isPlayerAFK(i)) return 1;
PlayerInfo[i][Tokens] += 5;
SFM(i,COLOR_COP,"Reward: {FFFFFF}Du bekommst 5 Tokens!");
SavePlayer(i); //Are you sure about this?
return 1;
}
Alles anzeigen
Bist du sicher, dass du da den Spieler direkt speichern magst?
Also kannst du machen, aber reicht es nicht unter OnPlayerDisconnect oder dient das der Server-Crash Vorbeugung? ![]()
Schreibt du deinen Code eigentlich absichtlich so verschachtelt, ich habe dir soo oft schon gezeigt wie du das schöner machen kannst.
Und wiiiiiieso startest du Schleifen immer ab 1???
Ich habe dir jetzt schon 1000x erklärt, dass Arrays in Pawn/C/Java/C#/C++/Javascript und allen anderen C ähnlichen Sprachen bei 0 beginnt.
Lässt du das ab 1 starten, überspringst du immer deinen 1. Eintrag..und eine Tankstelle wird nicht funktionieren ![]()
//Pack das mal oben in dein Skript:
#define SCME(%0,%1,%2,%3) format(string,sizeof(string),%2,%3),SCM(%0,%1,string)
//Alles andere schreib mal so:
if(Spieler[playerid][pFraktion] != 17) return SCM(playerid, COLOR_WHITE, ERROR_FRAKTION);
new veh = GetPlayerVehicleID(playerid), model = GetVehicleModel(veh), trailer = GetVehicleTrailer(veh);
if(model != 514 && model != 515) return SCM(playerid,0xAFAFAF,"Du befindest dich in einem ungültigen Fahrzeug.");
if(!IsTrailerAttachedToVehicle(veh)) return SCM(playerid, COLOR_WHITE, "{AFAFAF}Du hast dein Produkt Anhänger nicht angeschlossen!");
if(GetVehicleModel(trailer) != 584) return SCM(playerid, COLOR_WHITE, "{AFAFAF}Du hast den falschen Anhänger. Du brauchst den Tank Anhänger!");
new i = GetTankstelle(playerid);
if(i == -1) return SCM(playerid,0xAFAFAF,"Du befindest dich an keiner Tankstelle.");
new gebraucht = floatround(Tanke[i][tMaxLiterBenzin] - Tanke[i][tLiterBenzin]);
new kosten = Tanke[i][tBenzinAnkauf]*gebraucht;
if(Tanke[i][tKasse] < kosten) return SCM(playerid, COLOR_WHITE, "{AFAFAF}Die Tankstelle hat nicht genügend Geld für den Benzin.");
if(!gebraucht) return SCM(playerid, COLOR_WHITE, "{AFAFAF}Dieses Tankstelle benötigt keinen Benzin mehr.");
if(Vehicle[trailer][vehBenzin] > gebraucht)
{
Vehicle[trailer][vehBenzin] -= gebraucht, Tanke[i][tMaxLiterBenzin] += floatadd(gebraucht, Tanke[i][tLiterBenzin]);
SCME(playerid,-1,"{21DD00}Es konnten nur %d Liter Benzin abgeliefert werden, die Tankstelle ist voll.", gebraucht);
}
else Tanke[i][tMaxLiterBenzin] += Vehicle[trailer][vehBenzin], Vehicle[trailer][vehBenzin] = 0;
SCME(playerid,-1,"{21DD00}Gehalt: %d$", kosten);
SCME(playerid,-1,"{21DD00}Benzin: %d/2500", Vehicle[trailer][vehBenzin]);
UpdateTankLabel(i, Tanke[i][tOwned]);
Tanke[i][tKasse] -= kosten, GiveMoney(playerid, kosten);
//Und die Funktion haste dann
stock GetTankstelle(playerid)
{
for(new i; i<MAX_TANKEN; i++)
{
if(Tanke[i][tCreated] == 1 && IsPlayerInRangeOfPoint(playerid, 5.0, Tanke[i][tPickupX], Tanke[i][tPickupY], Tanke[i][tPickupZ])) return i;
}
return -1;
}
Alles anzeigen
Es ist wichtig Redundanz zu vermeiden.
Desweiteren hattest du da was beim else vertauscht, der Code löst schon mal ein Problem, was dir bei deinem vorherigen Code nicht aufgefallen ist.
Du sagst zwar es werden irgendwo viele Zahlen ausgegeben...aber du das nicht wo...was soll das?
Sollen wir jetzt raten bei welcher Ausgabe das passiert?!?!
Gib mal präzise Infos, was genau ausgegeben wird...etc pp
Printe dir eventuell auch mal Werte und gib einen schönen Debug der Variablen an, dann kann man dir auch sofort helfen..
Immer diese halben Sachen und komischen Codes.
Generell könntest du dir soviel arbeit sparen, wenn du deine Systeme mal vernünftig auslagern würdest.
Ich wette bis zu 70% deiner Zeit verschwendest du damit redundanten Code zu schreiben.
Das ist die alte, gibt aber irgendwie eine bessere von jemanden hier aus dem Forum.
Jeffry hatte mal eine geschrieben: Nützliche Codeschnipsel
Meine Finde ich leider nicht mehr xD Kp wo ich die mal hingepackt hatte xD
Aber ich rate dir eh zu sscanf ganz ehrlich ![]()
Brauchst eigentlich nirgens strotk, dass kann man alles eleganter lösen ![]()
Fraktion ID: 1
Fraktion Materialien: 0
Fraktion Max Materialien: 0
Nein siehst du das.
Für Fraktion 1 werden keine Materialien geladen...
............
Manchmal hab ich echt das Gefühl, dass du mich verarschen willst ![]()
Was glaubst du bringt mir das?!
Du scriptest jetzt doch schon auch seit mindestens 3 Jahren...
Du musst mir natürlich den GANZEN Log schicken...weil die nachfolgenden prints doch entscheidend sind ![]()
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 ![]()