Zum Inhalt springen
Oldtime

Zufällige Objekte spawnen lassen

Empfohlene Beiträge

Hallo,

ich möchte die DC Variante von Gazala modden. Und zwar so, dass zufällige Objekte spawnen. Also das z.B. an einer Stelle ein Panzer steht, jemand einsteigt und wegfährt und an der gleichen Stelle als nächstes vielleicht ein Heli erscheint.

Ich habe schon danach gesucht, aber bisher nichts in der Richtung gefunden. Ich weis nicht mal ob das überhaupt möglich ist. Bisher sind alle meine Versuche gescheitert.

Wie funktioniert der Befehl, der Zufallszahlen erzeugt ?

Ich hab in verschiedenen BF Dateien 2 Befehle dafür gefunden.

CRD_None/x/x/x -Die x stehen für Zahlen. Aber was bedeuten sie?

CRD_Uniform/x/x/x -Auch hier stehen die x wieder für Zahlen, aber wo ist der Unterschied zwischen den Befehlen.

Ich hab das jetzt folgendermaßen versucht:

OST:

ObjectTemplate.create ObjectSpawner HeliSpawner

ObjectTemplate.setObjectTemplate 1 Mi24d

ObjectTemplate.setObjectTemplate 2 AH64

ObjectTemplate.setObjectTemplate 3 M2A3

ObjectTemplate.setObjectTemplate 4 T72

ObjectTemplate.setObjectTemplate 5 M1A1

ObjectTemplate.setObjectTemplate 6 M163

ObjectTemplate.setObjectTemplate 7 Shilka

ObjectTemplate.setObjectTemplate 8 Humvee

ObjectTemplate.setObjectTemplate 9 BRDM2

ObjectTemplate.setObjectTemplate 10 HUmvee_Tow

ObjectTemplate.setObjectTemplate 11 BRDM2

ObjectTemplate.setObjectTemplate 12 AA_allies

ObjectTemplate.setObjectTemplate 13 ZPU-4

ObjectTemplate.setObjectTemplate 14 F16

ObjectTemplate.setObjectTemplate 15 Mig29

ObjectTemplate.setObjectTemplate 16 A10_B

ObjectTemplate.setObjectTemplate 17 SU-25

ObjectTemplate.setObjectTemplate 18 AC-130

ObjectTemplate.setObjectTemplate 19 M-109

ObjectTemplate.setObjectTemplate 20 M-1974

ObjectTemplate.MinSpawnDelay 1

ObjectTemplate.MaxSpawnDelay 80

ObjectTemplate.SpawnDelayAtStart 0

ObjectTemplate.TimeToLive 45

ObjectTemplate.Distance 40

ObjectTemplate.DamageWhenLost 20

ObjectTemplate.MaxNrOfObjectSpawned 2

Das mit den 20 Teams funktioniert normalerweise.

OS:

Var v_Team

CRD_UNIFORM/20/0/1 -> v_Team

Object.create HeliSpawner

Object.absolutePosition 1532.839111/42.754700/1583.573853

Object.rotation 0.000000/0.000000/0.000000

Object.setOSId 0

Object.setTeam v_Team

Die Idee dahinter ist halt, das der HeliSpawner 20 unterschiedliche Fahrzeuge/Objekte hat, je nach Team. Damit diese auch spawnen, muss OSId 0 sein.

Nun wollte ich eine Variable erzeugen, die eine Zufallszahl von 1-20 enthält. Diese Zahl sollte dann bei setTeam von BF als Team verwendet werden.

Das klappt leider nicht. Wenn ich das Serverseitig versuche, lande ich auf dem Desktop, mache ich es Client seitig, stehe ich ohne Fahrzeuge in der Einöde rum.

Jetzt ist die Frage warum geht das nicht, bzw kann das überhaupt gehen ?

Da ich wie oben bereits geschrieben keine Ahnung hab, was die Zahlen hinter CRD_None oder CRD_Uniform bedeuden hab ich natürlich auch nicht die geringste Ahnung was die für ne Zahl erstellen. Ich brauch eine ganze Zahl ohne Komma von 1-20 und sie sollte sich ändern, nachdem das Fahrzeug zerstört oder wegbewegt wurde.

Dann wäre noch die Frage, wie BF diese Spawner verwaltet. Also wenn die OST nur einmal eingelesen wird, die Teams dann feststehen und sich nur noch durch Flaggeneinnahme ändern, dann bringt meine Aktion wohl gar nichts.

