Hey ich bin an einem Farmer System und ich wollte es so machen das man mit dem Tractor auf dem Feld fährt und dann so Ca 20 Weizen Sähen muss aber wie Lege ich das Enum an und wie schmeiße ich die Pos dann in das enum kann mir jemand ein Beispiel zeigen ?
Farmer Weizen
- reaL.
- 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
-
-
-
Ja aber wie mache ich das für jeden Spieler
-
Spieler, die ID xxx eingesammelt/geerntet haben, bekommen die ID zugewiesen.
z.B.
Code
Alles anzeigen#define MAX_WEIZEN 2 // <-- maximal Anzahl erntbarer Weizen - hier mal 2 als Beispiel new Float:Weizen[MAX_WEIZEN][3] = // <-- Hier stehen die Koordinaten für die Weizen drin { {-212.582107, 140.611343, 3.053195}, {-209.474594, 149.842208, 4.111425} }; new WeizenObjectID[MAX_WEIZEN]; // <-- Die von SA-MP zurückgegebene ObjectID, damit man das Objekt korrekt erkennen und löschen kann new WeizenGeerntet[MAX_PLAYERS][MAX_WEIZEN]; // <-- Hier wird gespeichert, welche WeizenID der Spieler bereits geerntet hat /* ResetPlayerFarming: * * Muss immer beim Betreten des Spielers ausgeführt werden! * */ stock ResetPlayerFarming(playerid) { for (new i = 0; i < MAX_WEIZEN; i++) { WeizenGeerntet[playerid][i] = 0; // <-- 0 bedeutet, dass dieser Spieler den Weizen mit der ID i NICHT geerntet hat } return 1; } /* InitFarmingScript: * * Sollte beim Starten des Hauptscriptes (GameMode/FilterScript) ausgeführt werden! * */ stock InitFarmingScript() { for (new i = 0; i < MAX_WEIZEN; i++) { WeizenObjectID[i] = CreateObject(826, Weizen[i][0], Weizen[i][1], Weizen[i][2], 0.00, 0.00, 0.00); } return 1; } /* ExitFarmingScript: * * Sollte beim Beenden des Hauptscriptes (GameMode/FilterScript) ausgeführt werden! * */ stock ExitFarmingScript() { for (new i = 0; i < MAX_WEIZEN; i++) { if (!IsValidObject(WeizenObject[i])) continue; DestroyObject(WeizenObjectID[i]); } return 1; }
Den Rest müsstest du selber schreiben.
Im Prinzip fehlt die jetzt nur noch die Positionsabfrage, damit der Spieler den Weizen einsammeln kann. -
Beitrag von Exod_Martinez ()
Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Fail des Tages :D (). -
Sorry, aber das sind 3 Float Werte und nicht 2
-
Sorry, aber das sind 3 Float Werte und nicht 2
Habs auch grad gemerkt, sry
-
-
-
Also kann man es nicht so Benutzen
-
-
So, wie du es geschrieben hast, nicht.
-
Beitrag von reaL. ()
Dieser Beitrag wurde vom Autor gelöscht (). -
Ich will die ja nicht so erstellen ...
ich will das man mit dem Tractor über das Feld fährt und dann die Pos jede Sekunde Gespeichert wird und wenn er z.b 10 mal die Pos hat das dann die Pflanzen erstellt werden an den Positionen
-
@xCurry
Ich weiß zwar nicht genau was du meinst, aber ich habe mal dir ein Code geschrieben.
So habe ich dich verstanden ( siehe Code ).
Am besten du testest es inGame einmal und sagst mir dann bescheid, wenn musst du es vielleicht noch ein wenig anpassen.
Das Objekt, welches erstellt wird ist eine kleine grüne Pflanze.Es ist nur ein Beispiel Code, d.h es ist auf nichts angepasst.
-
nein so wie dort bloß ich will dann auch Die Pflanzen dann noch wachsen lassen nicht direkt so hoch Spawnen
Externer Inhalt youtu.beInhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt. -
Dann mach das doch so:
und ganz oben new objekt_id;
objekt_id = CreateObject(804, job_LastPos[0], job_LastPos[1], job_LastPos[2]-5, 0.0, 0.0, 0.0); // Pflanze wird an der letzen Position erstellt
MoveObject(objekt_id,job_LastPos[0], job_LastPos[1], job_LastPos[2], 3);Habs getestet es funktioniert.
-
Da hänge ich nicht wie soll ich das Enum erstellen wo die zwischengespeichert wird ?
-
Wenn du dir ein Beispiel an meinem Beispiel nimmst, würdest du vielleicht selbst weiter kommen.
Habs nicht getestet.z.B so!
OnGameModeInit
SetTimer("UpdateWeizen", 1000, true);
forward UpdateWeizen();
public UpdateWeizen()
{
for(new i=0; i < sizeof(Weizen); i++)
{
if(Weizen[i][w_Objekt] == -1)continue;
Weizen[i][w_Zustand] +=5;
if(Weizen[i][w_Zustand] 10){
DestroyObject(Weizen[i][w_Objekt]), CreateObject(ID, Weizen[i][w_X], Weizen[i][w_Y], Weizen[i][w_Z]+0.15, 0.0, 0.0, 0.0); // So "wächst" die Pflanze
}
}
}
enum enum_Weizen
{
w_ID,
w_Besitzer[MAX_PLAYER_NAME],
w_Objekt, // Die Pflanze
Float:w_X,
Float:w_Y,
Float:w_Z,
w_Zustand // Dafür das die Pflanzen wachsen
}
new Weizen[100][enum_Weizen]; -
Habe es hinbekommen
Funktioniert nun alles//edit
Wie erstelle ich eine Zone für das Feld ?
Weil ich abfragen will ob er noch auf dem Feld ist -
IsPlayerInArea(playerid, Float:MinX, Float:MinY, Float:MaxX, Float:MaxY)
{
new Float:X, Float:Y, Float:Z;GetPlayerPos(playerid, X, Y, Z);
if(X >= MinX && X <= MaxX && Y >= MinY && Y <= MaxY) {
return 1;
}
return 0;
}
Damit sollte es funktionieren.