Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 05.04.2013, 11:17   #1 (permalink)
50 Beiträge
 
Registriert seit: 09.12.2006
Beiträge: 84
Standard Verschiedene Probleme

Hallo zusammen ,

mittlerweile erstelle ich schon gute Einzelspieler und Multiplayer Missionen, aber es gibt immer wieder kleinere Probleme mit verschiedenen Ideen die ich Umsetzen möchte. Ich hoffe ihr könnt mir bei folgenden Problemen helfen.

Das erste Problem was ich habe ist das ich eine Art Waffenkammer gebaut habe in der ein Auslöser prüft ob die Variable Wkaopen (public Variable in der init.sqf auf 1) = 1 oder 0 ist. Ist diese auf 0 ist die Waffenkammer zugänglich, ist diese auf 1 dann wird ein Teleport Script ausgeführt und der Spieler landet wieder 10 Meter vor der Waffenkammer. Dieser Auslöser ist auf jedermann mehrfach eingestellt, bei Aktivierung wird dieser Aufruf gestartet:

Code:
if (isServer) then {nul= execVM ""scripts\teleport.sqf""};
das Problem was nun im Multiplayer passiert ist, dass es egal welcher Spieler diesen Auslösebereich betritt er und alle anderen Spieler 10m vor die Waffenkammer teleportiert werden. Auch den Versuch den Aufruf des Scripts mit folgendem Code auzurufen:
Code:
"if (!isDedicated) then {nul= execVM ""scripts\teleport.sqf""};
funktioniert nicht. ( Soll halt nur für den ausgelöst werden der diesen Bereich betritt.)
Hier der Inhalt vom teleportscript:
Code:
if (wkaopen==1) then {
hint "!!!Halt!!! Sie haben keine Berechtigung zum Zutritt in die Waffenkammer! Gehen Sie zu Ihrem Einheitsfuehrer";
// Auswahlmarker wohin !
_dest = "wka_spawn"; // wka_spawn marker name auf der map

// Setzen der Winkelvariable
_dir = random 359;

// Bewegen der teleportierenden Einheit
player SetPos [(getMarkerPos _dest select 0)-1*sin(_dir),(getMarkerPos _dest select 1)-1*cos(_dir)];
}
else
{
hint "Willkommen in der Waffenkammer, bitte nur das befohlene Mission Equipment entnehmen!";
};
Wo liegt der Fehler ?

Das zweite Problem was ich habe ist, dass ich über einen Trigger dem Einheitsführer Actionseinträge zur Verfügung stelle. Es funktioniert auch das er nur diese Einträge sieht, aber das was mich verzweifeln lässt ist das wenn ein anderer Spieler in die Nähe vom Einheitsführer ist und diesen anschaut plötzlich auch diese Actionseinträge sieht und auch ausführen kann! Schaut dieser wieder in eine andere Richtung sind die Einträge wieder verschwunden ! Ist das ein Bug oder ein Fehler meinerseits ?

Nun noch eine letzte frage:
Ich habe 50 Fahrzeuge die alle durchnummeriert sind mit f1 -f50 diese möchte ich alle abschliessen per script, diese mach ich momentan über einen Script wo ich jedes Fahrzeug mit:
Code:
f1 lock true;
f2 lock true;
usw.
verschliesse. Ich habe versucht das ganze in einem Array zumachen aber habe noch keine Erfahrung mit Arrays, hat jemand eine idee wie ich das machen kann ?

Im Voraus Vielen Dank für euere Antworten,

Gruß Togo
Togo ist offline   Mit Zitat antworten
Alt 05.04.2013, 16:26   #2 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Ändere den Auslöser wie im Code angeführt und kopiere in das Skript den Code.

