PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu random!


Ghost_Aut
10.05.2009, 09:48
Hallo Leute ich habe da ein Problem mit random!
Ich würde gerne Obj erstellen die random im zielgebiet erstellt werden solten! zum beispiel!

if (! isServer) exitWith {};
sleep 1;
_pos = missionpos;

if (missionStarted) then
{
deleteVehicle EastBarracks1;
sleep 1;
Killed1=false;
publicVariable "Killed1";
_EastBarracks1 = [_pos select 0),(_pos select 1)+ 150];
EastBarracks1 = createVehicle ["WarfareBEastBarracks", _EastBarracks1, [], 1, "NONE"];
EastBarracks1 setDamage 0;
EastBarracks1 setdir 0;
EastBarracks1 addEventHandler ["Killed", {Killed1=true; publicVariable "Killed1"; "InfantryTeam1" setMarkertypeLocal "empty"}];
EastBarracks1 setpos _EastBarracks1;
"InfantryTeam1" setMarkerPos getPos EastBarracks1;
"InfantryTeam1" setMarkerType "InfantryTeam";
"InfantryTeam1" setMarkerText "InfantryTeam 1";
};
if (true) exitWith {};

Nur würde ich es gerne nicht unter - oder + erstellen, sondern auch random
Vielleicht könnte mir ja da jemand helfen!!

Lg. Ghost

Vienna
10.05.2009, 14:53
Wenn du das so erstellst:

EastBarracks1 = createVehicle ["WarfareBEastBarracks", _pos, [], 200, "NONE"];

dann wird das Objekt in einem zufälligen Bereich von 200m um die Position _pos plaziert.

Ghost_Aut
10.05.2009, 15:17
Oh danke Vienna!
sag wo kann man eigentlich über die sqf scripts Infos herbekommen ??

ich wolte noch fragen was man in die [] klammer eingeben könnte für was sie stehen??
EastBarracks1 = createVehicle ["WarfareBEastBarracks", _pos, [], 200, "NONE"];

LG. Ghost

i0n0s
10.05.2009, 16:09
Biki (http://community.bistudio.com/wiki/Category:Scripting_Commands_ArmA)

Vienna
10.05.2009, 16:42
In die Kammern kannst du einen oder mehrere Markernamen eingeben.

z.B. ["Marker1","Marker2"]

Als Mittelpunkt zur Plazierung des Objets wird dann zufällig die direkte oder eine Markerposition genommen.

Willst du nur die Marker verwenden, dann geht das so:

EastBarracks1 = createVehicle ["WarfareBEastBarracks", getMarkerPos "Marker1", ["Marker2"], 200, "NONE"];

Ghost_Aut
10.05.2009, 19:21
Mhm Nur für die marker pos!
versuche schon stunden Lang den satz einzubinden aber ja keine change gg!!


this addEventHandler ["killed", "_this select 0 spawn {sleep 30; deleteVehicle _this}"]



_GrpOne = createGroup EAST;
_GrpOne createUnit ["SoldierE", _pos, [], 150, "NONE"];

hätte da jemand eine lösung dazu, den addeventHandler in die einheit einzubinden!!

Lg. Ghost

Vienna
10.05.2009, 20:55
_unit = _GrpOne createUnit ["SoldierE", _pos, [], 150, "NONE"];
_unit setVehicleInit "this addEventHandler ['killed', '_this select 0 spawn {sleep 30;deleteVehicle _this}']";
processInitCommands;

Ghost_Aut
11.05.2009, 18:24
Na da, wehr ich nie drauf kommen, auf den code; Danke vienna also das
heist ich muss die zeile wenn ich eine group erstelle unter jeder einheit schreiben!

MFG Ghost!

Ghost_Aut
11.05.2009, 20:30
Na hallo hätte noch ne Frage ist es Möglich die Groupe abzufragen wenn sie tot sind! mit waitUntil ??

if (! isServer) exitWith {};
private ["_pos","_unit1","_Alpha1"];
sleep 1;
_pos = getPos EastSpawn;
_unit1 = _Alpha1;


_Alpha1 = createGroup EAST;
_Alpha1 createUnit ["SquadLeaderE", _pos, [], 0, "NONE"];
_Alpha1 createUnit ["SoldierEG", _pos, [], 0, "NONE"];
_Alpha1 createUnit ["SquadLeaderE", _pos, [], 0, "NONE"];
_Alpha1 createUnit ["SoldierEG", _pos, [], 0, "NONE"];



waitUntil ??
hint "ok";

Lg. Ghost

Vienna
11.05.2009, 20:50
waitUntil {sleep 5; count units _Alpha1 == 0};

Ghost_Aut
12.05.2009, 17:18
Danke Vienna!
Bin wider mal durch deine hilfe etwas weiter, coole sache !!

Lg. Ghost

UnXplaind
12.05.2009, 21:33
zu der abfrage mit der gruppe, könnte man da auch schreiben waitUntil {!(alive Alpha1)}?
wollte nur mal wissen ob es so auch funktionieren würde

und nun habe ich noch ne Frage zum random create. Ich würde gerne eine Unit an einer von 3 verschiedenen Positionen spawnen lassen. nun habe ich einfach mal das rauskopiert was hier schon als lösung für ein objekt gegeben wurde, das ganze sieht bei mir dann so aus:

Grp1 = CreateGroup WEST;
_Leader="OfficerW" createUnit [getmarkerpos "prison1", ["prison2","prison3"], Grp1, "Grp1 = this; removeAllWeapons this",0.9,"Captain"];
Grp1 setCaptive true;



exit;

aber ich bekomme jetzt die fehlermeldung das er ein Objekt erwartet...ich bin mir auch sehr unsicher ob ich einfach nur den code von oben so einfach übernehmen und an meine verhältnisse anpassen kann.

danke für alle Infos und Hilfen! :)

