Armed-Assault.de Twitter
 
 
Themen-Optionen Ansicht
Alt 02.04.2016, 16:21   #1 (permalink)
Newbie
 
Registriert seit: 22.01.2016
Beiträge: 21
Standard Objekte mit einem Script löschen.

Hallo,
ich habe ein Script gemacht mit dem ich ein paar Wracks, Müll etc in den Städten spawnen lasse.

PHP-Code:
_spawnpos = [player30, (random 360)] call BIS_fnc_relPos;
veh createVehicle ["Land_Wreck_Car2_F"_spawnpos,[], 0"NONE"];
veh setdir 80
Das Script starte ich mit einem Trigger in dem ich bei Aktivierung folgendes eingetragen habe:
PHP-Code:
if (({isPlayer _xcount thisList) <= 1then {execVM "wrecks.sqf"}; 
Jetzt wird ein Wrack mit dem Namen veh auf der Karte erstellt, um es zu löschen lasse ich bei Deaktiviert ein Script ausführen mit:
PHP-Code:
deleteVehicle veh
Das funktioniert auch aber wenn jetzt jemand einen anderen Trigger in einer anderen Stadt auslöst spawnt dort auch ein Wrack aber mit anderem Namen.

Ich lasse manche gespawnte Einheiten mit folgenden Befehl löschen:
PHP-Code:
{ if (count units _x>and side _x==civilianthen {_civiliangroups=_civiliangroups+[_x]; deleteVehicle _x}} forEach nearestObjects [player,[],1500
Ich bekomme es aber nicht hin es so abzuändern dass auch Wracks oder z.B. Tiere gelöscht werden.

Könnt ihr mir einen Tipp geben wie ich es anstellen kann die Teile wieder zu löschen?

Viele Grüße Duke
Duke_87 ist offline  
Alt 02.04.2016, 16:42   #2 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

probiere es mal mit call compile formt

zb. Veh_namedestriggers
__________________
Bewegende Momente bei ArmA 3
Drunken Officer ist offline  
Alt 02.04.2016, 18:24   #3 (permalink)
Newbie
 
Registriert seit: 22.01.2016
Beiträge: 21
Standard

Ich hab mir mal einige Beispiele mit call compile formt angesehen und es danach versucht umzusetzen. Aber es funktuioniert nicht, ich denke aber das liegt eher an meiner Umsetzung. Könntest du es mir etwas genauer erklären?
Duke_87 ist offline  
Alt 02.04.2016, 20:49   #4 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 10.10.2006
Beiträge: 263
Standard

Poste mal gerne ein Beispiel was du versucht hast.

Was Drunken vorgeschlagen hat war schon gut das müsste ungefähr so aussehen geht aber leider nicht so einfach da Trigger mit leerzeichen sind und Arma das nicht verkraftet.

Code:
if (({isPlayer _x} count thisList) <= 1) then {

[thisTrigger] call {
_spawnpos = [player, 30, (random 360)] call BIS_fnc_relPos; 
_veh = createVehicle ["Land_Wreck_Car2_F", _spawnpos,[], 0, "NONE"];  _veh setdir 80;
call compile (format["veh_%1=%2",_this,_veh]);
}
};
Was du machen kanst ist an den Trigger mit setvariable die veh anzuhängen und dann kanste die wieder auslesen.

Sag gerne noch mal was du genau vor hast damit.
Nokman ist offline  
Alt 03.04.2016, 00:25   #5 (permalink)
Newbie
 
Registriert seit: 22.01.2016
Beiträge: 21
Standard

Zitat:

Sag gerne noch mal was du genau vor hast damit.

Ich lasse mit einem Script einige Objekte willkürlich in einer Stadt spawnen, z.B.: Wracks, Mülltonnen usw. Das Script wird über einen Trigger aktiviert, wenn der Spieler den Trigger verlässt sollten aber alle gespawnten Objekte auch wieder verschwinden damit die Map nicht zugemüllt wird.

Zitat:

Poste mal gerne ein Beispiel was du versucht hast.

Ich hab die Schnipsel nicht gespeichert weil sie nicht funktioniert haben aber meine Lösung war von deiner Meilen weit entfernt
Bin leider noch keine große Leuchte was das Scripten angeht, bei mir steckt das alles noch in den Kinderschuhen.
Duke_87 ist offline  
Alt 03.04.2016, 07:49   #6 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 10.10.2006
Beiträge: 263
Standard

Zitat von Duke_87 Beitrag anzeigen

Bin leider noch keine große Leuchte was das Scripten angeht, bei mir steckt das alles noch in den Kinderschuhen.

macht ja schon mal nix alle müssen mal irgendwo anfangen. Ein weg der nicht funktioniert ist auch ein erfolg

Trigger

Code:
params [["_bool",false,[true]],"_trigger","_thislist"];
if (_bool) then { //erstellen und Speichern
	_var = _trigger getvariable ["muell",""];
	if !(typename _var isequalto typename "") exitwith {};
	private _save = [];
	for "_i" from 1 to 1 do { // Eins wird jetzt erstellt erhöhen für mehr objekte 
		_muell = ["Land_Wreck_Car2_F","Land_Wreck_Car_F","Land_Wreck_Car3_F"];
		_veh = createVehicle [selectrandom _muell, getpos player,[], 50, "NONE"];
		_veh setdir random 360;
		_save pushback _veh;
	};
	_trigger setvariable ["muell",_save]; //in MP mission _trigger setvariable ["muell",_save,true];
} else { //löschen und speicherung löschen
	if (({isPlayer _x} count _thisList) > 0) exitwith {};  
	_var = _trigger getvariable ["muell",""];
	if (typename _var isequalto typename "") exitwith {};
	{deletevehicle _x}foreach _var;
	_trigger setvariable ["muell",nil]; //in MP mission _trigger setvariable ["muell",nil,true];
};
//mpmission nur wenn nicht jeder spieler selber sein müll nutzen soll So wird der müll nur einmal erstellt und gelöscht wenn alle weg sind
Im anhang die Testmission. Nur ein spieler löst aus keine KI.
Angehängte Dateien
Dateityp: rar m%c3%bcll.VR.rar (1,7 KB, 31x aufgerufen)
Nokman ist offline  
Alt 03.04.2016, 12:53   #7 (permalink)
Newbie
 
Registriert seit: 22.01.2016
Beiträge: 21
Standard

Danke für die Mühe die du dir gemacht hast, ich habe echt viel herum probiert aber die Lösung wäre mir etwas zu hoch gewesen, das hätte ich sie nicht hinbekommen

Ich musste das Script noch um folgende Zeile ergänzen:
PHP-Code:
_veh setPos [getPos _veh select 0getPos _veh select 1, -0.1]; 
In der VR hat es wunderbar funktioniert, auf Altis standen aber die Objekte einen Meter weit in der Luft.

Ich habe aber was den Trigger betrifft noch eine Frage.
Ich kann bei der Bedingung einstellen wie der Trigger ausgelöst werden soll.
Mit: this && (vehicle player) in thislist
Löst er mit dem Spieler aus und auch wenn der Spieler in einem Fahrzeug sitzt.
Gibt es die Möglichkeit z.B. das der Trigger nur von Bodeneinheiten ausgelöst wird und Spieler in Helis und Flugzeugen ignoriert werden?

Geändert von Duke_87 (03.04.2016 um 13:18 Uhr).
Duke_87 ist offline  
Alt 03.04.2016, 14:39   #8 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 10.10.2006
Beiträge: 263
Standard

Ob ein Spieler in einen Fahrzeug sitzt kann mit (vehicle player) == player getestet werden beide werte sind gleich wenn er zu fuss ist

this && (vehicle player) in thislist && (vehicle player) == player
Nokman ist offline  
Alt 03.04.2016, 18:54   #9 (permalink)
Newbie
 
Registriert seit: 22.01.2016
Beiträge: 21
Standard

Das ist gut zu wissen :-) Ich dachte man muss es noch genauer definieren.
Ich weiss das es mittlerweile etwas off Topic ist aber eine vorerst letzte Frage habe ich noch.

Ich lasse momentan die KI um dem Spieler herum spawnen und patrollieren:
PHP-Code:
_spawnpos = [player300+(random 100), (random 360)] call BIS_fnc_relPos;
GroupOne_Inf1 = [_spawnpos EAST, ["O_soldierU_AAR_F","O_soldierU_AR_F","O_soldierU_F","O_soldierU_AT_F","O_soldierU_medic_F"]] call BIS_fnc_spawnGroup
[
GroupOne_Inf1getPos player150call bis_fnc_taskPatrol
Ich weis das ich auch einen Marker setzen könnte und sie um den Marker spawnen lassen könnte. Wäre es aber auch machbar die KI innerhalb des ausgelösten Triggers zu spawnen ohne dem Trigger einen bestimmten namen zu geben?
Duke_87 ist offline  
Alt 03.04.2016, 20:47   #10 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 10.10.2006
Beiträge: 263
Standard

kenne mich jetzt so genau damit nicht aus. Du willst aber das die KI nur innerhalb des Triggers bleibt? Auch wenn der Trigger sich bewegt? Oder Löst du es mit einen Trigger aus und du benötigst den mittelpunkt des Triggers damit die da Rumlaufen?
Nokman ist offline  
Alt 03.04.2016, 21:00   #11 (permalink)
Newbie
 
Registriert seit: 22.01.2016
Beiträge: 21
Standard

Ich habe auf Altis über jeder Stadt einen Trigger sitzen der bei Aktivierung dann Einheiten um den Spieler Spawnen lässt. Im Singleplayer funktioniert das Super, im Multiplayer werden aber bei allen Spielern dann die Einheiten gespawnt und das ist... naja problematisch ;-)

Wenn ein Spieler z.B. bei Kavala den Trigger auslöst soll die KI nur in dem Trigger spawnen und nicht auch bei dem Spieler der am anderen Ende der Insel ist.

Ich weis das diese Zeile die Ursache ist:
_spawnpos = [player, 300+(random 100), (random 360)] call BIS_fnc_relPos;

Ich könnte einen Marker setzen und umschreiben:
_spawnpos = [getMarkerPos "mark1", 50+(random 50), (random 360)] call BIS_fnc_relPos;

aber dann müsste ich für jeden Trigger ein eigenes Script machen.. glaube ich zumindest.
Duke_87 ist offline  
Alt 04.04.2016, 16:17   #12 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 10.10.2006
Beiträge: 263
Standard

Das problem ist das jeder einen trigger bekommt. Also der wird von jeden ausgelöst.

Du hast 2 möglichkeiten du erstellst per Script den Trigger Local bei jeden Spieler. https://community.bistudio.com/wiki/createTrigger
dazu bei makeglobal false. Oder im Trigger abfragen ob die Person welche es auslöst auch drine ist.

Code:
if (player in thislist) then {_spawnpos = [player, 300+(random 100), (random 360)] call BIS_fnc_relPos;
GroupOne_Inf1 = [_spawnpos , EAST, ["O_soldierU_AAR_F","O_soldierU_AR_F","O_soldierU_F","O_soldierU_AT_F","O_soldierU_medic_F"]] call BIS_fnc_spawnGroup; 
[GroupOne_Inf1, getPos player, 150] call bis_fnc_taskPatrol;}
Nokman ist offline  
Alt 04.04.2016, 16:47   #13 (permalink)
Newbie
 
Registriert seit: 22.01.2016
Beiträge: 21
Standard

Die erste Methode muss ich mir noch einmal genauer durchlesen, da steige ich noch nicht ganz durch wie ich es umsetzen kann das ein Script den Trigger an verschiedenen Orten erstellen kann.
Dazu müsste ich doch einen Trigger platzieren der das Trigger Script ausführt das dann einen Trigger spawnen lässt welcher dann das Spawnscript ausführt. Aber kommt es dann am Ende nicht aufs selbe heraus wie es momentan schon ist oder denke ich da grade quer?

Bei der zweiten Methode ist es doch so das ich das spawnen nicht mehr über ein Script durchführe sondern den Code direkt in den Trigger packe oder?
Duke_87 ist offline  
Alt 04.04.2016, 17:35   #14 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 10.10.2006
Beiträge: 263
Standard

Also du brauchst kein Trigger ZB die datei init.sqf wird von allen geladen Server und Client beim Start der map bzw connecten.
Da kanste dinge erstellen lassen die zum mapstart da sein sollen wie zb trigger.

ja entweder du führst es direkt aus oder du übergibst thislist in den script.

Wie Rufste jetzt den Script auf?

alternativ kanst du auch überprüfen in bedingung ob der player welches es auslöst local ist damit löst nur der aus welcher da drine ist.
Nokman ist offline  
Alt 04.04.2016, 18:05   #15 (permalink)
Newbie
 
Registriert seit: 22.01.2016
Beiträge: 21
Standard

Ich rufe das Script über Trigger auf.

Auslöser Aktivierung:
Typ: Keine
Aktivierung: Bluefor
Aktivierungstyp: Vorhanden

Wiederholbar: ja

Bedingung:
({isPlayer _x && alive _x}count thisList) >= 1;

Bei Aktivierung:
if (({isPlayer _x} count thisList) <= 1) then {execVM "inf_med.sqf"};

Bei Deaktivierung:
{ if (count units _x>0 and side _x==East) then {_Eastgroups=_Eastgroups+[_x]; deleteVehicle _x}} forEach nearestObjects [player,[],2000];
Duke_87 ist offline  
Alt 04.04.2016, 18:09   #16 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 10.10.2006
Beiträge: 263
Standard

({local _x && isPlayer _x && alive _x}count thisList) >= 1;
Nokman ist offline  
Alt 04.04.2016, 23:56   #17 (permalink)
Newbie
 
Registriert seit: 22.01.2016
Beiträge: 21
Standard

Wenn ich den Spawn direkt über den Trigger ausführe funktioniert es traumhaft. Jetzt habe ich aber ein weiteres kleines Problem.

Ein Spieler zu Fuß löst den Spawn aus, fährt man mit einem Fahrzeug hinein passiert leider nichts.

Ich vermute es liegt daran das hier:
Code:
if (player in thislist) then {......};
noch geprüft werden muss ob der Spieler in einem Fahrzeug unterwegs ist.

Ich habe es wie folgt geändert aber der Erfolg blieb aus:
Code:
if (vehicle player == player) then {......};
Ich habe auch die Bedingung probehalber geändert:
HTML-Code:
this && (vehicle player) in thislist && (vehicle player) == player
Das hat aber auch nicht funktioniert.

War das falsch was ich versucht habe oder liegt der Fehler wo anders?
Duke_87 ist offline  
Alt 05.04.2016, 17:41   #18 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Du mußt schon lesen, was Nokman dir schrieb...
this && (vehicle player) in this list
__________________
Bewegende Momente bei ArmA 3
Drunken Officer ist offline  
Alt 05.04.2016, 19:02   #19 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 10.10.2006
Beiträge: 263
Standard

Code:
this && (vehicle player) in thislist && (vehicle player) == player
this - sagt nur die bedingung erfüllt zb nur Ost löst aus
(vehicle player) in thislist - Also das Fahrzeug wo der Spieler drine ist ggf der Spieler ist das Fahrzeug ist in der liste.
(vehicle player) == player -- Überprüft ob der Spieler in eien Fahrzeug sitzt wenn nicht sind beide gleich.
alle 3 müssen wahr sein um es auszuführen


Wie du jetzt schon sagtest du sitzt in einen Fahrzeug also wird das 3 nicht wahr sein und somit nicht auslösen.

Zitat:

this && (vehicle player) in thislist

wenn es auslösen soll wenn ein spieler zu fuss oder in einen auto drine sein soll.

Code:
this && (vehicle player) in thislist && (vehicle player) == player
wenn der Spieler nur zu Fuss drine sein darf. wenn er in ein auto einsteht zählt es als verlassen des gebietes.
Nokman ist offline  
Alt 05.04.2016, 19:03   #20 (permalink)
Newbie
 
Registriert seit: 22.01.2016
Beiträge: 21
Standard

Zitat:

Du mußt schon lesen, was Nokman dir schrieb...
this && (vehicle player) in this list

Es ist nicht so als würde ich das was geschrieben wurde überlesen aber so habe ich es auch versucht und es funktioniert nicht so wie ich es mache.

Aktuell startet der Trigger wie folgt:
Bedingung:
({local _x && isPlayer _x && alive _x}count thisList) >= 1;

Bei Aktivierung:
if (player in thislist) then {...}

Bei Deaktivierung:
{ if (count units _x>0 and side _x==Civilian) then {_Civiliangroups=_Civiliangroups+[_x]; deleteVehicle _x}} forEach nearestObjects [Triggername,[],2000];


Es soll ja verhindert werden das mehrere Personen den selben Trigger auslösen und bezwecken das der Trigger aktiv bleibt solange ein Spieler in ihm ist.

Wenn ich es mit this && (vehicle player) in thislist versuche klappt der spawn überhaupt nicht mehr. Ich hab schon versucht auf diverse Arten das einzubauen werde aber dann mit Fehlermeldungen zugepflastert oder der Spawn funktioniert weder zu Fuß noch mit einem Fahrzeug.
Duke_87 ist offline  
 


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Beta-Patch für OpA erschienen det99 Community 1429 18.07.2014 17:51
T8 Units - Einheiten Spawn Script T-800a Editing & Scripting 2 07.03.2014 21:46
Einheiten spawnen/ löschen script sandmanGER Editing & Scripting 16 07.02.2013 08:45
Objekte auf Inseln löschen Buliwyf Editing & Scripting 2 24.11.2012 19:00
marker über script erzeugen hypercop Editing & Scripting 2 28.08.2010 23:40


Kontakt - HX3.de - Archiv - Nach oben

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias



SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119