Code:
// Aufruf des Skripts in folgendem Auslöser:
//
// Achse A und B: 10
// Aktivierung  : Jeder | Einmal  (anstelle von Jeder kann auch eine Seite gewählt werden)
// Bedingung    : true
// Name         : Trigger1
// Bei Akt.     : temp = [Trigger1, "wka_spawn"] execVM "scripts\teleport.sqf"
//
// Verwendet public Variable: wkaopen 

private ["_triggerName","_markerName","_dir"];

_triggerName = _this select 0;  // Trigger-Name
_markerName  = _this select 1;  // Marker-Name

while {true} do
 {
  waitUntil {player in list _triggerName};
  if (wkaopen==1) then
   {
    hint "!!!Halt!!! Sie haben keine Berechtigung zum Zutritt in die Waffenkammer! Gehen Sie zu Ihrem Einheitsfuehrer";
    _dir = random 359; // Setzen der Winkelvariable
    // Bewegen der teleportierenden Einheit:
    player SetPos [(getMarkerPos _markerName select 0)-1*sin(_dir),(getMarkerPos _markerName select 1)-1*cos(_dir)]
   }
  else
   {
    hint "Willkommen in der Waffenkammer, bitte nur das befohlene Mission Equipment entnehmen!";
    waitUntil {!(player in list _triggerName)}
   };
  sleep 1
 }


In den Trigger, der dem Einheitsführer Actionseinträge zur Verfügung stellt, muss in der Bedingung stehen:
player == NameDerFüherfigur


{_x lock true} forEach [f1, f2 ,usw.];

Geändert von Vienna (06.04.2013 um 17:48 Uhr).
Vienna ist offline   Mit Zitat antworten
Alt 05.04.2013, 16:34   #3 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Buliwyf
 
Registriert seit: 11.03.2005
Ort: HH
Alter: 46
Beiträge: 1.927
Standard

Moin..

Zu 1)
Ist klar das jeder gebeamt wird, da im Script PLAYER steht.. und Player ist nunmal jeder, der zur Zeit auf dem Server ist. Du musst also denjenigen rauspicken, der in dem Auslöser steht.
Es gibt einige Möglichkeiten dies zu tun... zB:
Code:
_unit=TRIGGERNAME select 0;
Zu 2)
Der addAction-Befehl ist erweiterbar... wie sehr, findest Du im Wiki... ich würds so machen:
Code:
ID01 = this addAction ["ActionName", "script.sqf", true, 0, false, true, "", "player == leader (group player)"];
Zu 3)
Code:
for "_i" from 1 to 50 do {
_varName = call compile format ["'f%1'", _i];
_varName lock true;
};
__________________
Buliwyf ist offline   Mit Zitat antworten
Alt 06.04.2013, 09:07   #4 (permalink)
50 Beiträge
 
Registriert seit: 09.12.2006
Beiträge: 84
Standard

Hallo Vienna, Hallo Buliwyf,

vielen Dank für eure schnelle Antwort, aber ich komme nicht mit euren Lösungsansätzen bezüglich des Trigger / Teleports zurecht.
Vienna:
Ich kann mir in etwa vorstellen was in der Skript Änderung von Dir passiert, was mir aber nicht einleuchtet ist das mit dem Trigger, hier ist die Größe A10 B10 und Auslösung keiner, klar dieser löst direkt aus durch True und wiederholt das Script alle 1sec.. Soweit so gut, wie nenne ich den Trigger was übermittelt das Player 1 im Bereich ist? In meiner Mission habe ich den ganzen Bereich der Waffenkammer mir einem Trigger belegt mit einer Größe von A15 B25, wenn der Bereich betreten wurde löste der Trigger das Script aus , bei deinem Lösungsansatz fehlt mir dieser Trigger.
Buliwyf:
Auch dein Lösungsansatz klingt gut aber mit der Umsetzung hapert es. Ich verstehe noch nicht die Arbeit mit Arrays und auch nicht das mit den Variablen _Variablenname. Arbeite ich damit kommt meist die Fehlermeldung: lokale Variable im Globalen Space oder so, das ist mir noch nicht so verständlich.
Ich habe mein Missionstemplate mal als Anhang eingefügt. Vielleicht habt jemand auch ein paar Beispiele.