Kann mir jemand helfen, oder kennt jemand eine bessere Möglichkeit? Wenn möglich Serverseitig.

Bearbeitet von Oldtime
Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke Poow,

ich hab deinen tip aber noch nicht versucht. Ich hab erstmal mit meiner Methode versucht weiterzukommen. Wenn ich das richtig gesehen hab, Spawnt bei deiner Version hoch oben ein Willy. Da ich aber nachezu alle Objekte zufällig spawnen lassen möchte, dürfte der Luftraum ziemlich voll werden. (Auch wenns sehr weit oben ist.)

Ich hab sowas ähnliches mal getestet um zusätzliche Spawnpunkte in eine Map zu packen. Dafür musste ich 2 Uboote oben in der Luft spawnen lassen. Das lief soweit ganz ok auf meinem Server, nur das ich die nicht unsichtbar bekommen hab. Vorallem die Anzeige auf der Minimap, wenn man zu nahe kam hat mich gestört. Was aber noch schlimmer ist, ab und zu kam es zu rucklern auf unserem Gameserver. Keine Ahnung ob das vielleicht nicht auch was mit den Rucklern / Abbrüchen zu tun hatte, die es vor einiger Zeit gab, aber nachem ich diese schwebenden Uboote mit den Spawpunkten entfernt habe ging es wieder ohne ruckeln.

Daher wollte ich erstmal mit meiner Variante weitermachen. Es hat jetzt auch zum Teil geklappt. Das Problem, das ich auf dem Desktop landete lag entweder an zu vielen Teams oder einem anderen Problem mit einem Spawner. Ich hab die OST neu erstellt und jetzt nur noch 9 Teams pro Spawner benutzt.

Jetzt wird die Map korrekt geladen und jenachdem was ich bei der Variable V_Team eingebe erscheint entweder das entsprechende Fahrzeug oder gar nichts. Er nimmt nur keine Zufallszahl und scheint auch keine Mathematischen funktionen an. Ich hab jetzt verschiedene Parameter getestet aber kann immer nur ganz normale die Fahrzeuge spawnen lassen.

v_Team = CRD_UNIFORM/1/9/0 - Keine Fahrzeuge

v_Team = CRD_UNIFORM/1/9/1 - Keine Fahrzeuge

v_Team = 7 - Nur Shlika´s, wie erwartet

v_Team = CRD_None/9/0/0 - Keine Fahrzeuge

v_Team = CRD_None/1/9/0 - Keine Fahrzeuge

v_Team = CRD_NORMAL/9/1/0 - Keine Fahrzeuge

v_Team = 3 + 5 - Keine Fahrzeuge

v_Team = 3+5 - Es spawnen M2A3 (Team 3)

v_Team = 3 +5 - Keine Fahrzeuge

v_Team = 3,4 - Es spawnen M2A3 (Team 3)

v_Team = 6/2 - Es spawnen M163 (Team 6)

v_Team = (CRD_UNIFORM/1/9/0) - Keine Fahrzeuge

v_Team = v_Zaehler - Zaehler hatte Wert 9, es spawnt Fahrzeug 9

v_Team = 2*3 - Es Spawnen Ah64 (Team 2)

v_Team = 2,3 - Es Spawnen Ah64 (Team 2)

v_Team -> v_Team + 1 - Keine Fahrzeuge

Ich kann immer nur Fahrzeuge von einem Bestimmten Team spawnen lassen und hab keine Möglichkeit gefunden das Team zufällig oder nachträglich zu ändern. Es wird kein +-*/: oder sonstwas akzeptiert.

Bearbeitet von Oldtime
Link zu diesem Kommentar
Auf anderen Seiten teilen

Da ich mit meiner Idee nicht mehr wirklich weitergekommen bin, hab ich den Tipp von Poow versucht umzusetzen.

Das klappt aber nicht ganz so wie gewünscht. Es erscheinen zwar verschiedene Fahrzeuge, aber es kommen alle Fahrzeuge auch wenn die anderen noch dort stehen. Das ist zwar auf den ersten Blick recht witzig, aber kaum spielbar. Und mit dem Original einstellungen fielen die alle wie Regen vom Himmel.

Da ich beim ersten Versuch alle Spawner zufällig spawnen lassen hab, ist mein Server ganz schön in die Knie gegangen. Hunderte Fahrzeuge fielen vom Himmel.

Wenn ich die Spawnzeit ändere, dauert es zwar länger bis das nächste Fahrzeug kommt, aber es kommt trotzdem auch wenn das andere noch da ist.

th_ScreenShot9_1.jpg

