Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 13.09.2012, 15:35   #1 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard Problem mit Script in einer Mission...

Hallo zusammen,
ich arbeite gerade an einer A.C.E Mission und habe da ein Problem mit einem (oder mehreren) Script(s). Und zwar wollte ich eine Multiplayer Mission machen, bei der man einen Gegner tötet, dann zu diesem hingehen und einen Koffer o.ä. einsammel muss. Danach soll man eine neue Waffe bekommen. Als ich zwischendurch meine Mission testen wollte hat das Script, welches eigentlich die Trigger und den Koffer zu der Leiche teleportieren sollte nicht richtig geklappt. Hier der Code:
Code:
//BLU2Down.sqf
while {true} do {

_pos = (getPos _this);
sleep 1;

if (!alive _this) then {

BLU2Tag setpos _pos;
BLU2BLU setpos _pos;
BLU2OPF1 setpos _pos;
BLU2OPF2 setpos _pos;
BLU2OPF3 setpos _pos;
"BLU2Mark" setMarkerPos _pos;

waitUntil { alive _this };
execVM "BLU2Rearm.sqf";
};
};
Init Zeile von der Einheit Namens BLU2:
Code:
nul = execVM "BLU2Down.sqf";
gibt es einen Fehler in dem Script oder kann es sein, dass es nicht klappt weil ein paar andere Scripts, welche in der Init.sqf aufgerufen werden noch nich existieren? Oder kann es noch andere Ursachen haben?

MfG
Rhisd
TheRhisd ist offline   Mit Zitat antworten
Alt 13.09.2012, 16:36   #2 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 31
Beiträge: 1.724
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Die herangehensweise ist denkbar ungünstig und unnötig kompliziert.

Mach es anders:
- setze einen Koffer in eine Stille Ecke der Map mit dem Namen KOFFER
- setze einen Auslöser auf die Map mit Bedingung isServer && !alive BLU2 und ausgelöst wird KOFFER setPos getPos BLU2
- in die Init des Koffers schreibst du folgendes: this allowDamage false; this addAction ["Koffer öffnen","koffer.sqf"];
- in der Datei koffer.sqf erledigst du nun einfach den Waffenwechsel, wie auch immer du diesen gestalten möchtest und alles was sonst noch dazu gehört.


Zum debuggen von Scripten starte Arma einfach mit dem Kommando -showScriptErrors in der .exe unter Ausführen.

Falls weitere Fragen zu dem von mir geschriebenen aufkommen hilft dir dieser Guide hier: Armed Assault Editing Guide - Deluxe Edition - German - Editing References - Armaholic



Grüße
__________________
Niemand hat die Absicht eine Tüte zu bauen!
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 13.09.2012, 17:28   #3 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard

Ok werds mal versuchen... Danke für die Hilfe
TheRhisd ist offline   Mit Zitat antworten
Alt 13.09.2012, 18:56   #4 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard Problem halb gelöst...

Das von dir genannte Verfahren klappt soweit. Allerdings hab ich nun eine weitere Frage:
Ist es möglich in dem koffer.sqf Script herauszufinden, wer den Koffoer geöffnet hat? Wenn ja wie? Weil die Mission sollte ein 3 vs. 3 Match werden und nur derjenige, der den Koffer öffnet soll eine neue Waffe erhalten.

EDIT: Problem mit Distanzabfrage gelöst...

Geändert von TheRhisd (13.09.2012 um 20:14 Uhr).
TheRhisd ist offline   Mit Zitat antworten
Alt 13.09.2012, 21:33   #5 (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

Du kannst in der koffer.sqf abfragen wer den Menüeintrag ausgelöst hat:

Code:
_caller = _this select 1;
__________________
Buliwyf ist gerade online   Mit Zitat antworten
Alt 14.09.2012, 18:13   #6 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard Klappt prima :)

Der von dir geschriebene Weg klappt wunderbar. Danke