Gruß Togo
Angehängte Dateien
Dateityp: rar Template_Waffenkammer_Esbekist.esbekistan.rar (9,4 KB, 22x aufgerufen)

Geändert von Togo (06.04.2013 um 09:12 Uhr).
Togo ist offline   Mit Zitat antworten
Alt 06.04.2013, 18:03   #5 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Bei Aktivierung beim Auslöser ist mir ein Fehler unterlaufen. Es muss "Jeder" oder eine Seite gewählt werden. Ich habe das oben im Post berichtigt.

Die Bedingung des Triggers wird im Skript durch diese Zeile ersetzt:
waitUntil {player in list _triggerName};
Das Skript stoppt hier so lange, bis der player (das ist der Spieler auf dem jeweiligen PC) im Triggerbereich ist. Dadurch stoppt das Skript auf den anderen PCs weiterhin, wenn ein Mitspieler im Trigger-Berech ist.

Die Abfrage list TriggerName gibt ein Array zurück, welches die Einheiten gemäß der Aktivierung enthält, die sich im Trigger-Bereich aufhalten.
Vienna ist offline   Mit Zitat antworten
Alt 07.04.2013, 12:37   #6 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Noch was zu 3), wie es Buliwyf bereits erwähnt hat:

Skript fahrzeugstatus.sqf
Code:
private ["_lock","_info","_code"];

if (fahrzeugstatus == 1) then
 {
  _lock = "true";
  _info = "Fahrzeuge benutzbar"
 }
else
 {
  _lock = "false";
  _info = "Fahrzeuge abgeschlossen"
 };
for "_i" from 1 to 47 do 
 {
  _code = format ["f%1 lock %2", _i, _lock];
  call compile _code  
 };
hint _info
Dieses Skirpt sollte nur beim Server/Host ausgeführt werden, weil der lock-Befehl laut Wiki "global" wirkt. Allerdings wird dann die Hint-Info nicht bei den Clients ausgegeben.

Die Info kannst du aber mit einem Mehrfach Auslöser verwirklichen, der auf die public Variable fahrzeugstatus anspricht. Die Info ist dort über "Bei Akt" und "Bei Deak" auszugeben.

Geändert von Vienna (07.04.2013 um 12:42 Uhr).
Vienna ist offline   Mit Zitat antworten
Alt 08.04.2013, 20:04   #7 (permalink)
50 Beiträge
 
Registriert seit: 09.12.2006
Beiträge: 84
Standard

Hallo Vienna,

habe es gerade alles eingebaut und getestet, funktioniert einwandfrei !!!
VIELEN DANK !!!! Hast du vieleicht auch eine Idee wie ich bei Multiplayer eine Art Respawnbegrenzung erstelle ? Ich möchte vor einer Mission festelegen das jeder z.b. nur 5 Leben (Respawn hat).

Grüßle Togo
Togo ist offline   Mit Zitat antworten
Alt 08.04.2013, 20:50   #8 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Das Skript soll lokal auf jedem Spieler PC laufen. Wenn die Respawnanzahl überschritten wurde, dann wird der Spieler auf eine Abseitsposition versetzt.

Man könnte das auch so abändern, dass der Spieler nach einer Strafzeit wieder in den Spielbereich versetzt wird. Nach jedem Respawn könnte sich diese Strafzeit auch verlängern.


Skript Respawn_anzahl.sqf
Code:
//Respawn-Zähler, Skript läuft lokal auf jedem Spieler-PC
//
//Aufruf in der init.sqf: [RespawnAnzahl,[AbsteitsPosition]] execVM "Respawn_anzahl.sqf";

