PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : löschbare brennende Pallete


flashstyle
17.07.2016, 14:34
Hallo,
Ich suche nach einem Script, womit zufällig auf der Map brennende Palleten spawnen. Bei den Palleten soll automatisch ein Marker erscheinen und sofern man neben den Paletten steht soll man sie mit einer AddAction löschen können.

Danke im Voraus für jede Antwort! :D

Drunken Officer
18.07.2016, 07:00
Was denn, gibt es dazu keine Anleitung in den Altis / Tanoa Live Foren ? :D

Palette spawnen dürfte klar sein. createmarker und mit setpos / getpos den Marker versetzen. Wiki lesen, wie Marker erstellt werden. Sind 3 Zeilen.
Addaction Eintrag erstellen ( Public machen ) RemoteExec ist dein Freund.

Feuer kannst du mit Particlesource machen. Da gibt's schöne vordefinierte Sachen. Oder du nimmst dieses TestFireBig oder so ähnlich

flashstyle
20.07.2016, 12:07
Wenn man neu im scripting ist weiß man halt nicht wie man so etwas anfangen soll :O

Drunken Officer
20.07.2016, 18:32
bitte definiere "zufällig auf der Map" etwas genauer.

flashstyle
20.07.2016, 20:25
Zufällig auf der Map heißt einfach random irgendwo auf Festland

Drunken Officer
21.07.2016, 13:52
okay. Ich melde mich wieder. Ich nehme an, Multiplayer oder wer soll das alles sehen?

flashstyle
21.07.2016, 15:12
Danke! Und ja das ist für den Multiplayer.

flashstyle
21.07.2016, 15:24
Am besten wäre es,wenn man einige koordinaten setzen könnte und von denen dann random eine ausgewählt wird und dann dort die Palette mit dem Feuer spawnt spawnt.

Drunken Officer
21.07.2016, 23:10
dann setze mal fleißig Marker auf der Karte und gebe mir die EXAKTEN Markernamen

Mein Vorschlag, wäre ein logischer Aufbauf
mkr_palette_1
mkr_palette_2
usw.

Gewöhne dir einen einheitliche Aufbau an, dass macht es später leichter Fehler zu finden

flashstyle
21.07.2016, 23:41
Genau so dachte ich das auch, soll ich dir die marker oder die koordinaten schicken? Der Marker sollte ja erst erscheinen, wenn es brennt.

Drunken Officer
21.07.2016, 23:45
setze doch einfach paar leere Marker auf der Karte, die als mögliche Punkte dienen. Die sieht keiner.
Denn Rest macht man per Script

flashstyle
22.07.2016, 00:52
So, habe die Marker erstellt sie tragen den Namen "mkr_palette_1" bis "mkr_palette_50"

Drunken Officer
23.07.2016, 09:54
Okay. Und jetzt die Preisfragen?

a) wie kommt dieses Ereignis zu Stande? Völlig zufällig, oder muss ein Trigger ausgelöst werden etc pp?

b.1) soll jeder Spieler die Palette sehen können?
b.2) wenn b.1 == ja, soll jeder sie löschen können?

flashstyle
24.07.2016, 00:48
a) Es soll Völlig zufällig passieren
b) Jeder Spieler soll die Palette sehen
b.2) sie sollen nur von dem Wiederstand gelöscht werden können und zwar mit einem Item

Drunken Officer
24.07.2016, 16:12
Wie heißt das Item (Classname)

Drunken Officer
24.07.2016, 18:33
Test es mal mit einer weiteren Person. Bei mir ging das Feuer auf dem Dedicated aus. Allerdings mußt du mir sagen, ob die 2 Person das selber Ergebnis hat.
Wenn du mir den Classennamen des notwendigen Items lieferst, ergänze ich es noch
1.
Hierzu schreibst du in die Init der Personen:
TeleportID= this addaction ["Teleport", { (_this select 0) setpos ( palette modelToWorld [0,5,0] ) } ]

2.
du erstellt einen Auslöser ( 0 / 0 )
Nur Server anhacken
typ: keine
Aktivierung: keine
Bedingung: true
bei Aktivierung: startetfeuerscript = [] execVM "s\dof_feuer_an_palette.sqf"
bei Deaktivierung: - bleibt frei -

3. Folgenden Code als: dof_feuer_an_palette.sqf abspeichern

/*
erstellt am 24.07.2016 durch Drunken Officer
Das Script erstellt eine Palette an einem zufällig ausgesuchten Marker.Es wird ein Feuer an dieser Palette entzündet. Desweiteren wird ein Menüeintrag zum Löschen erstellt.
*/


if !(isServer) exitWith {};

while {true} do

