PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Objekte über Classname unzerstörbar machen?


Matze_76
21.03.2017, 12:49
Hallo,
ich wollte einige bestimmte Häuser und Strukturen auf der Map generell unzerstörbar machen.
Mein Lösungsansatz sieht etwa so aus:

_list = ["Classname_1","Classname_2","Classname_3"];
{_x allowdamage false} forEach _list;

So funktioniert es aber leider nicht. Gibt es sonst eine Möglichkeit, ausgewählte Klassenobjekte über ihren Classname direkt unzerstörbar zu machen?

Grüße Matze

Buliwyf
21.03.2017, 13:18
enableSimulationGlobal (https://community.bistudio.com/wiki/enableSimulationGlobal)

;)

Matze_76
21.03.2017, 14:12
damit komm ich leider auch nicht so weiter.... aber ich glaube ich hab mein Problem gefunden.
Geb ich ein Classname an, ist es ein String aber ich brauche ein Array.
Ich hab etwas gesucht, wie ich es umwandeln kann und hab auch schon etwas gefunden:
https://community.bistudio.com/wiki/entities

Aber das verwirrt mich nur noch etwas mehr :komisch:

Pfandgiraffe
22.03.2017, 19:38
Du hast schon ein Array. Bisher ist es mit Strings (den Classnames) gefüllt. Du brauchst jedoch das Objekt damit enableSimulation oder allowDamage funktioniert.

["class1", "", ...]

[obj1, obj2, ...]


Entities hilft dir da schon weiter.

_allcars = entities "Car";
{_x allowdamage false} forEach _allcars;

Das würde z.B. alle Fahrzeuge die unter die Klasse "cars" fallen unverwundbar machen. "Cars" ist hier kein Classname sondern ein TypeName. (übergeordnete Kategorie) Ich glaube du kannst dort aber genauso gut classnames zum filtern eintragen:


_list = entities ["Classname_1","Classname_2","Classname_3"];
{_x allowdamage false} forEach _list;


Falls das nicht funktioniert, finde den TypeName deiner Objekte mit isKindOf heraus und trage diesen statt der classnames ein.

...verwende aber lieber nearEntities um die ganze Nummer auf einen Bereich eingerenzen zu können, da das sonst sehr zu lasten der Performance geht.



Grüße

p.s.: Ich vermute du willst statische Objekte auf der Map unverwundbar machen. Also Gebäude die sowieso immer schon da stehen? Wenn dem so ist, wird das so leider nicht funktionieren.

Matze_76
22.03.2017, 21:52
Hi,
danke für deine Antwort, jetzt verstehe ich auch das ganze mit den Entities. Ich ging das komplizierter an als es ist :-D

p.s.: Ich vermute du willst statische Objekte auf der Map unverwundbar machen. Also Gebäude die sowieso immer schon da stehen? Wenn dem so ist, wird das so leider nicht funktionieren.

Ja genau das habe ich vor.
Ich dachte eben, jede Art von z.B. Haus hat seinen Classname, ich ging davon aus, dass ich sie so schützen kann.

Was wäre denn der richtige Weg um Map Objekte "unkaputtbar" zu machen?

LG

Pfandgiraffe
23.03.2017, 22:28
Sie haben ja auch ihren Classname. Aber du musst halt das Objekt als solches abfragen.

Das machst du über nearestBuilding.
Das schwierige daran ist, wie du jetzt an genau deine Objekte kommst. Der einfachste Weg für dich wird es wohl sein wenn du über die ObjektID gehst. Das ist eine einzigartige Nummer welches jedes feste statische Objekt auf der Map besitzt. Diese Nummer bekommst du aus dem Editor. (muss man da irgendwo aktivieren --> https://forums.bistudio.com/forums/topic/188926-3d-editor-show-object-ids/)

Wie du das anwenden kannst siehst du in einigen Youtube Videos.


Was auch funktionieren könnte wäre dieser Kommentar von KillzoneKid: (als Denkanstoß)
Return all trees in 100m radius around player:
trees = [];
{
if (str _x find ": t_" > -1) then {
trees pushBack _x;
};
} forEach nearestObjects [player, [], 100];
https://community.bistudio.com/wiki/nearestObjects



Grüße

Matze_76
27.03.2017, 09:35
Danke für deine Antwort.
Das Prinzip mit den ID's ist mir bekannt, ich dachte lediglich, man könnte pauschal mit dem Classname arbeiten damit es schneller geht oder dass es einen anderen Weg dazu gibt :-)