Habe aber noch ein Script mit einem Problem:
Das Script soll eine Munitionskiste mit dem Inhalt füllen, den sie am Anfang der Mission hatte:
Code:
//Refill.sqf
_weap = getWeaponCargo _this;

_ammo = getMagazineCargo _this; 

_boxname = _this select 0;

_true = true;

while {_true} do {

clearWeaponCargo _boxname;
clearMagazineCargo _boxname;
{_boxname addWeaponCargo [_x select 0,_x select 1];} forEach _weap;
{_boxname addMagazineCargo [_x select 0,_x select 1];} forEach _ammo;

sleep 30;

_boxname setdammage 0;
if( !alive _boxname) then {
   _newbox = (typeOf _boxname) createvehicle (getpos _boxname);
   _newbox setpos (getpos _boxname);
   deletevehicle _boxname;
  _boxname = _newbox;
};
};
Init von Kiste:
Code:
nul = execVM "Refill.sqf"
Das Script klappt bis auf den Part mit dem Wiederauffüllen...
Hat jemand eine Idee?

MfG
Rhisd
TheRhisd ist offline   Mit Zitat antworten
Alt 14.09.2012, 18:51   #7 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 01.07.2006
Ort: Kabul
Alter: 32
Beiträge: 2.662
Standard

Code:
//Refill.sqf
_weap = getWeaponCargo _this;

_ammo = getMagazineCargo _this; 

_boxname = _this select 0;

_true = true;

while {_true} do {

clearWeaponCargoGlobal _boxname;
clearMagazineCargoGlobal _boxname;
{_boxname addWeaponCargoGlobal [_x, 1]} forEach _weap;
{_boxname addMagazineCargoGlobal [_x, 10]} forEach _ammo;

sleep 30;

_boxname setdammage 0;
if( !alive _boxname) then {
   _newbox = (typeOf _boxname) createvehicle (getpos _boxname);
   _newbox setpos (getpos _boxname);
   deletevehicle _boxname;
  _boxname = _newbox;
};
};
Das script nur vom server ausfuehren lassen

Code:
if (isServer) then {0 = execVM "Refill.sqf"}
gruß
hoschi
__________________


Moerderhoschi ist offline   Mit Zitat antworten
Alt 14.09.2012, 18:54   #8 (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

Naja... wenn die Kiste den Inhalt haben soll, den sie am Anfang hatte, dann musst Du Variablen _weap und _ammo global machen.. also bspw. myBoxWeapon und myBoxAmmo und die neuen Variablen außerhalb des Scripts Refill.sqf mit Leben füllen.
Also zB kurz nach Missionsstart mittels eines Triggers oder was auch immer... hauptsache raus aus der Datei Refill.sqf, weil Du ja sonst jedesmal den Ist-Stand der Kiste auslesen würdest... und das willste ja eben nicht.

__________________
Buliwyf ist gerade online   Mit Zitat antworten
Alt 14.09.2012, 19:00   #9 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 01.07.2006
Ort: Kabul
Alter: 32
Beiträge: 2.662
Standard

Buliwyf hat recht, vergiss das was ich geschrieben habe.

gruß
hoschi
__________________


Moerderhoschi ist offline   Mit Zitat antworten
Alt 14.09.2012, 19:08   #10 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard

Ohh danke für die schnelle Antwort
Werd ich dann mal versuchen...
Hoffe das wars erstmal mit Problemen
Vielen Dank nochmal
MfG Rhisd
TheRhisd ist offline   Mit Zitat antworten
Alt 14.09.2012, 22:19   #11 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard Noch ein Problem... jippie

Also ich hab die erste Mission jetzt fertig und wollte diese mit einem Kumpel testen. Wenn jemand in der Mission stirbt verliert er bekanntlich alles was er hatte und erhält das standart Equipment. In der Mission ist es aber wichtig, dass man Nach dem Tod wieder den gleichen Stand der Waffen hat wie vorher. Ich habe das Problem für mich gelöst aber auf gleichem Weg passiert bei meinem Kumpel nichts. Wenn ich aber mit der Einheit spiele, die mein Kumpel vorher hatte, und sterbe bekomm ich auch das richtige Equipment wieder. Hier die nötigen Codezeilen:
Code:
BLU1Koffer setPos getPos BLU1;
"BLU1Mark" setMarkerPos getpos BLU1Koffer;