{
sleep (10*60);
//-- Es wäre zum einen diese Variante möglich. Hinter dem letzen Marker kommt KEIN Komma !!!
//palette = createVehicle ["Land_Pallets_F", getMarkerPos "mkr_palette_1", ["mkr_palette_2","mkr_palette_3","mkr_palette_2","mkr_palette_4","mkr_palette_5","mkr_palette_6","mkr_palette_7",............."mkr_palette_50"], 0, "NONE"];


// --- ein anderer Weg
_z = ceil random (50); //-- 50 ist die Anzahl der MArker
_pos = call compile format ["getmarkerPos ""mkr_palette_%1"" ", _z];

palette = createVehicle ["Land_Pallets_F", _pos, [], 0, "NONE"]; publicVariable "palette";
palette setdir (random 360);
palette setVariable ["var_fireisgone",false, true];

[palette,["<t color='#ffb400'>Feuer löschen</t>",{ [(_this select 0), (_this select 2)] remoteExec ["removeAction"]; deleteVehicle Firesource; palette setVariable ["var_fireisgone",true, true]; },nil,6,true,false,"","_this distance _target < 5 && side _this == RESISTANCE" ] ] remoteExec ["addaction"];



//-- SmallDestructionFire MediumDestructionFire BigDestructionFire
[
{
Firesource = "#particlesource" createVehicleLocal (position palette);
Firesource setParticleClass "BigDestructionFire";
Firesource attachto [palette,[0,0,0.13]];
},"BIS_fnc_spawn",true,true
] spawn BIS_fnc_MP;


//---- löscht Palette
waituntil { sleep 5; palette getVariable ["var_fireisgone",true]; };
sleep (1*60);
deleteVehicle palette;

};

flashstyle
24.07.2016, 19:39
1. Der Classname des Items heißt "A3L_Extinguisher"
2. Welche Sleep steht für welchen Ablauf?
3. Kann man das Feuer noch etwas größer machen?
4. Wenn das Feuer nicht gelöscht wird spawnt dann ein weiters oder brennt das solange bis man es gelöscht hat und erst dann spawnt wieder ein neues?
5. Die Zweite Person als Ziv sieht das Feuer noch bei löschung und auch nachdem die Paletten despawnt sind.
6. Wenn eine andere Person als ich das Feuer löschen will (im Wiederstand) kann es zwar "Feuer löschen" auswählen doch die Flammen und die Paletten verschwinden nicht.

Drunken Officer
24.07.2016, 21:48
Hast du es selber gehostet oder dedi? Die Abfrage bezieht sich nur auf die Seite nicht auf eine Person.

Die Palette wird nach einer Minute gelöscht, wenn das Feuer aus ist. Hattet ihr so lange gewartet?

flashstyle
24.07.2016, 22:03
Dedi und wir haben die sleep Zeiten etwas verändert um zu Testen.

flashstyle
24.07.2016, 22:11
Ist der Variblename vom Auslöser 0/0? Oder was bedeutet 0/0?

Zudem verschwindet die Palette und nicht das Feuer.

Drunken Officer
25.07.2016, 14:22
Die Palette soll auch verschwinden! Oder willst du dein Server zu müllen?

Die Flamme korrigiere ich, da diese Lokal erstellt werden und demzufolge auch Lokal gelöscht werden muss.

Was ein Auslöser ist und die Einstellungen erkläre ich dir nicht, Kannst du dir selber aneignen.

flashstyle
25.07.2016, 14:40
Also derjenige der die Palette löscht sieht,dass das Feuer despawnt, und nach 1ner Minute die Palette ebenfalls despawnt. Ein anderer Spieler jedoch sieht dass die Palette despawn,aber bei dem ist das Feuer noch an.

Drunken Officer
25.07.2016, 15:31
Jo, ich weiß. War mir nach deinem ersten Bericht klar. Ich werde es korregieren. Das mit der Palette soll auch so sein.

Wenn das so ne AL Geschichte ist, soll da eigentlich ein Marker auftauchen? Life-Gedönse ist doch verliebt in Marker

flashstyle
25.07.2016, 15:34
Ja,Marker habe ich schon selbst hinzugefügt,sowie etwas rauch beim Feuer.

Drunken Officer
25.07.2016, 15:45
Der Rauch wird auch gelöscht?

Drunken Officer
25.07.2016, 15:56
So, evtl. hat sich bei ArmA 3 etwas geändert, und man kann #pariclesource jetzt auf Serverseitig erstellen und löschen. Ich habe es auf dem Dedi gesehen und konnte es löschen. Da es serverseitg passiert, sollte auch dein Kumpel den gleichen Effekt haben.
Probiere mal mit deinem Kollegen das aus:

/*
erstellt am 24.07.2016 durch Drunken Officer
Das Script erstellt eine Palette an einem zufällig ausgesuchten Marker.Es wird ein Feuer an dieser Palette entzündet. Desweiteren wird ein Menüeintrag zum Löschen erstellt.
*/


if !(isServer) exitWith {};

private ["_mkrarray", "_mkr"];
_mkrarray=[];
for "_z" from 1 to 50 do
{
//_mrk= call compile format [" 'mkr_palette_%1' ",_z];
_mrk = format ["mkr_palette_%1",_z];
_mkrarray pushBack _mrk;
};

{_x setmarkerAlpha 0} forEach _mkrarray;

while {true} do

