Was soll daran nicht stimmen?
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
-
-
Die ersten zwei gehen ja das 3. geht ja nicht.
benutze mal anstatt else if nur if
geht es jetzt? -
Heyho
Ich hab da son kleinen "Warning" eigentlich sind warnings ja nichts schlimmes, nur sieht es dennoch hässlich aus bei einem Selfmade
Code...selfmade.pwn(349) : warning 213: tag mismatch Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase 1 Warning.
Code
Alles anzeigen-> Dies ist die Zeile -->if(isCarAnAhCar(vID) == false){ new string[128]; format(string, sizeof(string), "%s", mInfo[vModel][mName]); PlayerTextDrawSetString(playerid, Tacho_TD[playerid][9], string); PlayerTextDrawSetPreviewModel(playerid, Tacho_TD[playerid][1], GetVehicleModel(vID)); format(string, sizeof(string), "%s", mInfo[vModel][fuelTyp]); PlayerTextDrawSetString(playerid, Tacho_TD[playerid][13], string); format(string, sizeof(string), "%0.2f / %0.2f", tank[vID], mInfo[vModel][maxTank]); PlayerTextDrawSetString(playerid, Tacho_TD[playerid][15], string); printf("FahrzeugID: %i, Fahrzeugname: %s, Fahrzeugmodel: %i, Kraftstoffart: %s, Tank: %0.2f / %0.2f Liter", vID, mInfo[vModel][mName], GetVehicleModel(vID), mInfo[vModel][fuelTyp], tank[vID], mInfo[vModel][maxTank]); //setVehicleKM(playerid); }
Mein Stock dazu:
Codestock isCarAnAhCar(vID){ for(new i = 0; i < sizeof(ahCars); i++){ if(ahCars[i][id_x] == vID){ return true; }else{ return false; } } return 0; }
Ich hoffe ihr habt eine idee ich komme irgendwie immer durcheinander wann nun ein Stock und wann ein Callback genutzt werden sollte.
MfG
XonarZ//EDIT also ich musste statt if(isCarAnAhCar(vID) == false) ... einfach if(!isCarAnAhCar(vID)){ } machen und nun ist der warning weg
-
Noch zur Info:
Der Grund für die Warnung war, dass du ein boolean (false) mit einem Integer (was dir die Funktion zurück gibt) verglichen hast. Da passt der Tag (bool: und keiner) nicht überein, daher die Warnung.Warnungen können zwar ignoriert werden, sprich der Code wird trotzdem kompiliert, sollten aber nicht ignoriert werden, da es trotzdem zu Fehlern kommen kann. Daher immer alle Warnungen beheben.
Ein Callback nutzt du, wenn du die Funktion über einen Timer oder über mysql_pquery beispielsweise aufrufst. Einen stock (simple Funktion), wenn du diesen nur über direkte Code Zugriffe (also kein Timer, etc) aufrufst. Insofern hast du alles richtig gemacht.
-
Um es noch zu erwähnen, lösche das else aus der Schleife, das ist falsch, da es dann bei dem Ersten falschen Ergebnis false returnt.
#Handy
-
Um es noch zu erwähnen, lösche das else aus der Schleife, das ist falsch, da es dann bei dem Ersten falschen Ergebnis false returnt.
#Handy
Also so ?:
-
Das return false raus und das return 0 zu return false
-
Aus irgendeinen Bug gurnd wie immer bei pawn will er es nicht setzten
new pID,str[144];
if(sscanf(params,"u",pID))return SendClientMessage(playerid,COLOR_GREY, "Benutze /bcpd playerid");
PlayerTextDrawShow(pID,bcpdcard[pID][0]);
PlayerTextDrawShow(pID,bcpdcard[pID][1]);
PlayerTextDrawShow(pID,bcpdcard[pID][2]);
PlayerTextDrawShow(pID,bcpdcard[pID][3]);
format(str, sizeof(str), "%s", GetName(playerid));
PlayerTextDrawSetString(pID,bcpdcard[1][pID], str);
format(str, sizeof(str), "%s", GetName(playerid));
PlayerTextDrawSetString(pID,bcpdcard[2][pID], str);
format(str, sizeof(str), "%d.%d.%d", SpielerInfo[playerid][pDay],SpielerInfo[playerid][pMonth],SpielerInfo[playerid][pJahr]);
PlayerTextDrawSetString(pID,bcpdcard[3][pID], str);doch alles bleibt gleich... -.-
-
Nachdem du den Textdraw String geändert hast, musst du das Textdraw erneut mit PlayerTextDrawShow zeigen, damit man den neuen Text sieht.
-
habe ich jetzt geht der ganze befehl nicht mehr
debug] Run time error 4: "Array index out of bounds"
[debug] Attempted to read/write array element at index 29 in array of size 4
[debug] AMX backtrace:
[debug] #0 0048f480 in public ocmd_kacke(29, 8477560) in script.amx
[debug] #1 native CallLocalFunction () in samp-server.exe
[debug] #2 00006444 in public OnPlayerCommandText (29, 8477492) in -
-
Aktivier mal -d3, compile das Script neu und versuch dann den Fehler zu reproduzieren.
Dann zeigt er die genaue Zeile an, in der, der Fehler gefunden wurde.Brauchst du garnicht;
PlayerTextDrawSetString(pID,bcpdcard[2][pID], str);
Hier ist jedesmal die playerid und der Index vertauscht. -
wenn du mir sagst wie -d3 geht
aber ich habe mal max_players raus genommen teste grade neu//edit
gelöst new:PlayerText:bcpdcard[MAX_PLAYERS][4];
ich habe einfach max_players gelöscht und überall die 2te playerid raus so das es nur
PlayerTextDrawSetString(pID,bcpdcard[2], str); -
wie kann ich bsp. bei
case 0:
case1:zwei Sachen rein machen?
Will nicht nur bsp. Marker angezeigt bekommen sondern auch eine Nachricht dazu aber wenn man zweite Zeile macht kommen ERRORS kann mir jemand helfen haha -
So:
switch(listitem)
{
case 0:
{
//Sachen machen
}
case 1:
{
//Andere Sachen machen
}
} -
gelöst new:PlayerText:bcpdcard[MAX_PLAYERS][4];
ich habe einfach max_players gelöscht und überall die 2te playerid raus so das es nurDas ist nicht richtig, das funktioniert dann nur für einen Spieler.
So wie @LeonMrBonnie sagte, ist es richtig. Playerid und Index sind jedes Mal vertauscht. Zuerst die playerid, dann den Index. -
Das ist nicht richtig, das funktioniert dann nur für einen Spieler.So wie @LeonMrBonnie sagte, ist es richtig. Playerid und Index sind jedes Mal vertauscht. Zuerst die playerid, dann den Index.
egal für einen reicht es ja auch da es ja nur einen angezeigt wird den man es zeigt danke denoch euch beiden
-
egal für einen reicht es ja auch da es ja nur einen angezeigt wird den man es zeigt
Nein, die ID muss pro playerid gespeichert werden, sonst klappt es nicht, wenn du das Textdraw irgendwann bearbeiten oder löschen willst.
-
ich hab es doch gelöst es ist jetzt nur eine playerid und es geht
PlayerTextDrawShow(pID,bcpdcard[1]); -
Nein.
Beispiel:
Spieler A bekommt das Textdraw angezeigt, das Textdraw hat die ID 0, weil es das erste ist.
Die Variable hat den Wert 0.Spieler B bekommt das Textdraw irgendwann später auch erstellt und angezeigt, hat zuvor aber ein anderes Textdraw erstellt bekommen, dann hat sein Textdraw die ID 1. Die Variable damit auch.
Wenn du jetzt für Spieler A das Textdraw löschst, dann wird für Spieler A das Textdraw 1 gelöscht, sprich ein falsches.
Deine Variante funktioniert nur solange, wie du nicht mehr auf das Textdraw zugreifen willst, oder solange, alle Spieler das Textdraw mit der gleichen ID haben (Zufall).
-
Nein es geht nur an eine player id und wird auch für diese wieder gelöscht
aber geal jetze es geht ja