Vienna
12.05.2009, 22:20
alive verlangt ein Objekt, da kannst du keine Gruppe abfragen.


createUnit hat zwei Möglichkeiten der Parameterübergabe. Die darfst du nicht vermischen.

type createUnit [ position, group, init, skill, rank]

Object = group createUnit [type, position, markers, placement, special]

UnXplaind
12.05.2009, 22:57
wo kann ich dann hier:

Object = group createUnit [type, position, markers, placement, special]

den namen festlegen? weil die einheit soll dann in meine gruppe übergehen und das mache ich doch in dem ich dann sage das die gruppe/einheit meine gruppe joinen soll oder?

na ich habs mir jetzt mal so gedacht:

_pos = getMarkerPos prison1;

_Leader = Grp1 createUnit ["OfficerW", _pos, ["prison2","prison3"], [], "NONE"];


exit;

edit:
ich habe das jetzt so verstanden:
Object = Name des Objektes also in meinem Fall _Leader
group = Name der Gruppe also hier Grp1
createUnit = stellt eine Einheit her ;)
type = was für ne Einheit, also hier einen Officer (West)
position = dafür soll er die position des ersten markers nehmen
markers = sind die alternativen spawnplätze
placement = radius vom marker, bei mir halt null damit er auch gleich da spawnt
special = da gibts irgendwie nur 2 mgl. "FORM" oder "NONE" (hab ich irgendwo gelesen)