{
sleep (2*1);
//-- Es wäre zum einen diese Variante möglich. Hinter dem letzen Marker kommt KEIN Komma !!!
//palette = createVehicle ["Land_Pallets_F", getMarkerPos "mkr_palette_1", ["mkr_palette_2","mkr_palette_3","mkr_palette_2","mkr_palette_4","mkr_palette_5","mkr_palette_6","mkr_palette_7",............."mkr_palette_50"], 0, "NONE"];


// --- ein anderer Weg
_selectMarker = _mkrarray call bis_fnc_selectrandom;
hint str (_selectMarker);
_selectMarker setMarkerAlpha 1;

palette = createVehicle ["Land_Pallets_F", getMArkerPos _selectMarker, [], 0, "NONE"]; publicVariable "palette";
palette setdir (random 360);
palette setVariable ["var_fireisgone",false, true];

[palette,["<t color='#ffb400'>Feuer löschen</t>",{ [(_this select 0), (_this select 2)] remoteExec ["removeAction"]; palette setVariable ["var_fireisgone",true, true]; },nil,6,true,false,"","_this distance _target < 5 && side _this == RESISTANCE" ] ] remoteExec ["addaction"];

Firesource1 = "#particlesource" createVehicle (position palette);
Firesource1 setParticleClass "BigDestructionFire";
Firesource1 attachto [palette,[0,0,0.13]];
// publicVariable "Firesource1";

//---- löscht Palette und Feuer
waituntil { sleep 1; palette getVariable ["var_fireisgone",true]; };
deleteVehicle Firesource1;
sleep 4;
deleteVehicle palette;
_selectMarker setMarkerAlpha 0;

};


Edit: Code überarbeitet. Du kannst deine Marker jetzt gleich so beschriften und bemalen wie sie brauchst. Sie werden transparent gemacht und nur der MArker der aktiviert wurde, ist sichtbar. Da brauchst du kleine weiteren Marker setzen.

flashstyle
25.07.2016, 16:25
TOP,danke funzt jetzt so wie es sollte:) Ein großes Dankeschön;)

Drunken Officer
25.07.2016, 16:38
Ich hatte eben noch mal überarbeitet. Probiere jetzt diesen Code nochmal.
Es erspart eine PublicVaribale, weil die eigentlich unnötig war und die Marker-Geschichte ist gleich mit eingebunden.

Setze dich in aller Ruhe mit dem Script auseinander. Wenn du Fragen hast, erkläre ich es. Ich erwarte nur, dass man sich selber vorher einen Kopf macht und mal das BIS Wiki liest.

Ist der Feuerlöscher ein Item, ein Magazin oder eine Waffe? Die Bedingung muss noch mit rein

flashstyle
25.07.2016, 16:43
Ja
Das Item ist eine Waffe

Drunken Officer
25.07.2016, 16:44
[palette,["<t color='#ffb400'>Feuer löschen</t>",{ [(_this select 0), (_this select 2)] remoteExec ["removeAction"]; palette setVariable ["var_fireisgone",true, true]; },nil,6,true,false,"","_this distance _target < 5 && side _this == RESISTANCE" && A3L_Extinguisher in weapons _this] ] remoteExec ["addaction"];

flashstyle
25.07.2016, 16:56
Wie könnte ich da noch einen hint für den Wiederstand hinzufügen?

So in etwa?
if (playerSide == independent) then {hint "Es ist ein Feuer ausgebrochen"; };
Nur das mit dem Feuerlöscher klappt nicht
Könnte man da auchnoch ein playsound3D einfügen,dass der Sound auf einer bestimmten position abgespielt wird?

Drunken Officer
25.07.2016, 17:58
Ja man kann so einiges machen.
Du kannst mit remoteExec auch einen hint durchs Netzwerk boxen. Einfach mal einlesen.
Playsound3d wirkt bereits global, Kann also bei dem Server bleiben.

Playerside gibt es nicht. Bitte Wiki lesen. Da das Script auf dem Server läuft, kennt der keinen Player.

Wegen dem Feuerlöscher : (der Spieler muss den Feuerlöscher als aktive Waffe gewählt haben)

[palette,["<t color='#ffb400'>Feuer löschen</t>",{ [(_this select 0), (_this select 2)] remoteExec ["removeAction"]; palette setVariable ["var_fireisgone",true, true]; },nil,6,true,false,"","_this distance _target < 5 && side _this == RESISTANCE && 'A3L_Extinguisher' == currentWeapon _this" ] ] remoteExec ["addaction"];

Zu welchem Addon gehört der? unter A3L habe ich den nicht

flashstyle
30.07.2016, 15:03
Der müsste eig. unter A3L sein......
Noch ein Problem,welches mir aufgefallen ist,dass die addaction zum löschen nach einiger Zeit verschwindet,sowass man zwar vor der palette steh,jedoch nicht löschen kann.
Eine Ahnung woran das liegen kann?

Drunken Officer
30.07.2016, 16:07
Nee. Ich kenne auch keinen Fall, wo ein solcher Eintrag einfach verschwindet.