Wenn ich PInfo[playerid]{aFahrstunde] = 0; mache wird es auf 0 gesetzt oder wird sozusagen + 0 gerechnet weil das funktioniert nicht irgendwie aslo aFahrstunde ist nicht auf 1 oder er setzt das automatisch auf 0 wenn ich reingehe
Scheine an Fahrzeugen zuordnen und abfragen
- Jameso
- Geschlossen
- Erledigt
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
-
-
Das liegt daran, dass es zu 0 gesetzt wird, wenn du einsteigst. Das Fahrzeug müsste auch zurück gesetzt werden.
Schreibe es so:
if(pInfo[playerid][aFahrstunde] == 1 && oldstate == PLAYER_STATE_DRIVER)
{
RemovePlayerFromVehicle(playerid);
SetVehicleToRespawn(pInfo[playerid][aFahrstundeVeh]);
pInfo[playerid][aFahrstunde] = 0;
}Edit:
GetPlayerVehicleID geht nach dem Aussteigen nicht mehr, du bist ja in keinem Fahrzeug mehr. Speichere die vehicleid beim Einsteigen in die Spielervariable und nutze das anstatt GetPlayerVehicleID beim Aussteigen. -
SetVehicleToRespawn(pInfo[playerid][aFahrstundeVeh]);
kann man das dahinter nicht weg lassen sondern nur das mit toSpawn wie am Anfang//Edit sollte lesen lernen
Ist das nicht komplizierter, also wie erstelle ich diese Variable ich finde das so mega kompliziert
-
Ist das nicht komplizierter, also wie erstelle ich diese Variable ich finde das so mega komplizier
Füge es dem enum hinzu, da wo die andere Variable auch steht.
Und dann beim Einsteigen in das Fahrzeug, wenn der Spieler im Fahrstunde Modus ist und newstate == PLAYER_STATE_DRIVER ist, dann setzt du die Variable gleich GetPlayerVehicleID. Du speicherst damit die vehicleid, damit diese auch nach Verlassen des Fahrzeugs noch bekannt ist.
-
Habe ich was falsch gemacht?
Codeif(pInfo[playerid][aFahrstunde] == 1 && newstate == PLAYER_STATE_DRIVER) { pInfo[playerid][FahrstundeVID] = GetPlayerVehicleID(playerid); }
Ich habe bemerkt das wenn die Fahrstunde gestartet ist, das wenn ich auf ein Fahrrad z.b steige um schnelle zu den Autos zu kommen und ich dann absteige die Fahrstunde beendet wird,
Ich habe ja new Fahrschulauto[ 50 ];Codeif(pInfo[playerid][aFahrstunde] == 1 && oldstate == PLAYER_STATE_DRIVER) { RemovePlayerFromVehicle(playerid); SetVehicleToRespawn(GetPlayerVehicleID(playerid)); pInfo[playerid][aFahrstunde] = 0; SendClientMessage(playerid,-1,"{c45461}Deine Fahrstunde wurde beendet, du hast das Fahrschul-Auto verlassen."); }
-
Dann musst du prüfen, ob es sich um ein Fahrschulauto handelt, beim Einsteigen:
if(pInfo[playerid][aFahrstunde] == 1 && newstate == PLAYER_STATE_DRIVER)
{
new vid = GetPlayerVehicleID(playerid);
for(new i = 0; i < sizeof(Fahrschulauto); i++)
{
if(vid == Fahrschulauto[i])
{
pInfo[playerid][FahrstundeVID] = vid;
break;
}
}
}Und beim Aussteigen prüfen, ob der Spieler auch in einem solchen Fahrzeug war, das geht in dem Falle dann recht einfach:
if(pInfo[playerid][aFahrstunde] == 1 && oldstate == PLAYER_STATE_DRIVER && pInfo[playerid][FahrstundeVID] != 0)
{
SetVehicleToRespawn(pInfo[playerid][FahrstundeVID]);
pInfo[playerid][aFahrstunde] = 0;
pInfo[playerid][FahrstundeVID] = 0;
SendClientMessage(playerid,-1,"{c45461}Deine Fahrstunde wurde beendet, du hast das Fahrschul-Auto verlassen.");
} -
Oke gut danke, habe jetzt noch hinzugefügt das der Checkpoint auch noch entfernt wird.
Jetzt möchte ich was haben aber weiß die Idee nicht umzusetzten
Wenn man eine Geschwindigkeit ( Habe das Tachosystem von MrMonat ) überschreitet sagen wir mal 80Km/h soll der Spieler einen Fehlerpunkt bekommen was einfach in einer Variable abgespeichert wird und am ende nach der Prüfung gezeigt wird also wenn er mehr als 7 Strafpunkte hat kriegt er den Schein nicht, man kann auch hinzufügen das wenn der Spieler das Auto Schaden hinzufügt er auch da einen Fehlerpunkt bekommt, wie soll ich anfangen
-
Die Geschwindigkeit kannst du mit [wiki]GetVehicleVelocity[/wiki] auslesen. Dabei kannst du dich an der Berechnung im Tacho orientieren.
Den Schaden am Auto kannst du mit [wiki]GetVehicleHealth[/wiki] auslesen.Wenn der Spieler also zu schnell ist, kannst du ihm per Variable einen Fehlerpunkt geben.
Außerdem kannst du am Prüfungsende nachgucken, ob der Spieler zu viel Schaden am Auto verursacht hat. -
Sagen wir aber der Spieler überschreitet die 80Km/h dann wird ja nur beim überschreiten ein Fehlerpunkt hinzugefügt dann kann er ja die ganze Zeit drüber fahren
-
Nein, das musst du mit einem Timer regeln. Dann kannst du z. B. alle 5 Sekunden einen Fehlerpunkt dafür vergeben.
-
-
Habe noch nie mit Wurzeln oder ähnliches gearbeitet, woher weiß ich denn wann 80Km/h sind und wie frage ich das dann mit der Wurzel ab
-
Du musst mit der Zahl arbeiten, die der Tacho als Geschwindigkeit ausgibt.
-
Verstehe allein das normale Tacho nicht einmal also Zeile 3. steht ja am ende "" woher weiß er das da die Km/h reinkommen, das ist mir glaube ich zu schwer fürs erste reicht auch das Simple System
Code
Alles anzeigenfor(new i=0; i<MAX_PLAYERS; i++) { textdraw_1[i] = TextDrawCreate(556.000000, 337.000000, ""); TextDrawFont(textdraw_1[i], 2); TextDrawLetterSize(textdraw_1[i], 0.429166, 2.049999); TextDrawTextSize(textdraw_1[i], 400.000000, 17.000000); TextDrawSetOutline(textdraw_1[i], 1); TextDrawAlignment(textdraw_1[i], 1); TextDrawColor(textdraw_1[i], 1296911871); TextDrawBoxColor(textdraw_1[i], 50); TextDrawSetProportional(textdraw_1[i], 1); } SetTimer("sekunde",90, true);
-
Irgendwo dürftest du die Funktion [wiki]TextDrawSetString[/wiki] finden, die die aktuelle Geschwindigkeit einträgt.
Dabei findest du auch die Berechnung der Stundenkilometer. -
Code
Alles anzeigenpublic sekunde() { new string[15]; for(new i=0; i<MAX_PLAYERS; i++) { if(!IsPlayerConnected(i) && !IsPlayerInAnyVehicle(i)) continue; format(string,sizeof(string),"%ikm/h", getPlayerSpeed(i)); TextDrawSetString(textdraw_1[i], string); } return true; }
Kann ich das einfach so abfragen if getPlayerSpeed > 80 return pInfo[playerid][aFehler]=+1; dann noch irgendwo ein Gametext anzeigen lassen das man zu schnell fährt.
Und sollte ich auch ein neues public dafür erstellen und da halt einen Timer noch dazu also
SetTimer("tofast",1500, true);
-
Im Prinzip müsste das so klappen.
-
Code
Alles anzeigenforward tofast(); public tofast() { new string[15]; for(new i=0; i<MAX_PLAYERS; i++) { if(!IsPlayerConnected(i) && !IsPlayerInAnyVehicle(i)) continue; for(new p; p < sizeof(Fahrschulauto); p++) { new vID=GetPlayerVehicleID(playerid); if(vID == Fahrschulauto[p] && pInfo[playerid][aFahrstunde] == 1) { if(getPlayerSpeed > 80) { GameTextForPlayer(playerid, "~w~Erlaubt sind 80Km/h!", 5000, 3); pInfo[playerid][aFahrstunde] =+1; } } } } return true; }
Ich verstehe nicht warum da z.b bei Zeile 2356. gefragt wird ob der Spieler nicht Connected ist und nicht in einem Auto ist
Code
Alles anzeigen(2359) : error 017: undefined symbol "playerid" (2360) : error 017: undefined symbol "playerid" (2362) : error 076: syntax error in the expression, or invalid function call (2364) : error 017: undefined symbol "playerid" (2365) : error 017: undefined symbol "playerid" (2365) : warning 215: expression has no effect (2353) : warning 204: symbol is assigned a value that is never used: "string" Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase 5 Errors.
-
Du musst playerid in i ändern. Außerdem fehlt bei getPlayerSpeed wahrscheinlich ein Parameter (ebenfalls i).
Außerdem wird pInfo[playerid][aFahrstunde] =+1; zu pInfo[i][aFahrstunde] += 1; und den definierten string brauchst du ebenfalls nicht mehr.
-
Okey gut, bin stolz auf mich das ich das mit dem String geschafft habe haha
Code
Alles anzeigenif(pInfo[playerid][aFehler] > 7) { new string[250]; format(string,sizeof(string)," {008E00}•{FFFFFF}Du hast bei der Prüfung {008E00}%s{FFFFFF}/7 Fehler gemacht.\n {008E00}•{FFFFFF}Herzlichen Glückwunsch, du hast die Fahrprüfung {008E00}bestanden{FFFFFF}!",pInfo[playerid][aFehler]); ShowPlayerDialog(playerid, DIALOG_FAHRSCHULE1, DIALOG_STYLE_MSGBOX, "Los Santos Fahrschule", "string", "Verstanden", ""); SetVehicleToRespawn(pInfo[playerid][FahrstundeVID]); ClearCheckpoint<FAHRSCHUL_ROUTE>(playerid); pInfo[playerid][aFahrstunde] =-1; pInfo[playerid][aFehler] = 0; } else if(pInfo[playerid][aFehler] > 7) { new string[250]; format(string,sizeof(string)," {c45461}•{FFFFFF}Du hast bei der Prüfung {c45461}%s{FFFFFF}/7 Fehler gemacht.\n {c45461}•{FFFFFF}Du hast zu viele Fehler gemacht und hast somit die Fahrprüfung {c45461}nicht {FFFFFF}bestanden!",pInfo[playerid][aFehler]); ShowPlayerDialog(playerid, DIALOG_FAHRSCHULE1, DIALOG_STYLE_MSGBOX, "Los Santos Fahrschule", "string", "Verstanden", ""); SetVehicleToRespawn(pInfo[playerid][FahrstundeVID]); ClearCheckpoint<FAHRSCHUL_ROUTE>(playerid); pInfo[playerid][aFahrstunde] =-1; pInfo[playerid][aFehler] = 0; } }
Ich habe immer noch nicht verstanden bei Zeile 9. und 19. steht ja = 0 ; wird es dann auf 0 gesetzt oder wird +0 gesetzt oder muss ich doch == schreiben?`
Glaube einer hat die Frage schon beantwortet aber ich habe es vergessen.
-
Ein = reicht aus.
Was mir allerdings aufgefallen ist:
if(pInfo[playerid][aFehler] > 7)
else if(pInfo[playerid][aFehler] > 7)