th_ScreenShot12_1.jpg

th_ScreenShot16_1.jpg

Wie kann ich machen, dass das nächste Fahrzeug erst kommt, wenn das vorherige wegefahren oder vernichtet wurde?

ObjectTemplate.MaxNrOfObjectSpawned hab ich schon auf 1 gesetzt. Das bewirkt aber nur das von Jeder Fahrzeug Art nur eins kommt. Aber alle halt auf einmal.

Hier mein Code:

ObjectTemplate.Active Willy

rem ObjectTemplate.criticalDamage 50

ObjectTemplate.SpawnDelay 10

ObjectTemplate.hpLostWhileCriticalDamage 0.4

ObjectTemplate.addTemplate DPV

ObjectTemplate.setPosition 0/-100/0

ObjectTemplate.setRotation 0/0/0

ObjectTemplate.setRandomGeometries 3

ObjectTemplate.HoldObject 1

ObjectTemplate.create ObjectSpawner DPV1

ObjectTemplate.setObjectTemplate 2 AH64

ObjectTemplate.setSpawnPositionOffset 0/0/0

ObjectTemplate.SpawnDelay 10

ObjectTemplate.SpawnDelayAtStart 0

ObjectTemplate.TimeToLive 120

ObjectTemplate.Distance 200

ObjectTemplate.DamageWhenLost 5

ObjectTemplate.team 2

ObjectTemplate.MaxNrOfObjectSpawned 1

ObjectTemplate.create ObjectSpawner DPV2

ObjectTemplate.setObjectTemplate 2 BM21

ObjectTemplate.setSpawnPositionOffset 0/0/0

ObjectTemplate.SpawnDelay 10

ObjectTemplate.SpawnDelayAtStart 0

ObjectTemplate.TimeToLive 120

ObjectTemplate.Distance 200

ObjectTemplate.DamageWhenLost 10

ObjectTemplate.team 2

ObjectTemplate.MaxNrOfObjectSpawned 1

ObjectTemplate.create ObjectSpawner DPV3

ObjectTemplate.setObjectTemplate 2 M1A1

ObjectTemplate.setSpawnPositionOffset 0/0/0

ObjectTemplate.SpawnDelay 10

ObjectTemplate.SpawnDelayAtStart 0

ObjectTemplate.TimeToLive 120

ObjectTemplate.Distance 200

ObjectTemplate.DamageWhenLost 10

ObjectTemplate.team 2

ObjectTemplate.MaxNrOfObjectSpawned 1

Oder hat noch jemand eine Idee wie ich mit den Variablen in BF rechnen kann? Damit wäre das ganze kein Problem, wenn ich wüsste wie die Befehle Lauten. Ich kann Variablen verschiedene Werte zuweisen, aber sie nur vergleichen mit >, <, >=, <= und dann halt eine Aktion ausführen. Aber ich kann die Werte nicht mit +-*:&/ oder sonstwas verändern. Das von Basic bekannte V_Wert = V_Wert + 1 funktioniert dementsprechend auch nicht. Und bei den Zufallszahlen geht auch nichts, evtl kommt dabei eine Kommazahl raus, mit der der SetTeam Befehl nichts anfangen kann. Wär schön, wenn noch jemand ne Idee dazu hätte, denn dann könnte man alle möglichen Netten Ideen damit Programmieren.

v_Team = 2 & 2 - keine Fahrzeuge

v_Team = v_eins and v_drei - keine Fahrzeuge

v_Team = v_Team add v_drei - keine Fahrzeuge

v_Team -> CRD_UNIFORM/1/9/0 - keine Fahrzeuge

v_Team CRD_UNIFORM/1/9/0 - keine Fahrzeuge

v_Team = (2+3) - keine Fahrzeuge

v_Team = CRD_NONE/1/0/0 - keine Fahrzeuge

CRD_UNIFORM/1/9/0 -> v_Team - keine Fahrzeuge

v_Team = CRD_NONE/2/8/1 - Keine Fahrzeuge

v_Team = CRD_UNIFORM/2/8/1 - Keine Fahrzeuge

v_Team = v_eins + v_zwei - Keine Fahrzeuge

Object.setTeam CRD_UNIFORM/2/8/1 - Keine Fahrzeuge

Bearbeitet von Oldtime
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hab diesen Thread noch gar nicht gesehen, ich schreibe jetzt mal was, vielleicht bist Du ja noch dabei und es entwickelt sich noch ne Diskussion.