nun spawnt aber nix, was mach ich denn schon wieder falsch? :(

Vienna
12.05.2009, 23:46
Die zweiten eckigen Klammern sind falsch. Da gehört ein Zahl hin.

Bei dem Link hast du alle Befehle mit Beispielen: Category:Scripting Commands ArmA - Bohemia Interactive Community (http://community.bistudio.com/wiki/Category:Scripting_Commands_ArmA)

UnXplaind
13.05.2009, 00:09
Ok Vienna, ich treibe dich mit Sicherheit in den Wahnsinn, aber es geht leider immer noch nicht. Ich habe mir jetzt das Beispiel mal rauskopiert von der Seite und umgeformt. Mein komplettes script sieht so aus:

_pos = getMarkerPos prison1;

_Grp1 = createGroup west;
_unit = Grp1 createUnit ["SoldierWB", _pos, ["prison2","prison3"], 0, "FORM"];

exit;

es spawnt aber immernoch nichts. Dabei habe ich jetzt nur die Variablen umgeändert und mich sonst an die Vorgaben gehalten.

Ich bin echt zu doof zum scripten :(

EDIT:
hab jetzt folgenden Code:

_pos = getMarkerPos "prison1";

_grp = createGroup west;
unit = _grp createUnit ["OfficerW", _pos, ["prison2","prison3"], 0, "FORM"];
[unit] join _grp;

damit funktioniert es jetzt auch, nun muss ich mal suchen was ich vorher anders gemacht habe, vielen dank für die Hilfe Vienna!

Vienna
13.05.2009, 01:15
Du hast bei _unit = Grp1 createUnit ["Sol.... den Unterstrich bei Grp1 vergessen (_Grp1). In dem ersten Post war nicht ersichtlich, dass das jetzt eine lokale Variable sein soll. Darum immer alle Zeilen anführen.


_grp = createGroup west;
unit = _grp createUnit ["OfficerW", _pos, ["prison2","prison3"], 0, "FORM"];
[unit] join _grp;

Hier brauchst du die letzte Zeile nicht. Die unit wurde ja in der Gruppe erstellt.

Warum hast du unit jetzt als globale Variable erstellt? Eine globale Variable ist auf deinem PC in der ganzen Mission sichtbar. Mit Unterstrich (_unit) nur in diesem Skript.

UnXplaind
13.05.2009, 07:44
Heisst sichtbar jetzt, dass man sie sehen kann wenn ich die mission spiele oder heisst es einfach nur das sie jetzt überall verfügbar ist?

Denn ich brauche sie global weil sie nochmal in einem trigger vorkommen soll. Da die Einheit in einem von 3 camps zufällig erscheinen soll, sollen auch hier erstmal die Einheiten von dem DAC script erscheinen.
Ich lasse meinen Zonen bei DAC mit einem extra Trigger auslösen, wenn der Spieler in den Bereich des Triggers gerät. Aber ich habe festgestellt wenn schon eine Blufor-Einheit im Bereich der DAC-Zone steht und der Trigger ausgelöst wird, wird die DAC-Zone nicht aktiviert. Deswegen muss ich das bissl umständlicher machen (weil ich keine Ahnung habe wie ich das sonst lösen kann). Also habe ich mir gedacht ich lasse den Spieler einen Bereich betreten, die DAC Zonen aktivieren und dann erst die Blufor-Geisel spawnen.

Danke dir für die Erklärung! So weiss ich jetzt wenigstens mal wie ich eine globale oder public variable bekomme. :D

Vienna
13.05.2009, 10:51
Eine lokale Variable (_VarName) ist nur im Skript sichtbar. Es kann die gleichenamige Variable in mehren Skripten vorkommen und unterschiedliche Werte enthalten, die sich gegenseitig nicht beeinflussen.

Global sind die Variablen welche ohne Unterstich beginnen (VarName). Sie sind in der gesamten Mission (Mission.sqm und allen Skripten) mit dem gleichen Wert "sichtbar", haben also überallen den gleichen Wert auf dem jeweiligen Spieler-PC. Der Wert ist auch überall in der Mission änderbar. Der Wert kann aber auf jedem PC der Spieler unterschiedlich sein.

Eine publice Variable ist eine globale Variable, welche auf allen Spieler-PCs "sichtbar" ist und den gleichen Wert hat. Der Wert kann auf jedem PC geändert werden, muss aber danach mit dem Befehl publicVariable "VarName" zu den anderen PCs übertragen werden.


Anstelle einer Triggerzone kann auch der Abstand zu einer bestimmten Position als Auslösung dienen. Dazu verwendet man den Befehl distance.

z.B. in der Bedingung eines Triggers: unit1 distance getMarkerPos "Marker1" < 100

Ghost_Aut
13.05.2009, 21:18
Ich Hätte da noch mal eine Frage!
und zwar wie offt könnte ich das Script.sqf" neu starten lassen ohne Probleme!

if (! isServer) exitWith {};
private ["_pos","_Bravo","_lead"];
sleep 1;
_pos = missionpos;

if (missionStarted) then
{
deleteVehicle EastBarracks1;
deleteVehicle EastTurm3;
deleteVehicle EastTurm4;
sleep 1;
Killed1=false;
publicVariable "Killed1";
EastBarracks1 = createVehicle ["WarfareBEastBarracks", getMarkerPos "MarkerUps2", ["MarkerUps4"], 190, "NONE"];
EastBarracks1 setDamage 0;
EastBarracks1 doWatch _pos;
EastBarracks1 addEventHandler ["Killed", {Killed1=true; publicVariable "Killed1"; "InfantryTeam1" setMarkertypeLocal "empty"}];
"InfantryTeam1" setMarkerPos getPos EastBarracks1;
"InfantryTeam1" setMarkerType "InfantryTeam";
"InfantryTeam1" setMarkerText "InfantryTeam 1";
sleep 2;
EastTurm3 = createVehicle ["DSHKM", EastBarracks1, [], 60, "NONE"];
EastTurm3 setDamage 0;
sleep 2;
EastTurm4 = createVehicle ["Stinger_Pod_East", EastBarracks1, [], 80, "NONE"];
EastTurm4 setDamage 0;
sleep 2;
_Bravo = createGroup EAST;
"SoldierECrew" createUnit [_pos, _Bravo,"this moveingunner EastTurm3; this addWeapon 'NVGoggles'; this addeventhandler ['killed', '_this select 0 spawn {sleep 15;deleteVehicle _this}']", 1,""];
"SoldierECrew" createUnit [_pos, _Bravo,"this moveingunner EastTurm4; this addWeapon 'NVGoggles'; this addeventhandler ['killed', '_this select 0 spawn {sleep 15;deleteVehicle _this}']", 1,""];
_lead = leader _Bravo;
_nul=[_lead,"Markerups6","nowait"]execVM "ups.sqf";
};
if (true) exitWith {};

Lg Ghost

Vienna
13.05.2009, 23:50
Ca. 250 Mal, weil dann die max. Zahl der Gruppen erreicht ist.