if (isDedicated) exitWith {}; //Skript nur für PC mit Spieler
private ["_r","_p","_t"];  
_r = _this select 0; //Anzahl Respawn
_p = _this select 1; //Abseitsposition
_t = 0;              //Respawn-Zähler
while {true} do
 {
  waitUntil {!alive player};
  _t = _t + 1;
  waitUntil {alive player};
  if (_t > _r) then {player setPos _p} 
 }
Skript ist noch zu testen!

Nach dem 2. waitUntil kannst du z.B. die Bewaffnung nach dem Respawn einbinden. Soll die Bewaffnung bereits beim Spielstart vorhanden sein, dann vor dem 1. waitUntil,
Vienna ist offline   Mit Zitat antworten
Alt 25.04.2013, 21:31   #9 (permalink)
Newbie
 
Registriert seit: 25.04.2013
Beiträge: 27
Icon4

Hi,

folgendes Problem. Ich habe eine TVT Mission erstellt:

Es gibt 3 Seiten: BLUFOR, OPFOR, CIV

OPFOR hat den CIV als Geisel und muss ihn beschützen.
BLUFOR muss den CIV von den OPFOR befreien.
CIV muss zu einer Sicheren ZONE gebracht werden.

Ich habe dafür 3 Auslöser positioniert die das ENDE der Mission auslösen sollen:

CIV in ZONE: (funktioniert)
Code:
- Auslöser erstellt
- Achse A & B = 0
- Aktivierung: Zivilist
- Typ: ENDE 1
- Bedingung: civ1 in thislist;
- Bei Akt.:titletext["SEAL TEAM hat den Einsatz erfolgreich abgeschlossen!","PLAIN DOWN",1];
Zivilist wird gerettet un zu einer bestimmten Zone geführt

CIV wird getötet: (funktioniert)
Code:
- Auslöser erstellt
- Achse A & B = 0
- Aktivierung: Jeder
- Typ: Verlieren
- Bedingung: !alive civ1
- Bei Akt.:titletext["Die Rebellen haben keinen Arzt mehr und die NAVY SEALs konnten ihn nicht Retten, für beide Seiten GAME OVER","PLAIN DOWN",1];
Zivilist wird von irgendwem, irgendwas getötet.

BLUFOR wird getötet: (funktioniert nicht)
Code:
- Auslöser erstellt
- Achse A & B = 0
- Aktivierung: Jeder
- Typ: Ende 2
- Bedingung: !alive navy1 && !alive navy2 && !alive navy3 && !alive navy4 && !alive navy5 && !alive navy6 && !alive navy7 && !alive navy8 && !alive navy9 && !alive navy10
-  Bei Akt.:titletext["Alle SEALs wurden getötet","PLAIN  DOWN",1];
Die SEALs wurdne getötet von irgendwem, irgendwas. Leider funktioniert das nicht. Die SEALs werden respawn an dem Punkt wo eigentlich nur OPFOR respawnen soll.

Findet jemand den Fehler und kann mir sagen was ich anders machen sollte. Bin noch ein kleiner Noob mit dem Editor.

Danke
VidosQ ist offline   Mit Zitat antworten
Alt 26.04.2013, 07:51   #10 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Wenn Respawn erfolgt, dann kann die Bedingung so nicht funktionieren, außer alle BLUFOR sterben auf einem Schlag gemeinsam.

In der Datei description.ext die Zeilen mit Respawn und RespawnDelay entfernen, dann sollte kein Respawn mehr erfolgen.
Vienna ist offline   Mit Zitat antworten
Alt 26.04.2013, 08:55   #11 (permalink)
Newbie
 
Registriert seit: 25.04.2013
Beiträge: 27
Standard

Zitat von Vienna Beitrag anzeigen

Wenn Respawn erfolgt, dann kann die Bedingung so nicht funktionieren, außer alle BLUFOR sterben auf einem Schlag gemeinsam.

In der Datei description.ext die Zeilen mit Respawn und RespawnDelay entfernen, dann sollte kein Respawn mehr erfolgen.