sleep 42; //Respawn Zeit überbrücken
execVM "refillblu1.sqf";//neu Ausrüsten
Alles klappt auch bei meinem Freund bis auf den letzten Teil
Fällt euch was ein?
TheRhisd ist offline   Mit Zitat antworten
Alt 15.09.2012, 10:50   #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

Das Problem liegt vermutlich daran, dass du der Host und der Mitspieler ein Client ist. Sozusagen ein "Lokalitätsprobelm". Die üblichen globalen Variablen können auf den PCs unterschiedliche Werte haben, wenn sie nicht mit publicVariable synchronisiert werden.

Wenn du als Host in einem Skript eine globale Variable änderst, dann hat den Wert ein Client nur, wenn du den Wert mit publicVariable "Variablename"; sendest.


Die Waffenzuteilung solltest du so lösen:

Erstelle im Editor einen Mehrfachauslöser mit

Bedingung: alive player

Bei Akt: temp = [] execVM "refillblu1.sqf"

Im Skript ist für player die gewünschte Bewaffnung durchzuführen.

Der Name player bezieht sich automatisch lokal auf den jeweiligen Spieler auf seinem PC.

Immer wenn ein Spieler eine neue Spielfigur erhält, ruft dieser Auslöser das Skript auf. Das gilt auch für den Spielstart.


Sollen die Spieler unterschiedliche Bewaffnungen haben, dann müsstest du im Skript noch Abfragen mit den Soldatennamen einbinden wie z.B.:


if (player == Soldat1) then {... Bewaffnung ...};

if (player == Soldat2) then {... Bewaffnung ...};

...


Willst du die Bewaffnung des toten Spielers übernehmen dann musst du die FigurenID vor dem Tod absichern. Dabei ist aber einiges zu beachten. Das kann man auch über ein einmalig aufzurufendes Skript lösen.

Siehe diesen Thread: Problem: Respawn mit Vor-Tod-Bewaffnung
Vienna ist offline   Mit Zitat antworten
Alt 15.09.2012, 12:02   #13 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard

Kann ich auch die Namenanfrage im Trigger unterbringen also quasi mehrere trigger
Die in der bedingungszeile z.b. Alive Player && Player == BLU1. Stehen haben? Hab nämlich schon für jeden ein Bewaffnungs Skript... Bin grad nicht am PC und kann's nicht testen...
TheRhisd ist offline   Mit Zitat antworten
Alt 15.09.2012, 14:33   #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

Ja, das geht auch mit der von dir genannten Abfrage und jeweils eigenem Skript.

Es ist aber zweckmäßig den Programmaufwand so weit wie möglich zu verkürzen, weil man bei Änderungen sonst leicht die Übersicht verliert.


Bei Verwendung von mehreren Auslösern könnte man auch mit nur einem Skript auskommen, wenn die jeweilige Bewaffnung als Parameter übergeben wird.

z.B.:

Bedingung: alive player and player == Soldat1
Bei Akt: temp = ["MagazinName", MagazinAnzahl, "Waffenname"] execVM "Bewaffnung.sqf"


Noch erheblich übersichtlicher ist ein Auskommen mit einem Auslöser und einem Skript.

Der Auslöser wie bereits im vorherigen Post angeführt:

Mehrfachauslöser
Bedingung: alive player
Bei Akt: temp = [] execVM "Bewaffnung.sqf"

Dann im Skript die jeweilige Bewaffnung festlegen:

//allgemeine Bewaffnung
_mag = "MagName";
_magAnzahl = 4;
_waffe = "WaffeName";