Soweit ich mich erinnere, wurden z.B. in FH zufällige Soldier-Bodies ausgegeben. Dies wurde dort immer mit dem ObjectTemplate.setRandomGeometries x und mehreren durchnummerierten Objekten (Anzahl x) erreicht. Vielleicht wäre es ja mal ne Möglichkeit, die ganzen Fahrzeuge in Fahrzeug1, Fahrzeug2, Fahrzeug3, usw. durchzunummerieren und die Random-funktion hier zu nutzen.

Du hast ja nun im Moment nur in den Spawnern rumprobiert.

Naja, ich warte erstmal auf Antwort hier, bevor ich dort weiterdenke.

Hier mal nur kurz der Code vom GermanDesertSoldier aus FH 0.7, damit Du nicht erst gross suchen musst, GerSoldierComplexHead ist das Objekt der Betrachtung.

ObjectTemplate.create BFSoldier GermanDesertSoldier

ObjectTemplate.createSkeleton animations/UsSoldier.ske



include ../Common/CommonSoldierData.inc

rem Sound.addRunTimeDirectory Language German

game.addLanguageRunTimeDirectory German

include ../Common/Sounds/SoldierSound.inc



ObjectTemplate.setSoldierStandingIcon "Soldier/Icon_ger_soldier_standing.tga"

ObjectTemplate.setSoldierCrouchIcon "Soldier/Icon_ger_soldier_crouching.tga"

ObjectTemplate.setSoldierProneIcon "Soldier/Icon_ger_soldier_lying.tga"



ObjectTemplate.setMinimapIcon "flag_ger.tga"

ObjectTemplate.setControlPointIcon "conp_ger.tga"

ObjectTemplate.setTicketIcon "flag_ticket_ger.tga"

ObjectTemplate.setTeamFlagIcon "Icon_flag_ger.tga"

ObjectTemplate.setRadioLanguage "German"



ObjectTemplate.addTemplate GerSoldierComplexHead

ObjectTemplate.setRandomGeometries 9

ObjectTemplate.setIsFirstPersonPart 0

ObjectTemplate.setLodValue 100.01

ObjectTemplate.bindToSkeletonPart Bip01_Spine3 3



ObjectTemplate.addTemplate GerSoldierHead

ObjectTemplate.setIsFirstPersonPart 0

ObjectTemplate.setLodValue -0.01



ObjectTemplate.addTemplate DesGerSoldier3PBody

ObjectTemplate.setIsFirstPersonPart 0



ObjectTemplate.addTemplate DesGerSoldier1PBody

ObjectTemplate.setIsFirstPersonPart 1



ObjectTemplate.addTemplate GerSoldierRightHand

ObjectTemplate.setIsFirstPersonPart 0

ObjectTemplate.setLodValue 0.03



ObjectTemplate.addTemplate GerSoldierLeftHand

ObjectTemplate.setIsFirstPersonPart 0

ObjectTemplate.setLodValue 0.03



ObjectTemplate.addTemplate 1PGerSoldierRightHand

ObjectTemplate.setIsFirstPersonPart 1

ObjectTemplate.setLodValue 0.03



ObjectTemplate.addTemplate 1PGerSoldierLeftHand

ObjectTemplate.setIsFirstPersonPart 1

ObjectTemplate.setLodValue 0.03



ObjectTemplate.create SimpleObject DesGerSoldier1PBody

ObjectTemplate.geometry Soldier/1PDesGerBody



ObjectTemplate.create SimpleObject DesGerSoldier3PBody

ObjectTemplate.geometry Soldier/3PDesGerBody

ObjectTemplate.hasDynamicShadow 1



ObjectTemplate.create AnimatedBundle GerSoldierComplexHead1

rem *** SHOULD BE UsFace.Ske on every nationality.

ObjectTemplate.createSkeleton animations/UsFace.ske

ObjectTemplate.geometry Soldier/GerComplexHead1

ObjectTemplate.hasDynamicShadow 1



ObjectTemplate.create AnimatedBundle GerSoldierComplexHead2

rem *** SHOULD BE UsFace.Ske on every nationality.

ObjectTemplate.createSkeleton animations/UsFace.ske

ObjectTemplate.geometry Soldier/GerComplexHead2

ObjectTemplate.hasDynamicShadow 1



ObjectTemplate.create AnimatedBundle GerSoldierComplexHead3

rem *** SHOULD BE UsFace.Ske on every nationality.

ObjectTemplate.createSkeleton animations/UsFace.ske

ObjectTemplate.geometry Soldier/GerComplexHead3

ObjectTemplate.hasDynamicShadow 1