Kann dann OPFOR dann noch Respawnen? Weil die brauchen die Fähigkeit.

Geteste: OPFOR hat kein Respawn mehr....

BLUFOR = braucht kein Respawn
OPFOR = braucht Respawn
CIV = braucht kein Respawn

Geändert von VidosQ (26.04.2013 um 09:01 Uhr).
VidosQ ist offline   Mit Zitat antworten
Alt 26.04.2013, 13:33   #12 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Dann verlege den Marker respawn_west auf eine abgelegene Insel oder in ein abgesperrtes Gebiet und erstelle einen Auslöser der feststellt ob alle Westeinheiten in diesem Abseits-Bereich sind.

Der Auslöser und sein Code könnte dann so aussehen:
Code:
Auslöser
Achse A und B: Größe der Abseitszone
Aktivierung  : Jeder | Einmal
Name         : TriggerAbseits
Bedingung    : true
Bei Akt.     : hier den unten angeführten Code reinkopieren

temp = 0 spawn 
 {
  private ["_aktiveWestSpieler1","_aktiveWestSpieler2"];
  while {true} do
   {    
   _aktiveWestSpieler1 = [];
   {
    if (side _x == west and isPlayer) then
     {
      _aktiveWestSpieler1 = _aktiveWestSpieler1 + [_x] 
     }
   } forEach playableUnits;
   _aktiveWestSpieler2 = [];
   {
    if (side _x == west and isPlayer) then
     {
      _aktiveWestSpieler2 = _aktiveWestSpieler2 + [_x] 
     }
   } forEach list TriggerAbseits;
   if (count _aktiveWestSpieler1 == count _aktiveWestSpieler2) then
    {
     <<<< Spielende hier eintragen >>> 
    };
   sleep 1
  }
 };
Das ist so notwendig, denn wenn ein West-Soldat mit keinen Spieler besetzt ist oder ein Spieler das Spiel verlässt, dann ist die namentliche Abfrage nicht mehr korrekt.
Vienna ist offline   Mit Zitat antworten
Alt 27.04.2013, 09:47   #13 (permalink)
Newbie
 
Registriert seit: 25.04.2013
Beiträge: 27
Standard

Danke ich werde es gleich mal ausprobieren

bei
Zitat:

<<<< Spielende hier eintragen >>>

muss ich den Verlierertext eingeben richtig?

und bei
_aktiveWestSpieler1
kann ich sicher anders nennen oder muss es genau so?
VidosQ ist offline   Mit Zitat antworten
Alt 27.04.2013, 11:53   #14 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Texte sind möglich und das Ende der Mission: http://community.bistudio.com/wiki/endMission


Variable die mit einem _Unterstrich beginnen sind lokale Variable und auf das jeweilige Skript begrenzt. Solche Variable können in Skripten den gleichen Namen haben, ohne sich gegenseitig zu beeinflussen. Du kannst diese Variablen nach belieben umbenennen.

Globale Variable sind ohne Unterstrich am Beginn und in allen Skripten und Routinen im Programm auf dem jeweiligen PC sichtbar.

Soll eine Wertänderung einer solchen globalen Variablen zu den anderen PCs übertragen werden, dann geschieht das nach der Wertänderung mit:
publicVariable "VariableName";
Vienna ist offline   Mit Zitat antworten
Antwort


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
Arma OA Arma2 und DayZ Probleme c4al DayZ 19 01.07.2012 20:12
Probleme mit der A.C.E. Ausrüstung Warmachine91 Mods & Addons 4 24.06.2012 12:50
ArmA II Probleme im Spiel und Patchen Basti1254 Technische Fragen & Probleme 9 20.10.2011 01:41
Probleme nach Patch 1.55 Jack Unger Technische Fragen & Probleme 8 02.12.2010 19:11
OA-KI Probleme u. Animation c0rtes Technische Fragen & Probleme 11 03.10.2010 21:26


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