//besondere Bewaffnung
if (player == Soldat1) then {_mag="MagName"; _magAnzahl= 4; _waffe="WaffeName"};
if (player == Soldat2) then {_mag="MagName"; _magAnzahl= 4; _waffe="WaffeName"};
...

Auch sind übersichtliche Programmroutinen einfacher in andere Missionen zu übernehmen!
Vienna ist offline   Mit Zitat antworten
Alt 15.09.2012, 19:43   #15 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard

Danke schön
TheRhisd ist offline   Mit Zitat antworten
Alt 16.09.2012, 19:53   #16 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard Waffen Kiste auffüllen klappt nicht

Ich habe mal, wie ihr gesagt habt, versucht die Waffen aus der Waffenkiste woanders zu speichern, allerdings hat es nicht geklappt.
Ich habe versucht in der Init.sqf den Variablen die Werte zu geben: ohne Erfolg
Ich habe versucht mittels Trigger, welcher direkt nach der Mission auslöst:
bedingung: Blufor vorhanden
akt: variable = getWeaponCargo Munnikiste; ... Hab auch in dem script die Namen geändert.
Hat auch nicht funktioniert... Hab auch versucht den getWeaponCargo Befehl in Klammern () und {} zu setzen... auch ohne Erfolg...
TheRhisd ist offline   Mit Zitat antworten
Alt 17.09.2012, 07:46   #17 (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 du das z.B. in die Initialisierungszeile der Munikiste reinschreibst:

Waffen1 = getWeaponCargo this; Muni1 = getMagazineCargo this;

dann sollte der Inhalt vom Spielstart in den Variablen gesichert sein. (Die beiden Befehle sind nur in Arma2 OA anwendbar!)


Zum Testen erstelle einen Funk-Auslöser in den du Bei Akt. folgendes reinschreibst:

hint format["Waffen: %1 Muni: %2", Waffen1, Muni1]

Beim Aufruf des Funk-Auslösers wird dir der Inhalt der Variablen angezeigt.

So einen Funk-Auslöser kannst du natürlich auch zum Testen des Inhalts der Variablen deiner derzeitigen Lösung verwenden. Er dient der Feststellung, ob der Fehler beim Sichern des Inhalts oder beim Auffüllen liegt.
Vienna ist offline   Mit Zitat antworten
Alt 17.09.2012, 16:38   #18 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard

Ok werd ich gleich mal ausprobieren. Danke schonmal für den Hinweis aber meinst du mit:
Zitat von Vienna Beitrag anzeigen

(Die beiden Befehle sind nur in Arma2 OA anwendbar!)

Dass die Befehle nicht in ArmA 2 vorhanden sind oder dass sie mit Mods wie z.B. A.C.E nicht funktionieren?

EDIT: Jo der Fehler liegt auf jedem Fall beim Befüllen der Kiste... hab auch schon eine Vermutung, was falsch sein könnte.

Geändert von TheRhisd (17.09.2012 um 16:47 Uhr).
TheRhisd ist offline   Mit Zitat antworten
Alt 17.09.2012, 17:44   #19 (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

Wie du hier siehst: http://community.bistudio.com/wiki/getWeaponCargo gibt es den Befehl nur für OA ab Version 1.54.
Vienna ist offline   Mit Zitat antworten
Alt 17.09.2012, 19:30   #20 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard

achso ja stimmt. Macht Sinn hab vorher noch nie so drauf geachtet... Hab aber leider keinen Plan was bei dem Befüllen falsch läuft...
TheRhisd 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
Beta-Patch für OpA erschienen det99 Community 1429 18.07.2014 16:51
Patch 1.60! Xeno Community 69 11.01.2012 12:41
1.60 rc Dieter66 Community 47 22.12.2011 15:49
Ammobox Script problem G36Firestorm Editing & Scripting 11 18.07.2011 15:04
Revive Script Problem wArDoG81 Editing & Scripting 8 13.05.2011 22:35


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