ObjectTemplate.create AnimatedBundle GerSoldierComplexHead4

rem *** SHOULD BE UsFace.Ske on every nationality.

ObjectTemplate.createSkeleton animations/UsFace.ske

ObjectTemplate.geometry Soldier/GerComplexHead4

ObjectTemplate.hasDynamicShadow 1





ObjectTemplate.create AnimatedBundle GerSoldierComplexHead5

rem *** SHOULD BE UsFace.Ske on every nationality.

ObjectTemplate.createSkeleton animations/UsFace.ske

ObjectTemplate.geometry Soldier/GerComplexHead1

ObjectTemplate.hasDynamicShadow 1



ObjectTemplate.create AnimatedBundle GerSoldierComplexHead6

rem *** SHOULD BE UsFace.Ske on every nationality.

ObjectTemplate.createSkeleton animations/UsFace.ske

ObjectTemplate.geometry Soldier/GerComplexHead2

ObjectTemplate.hasDynamicShadow 1



ObjectTemplate.create AnimatedBundle GerSoldierComplexHead7

rem *** SHOULD BE UsFace.Ske on every nationality.

ObjectTemplate.createSkeleton animations/UsFace.ske

ObjectTemplate.geometry Soldier/GerComplexHead3

ObjectTemplate.hasDynamicShadow 1



ObjectTemplate.create AnimatedBundle GerSoldierComplexHead8

rem *** SHOULD BE UsFace.Ske on every nationality.

ObjectTemplate.createSkeleton animations/UsFace.ske

ObjectTemplate.geometry Soldier/GerComplexHead4

ObjectTemplate.hasDynamicShadow 1





ObjectTemplate.create AnimatedBundle GerSoldierComplexHead9

rem *** SHOULD BE UsFace.Ske on every nationality.

ObjectTemplate.createSkeleton animations/UsFace.ske

ObjectTemplate.geometry Soldier/GerComplexHead4

ObjectTemplate.hasDynamicShadow 1









ObjectTemplate.create SimpleObject GerSoldierHead

ObjectTemplate.geometry Soldier/GerHead

ObjectTemplate.hasDynamicShadow 1



ObjectTemplate.create SimpleObject GerSoldierLeftHand

ObjectTemplate.geometry Soldier/GerLeftHand



ObjectTemplate.create SimpleObject GerSoldierRightHand

ObjectTemplate.geometry Soldier/GerRightHand



ObjectTemplate.create SimpleObject 1PGerSoldierLeftHand

ObjectTemplate.geometry Soldier/1PGerLeftHand



ObjectTemplate.create SimpleObject 1PGerSoldierRightHand

ObjectTemplate.geometry Soldier/1PGerRightHand

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die Antwort.

Also ich hab das erstmal zurückgestellt, weil ich einfach nicht weitergekommen bin. Ich hab das alles aber noch so wie es war gespeichert. So wie eigentlich alle meine Projekte bei den ich hier im Forum eine Frage hatte, die nicht gelöst werden konnte. Also wenn noch jemand ne Idee hat, kann er gerne noch auf uralte Beiträge von mir Antworten.

Nur bin ich durch deinen Code noch nicht durchgestiegen. Ich hab deinen Beitrag aber auch grad erst gefunden und hab heute keine Zeit mehr dafür. Ich werds mir aber auf jeden Fall nochmal genauer anschauen.

Edit:

Also mit

ObjectTemplate.setRandomGeometries 9

gibt man wohl an, das es 9 verschiedene, in diesem Fall Sodatentypen gibt.

Aber wo wird definiert, dass ist Soldat1, Soldat2 usw. ?

Und wie kann ich da auf Fahrzeuge übertragen?

Scheint ähnlich wie der Tip von Poow zu sein, mit dem ich zwar teilerfolge erziehlen konnte, wo ich aber irgendwo noch irgendwo einen Fehler hatte. Die Fahrzeuge spawnten immer nach ablauf der Zeit auch wenn die alten nicht weggefahren wurden, so das man bald nicht mehr fahren konnte, weil überall Autos im Weg standen.

Bearbeitet von Oldtime
Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden


  • Wer ist Online   0 Benutzer

    • Keine registrierten Benutzer online.
×
×
  • Neu erstellen...

Wichtige Information

Wir haben Cookies auf Deinem Gerät platziert. Das hilft uns diese Webseite zu verbessern. Du kannst die Cookie-Einstellungen anpassen, andernfalls gehen wir davon aus, dass Du damit einverstanden bist, weiterzumachen.