Armed-Assault.de Twitter
 
 
Themen-Optionen Ansicht
Alt 17.08.2014, 14:47   #1 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Wolkenbeisser
 
Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
Standard Zivilistentode zählen (von definierten Einheiten verursacht)

Hallo zusammen

Ich könnte ein wenig Hilfe bei der im Betreff genannten Abfrage brauchen. Sie sollte in einer gehosteten MP-Mission funktionieren. Da meine Scriptkenntnisse eher bescheiden sind, versuche ich hier in 'Pseudoscriptsprache' aufzuzeigen, was ich mir vorstelle.

1. variable 'toteziv=0' in die Init.sqf

2. Auslöser wie folgt:

BED:
not alive _x and _x=sidecivilian and _x !=Spion and (_x=Kind of man or _x=Kind of man in a Car) and (Killer ist AL1 or Killer ist AL2)

AKT:
toteziv=toteziv + 1; publicvariable "toteziv"

3. Auslöser, der bei 'toteziv >= 5' ein 'End1' bewirkt

Der Counter darf sich nur erhöhen, wenn:
- der getötete Zivilist ein Mensch ist (zu Fuss oder in einem Auto)
- der getötete Zivilist nicht 'Spion' heisst
- der 'getötete' nicht ein leeres Auto, ein Fass, ein Haus etc. ist
- der Killer entweder die Einheit AL1, oder die Einheit AL2 ist

Bei Pt. 2 bräuchte ich Hilfe, den Rest krieg ich dann vermutlich schon hin.

Jetzt schon vielen Dank für eure Hilfe

Nachtrag:
Es gibt im Editor gesetzte Zivilisten auf der Karte, aber auch solche, die durch ein Script gespawnt und (bei Entfernung der Spieler) wieder gelöscht werden. Keine Ahnung, wie ich sicherstellen könnte, dass alle Zivils (auch wenn sie erst im Verlauf der Mission gespawnt werden) jederzeit einen allenfalls benötigten eventhandler haben. :-(

Geändert von Wolkenbeisser (17.08.2014 um 15:06 Uhr).
Wolkenbeisser ist offline  
Alt 17.08.2014, 18:42   #2 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Mein altes Gehirn hat doch noch Speicherfunktionen. Das sollte dir helfen
Zivilisten Counter
__________________
Bewegende Momente bei ArmA 3
Drunken Officer ist offline  
Alt 17.08.2014, 19:14   #3 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Buliwyf
 
Registriert seit: 11.03.2005
Ort: HH
Alter: 52
Beiträge: 1.930
Standard

init.sqf:
Code:
toteziv = 0;
killers = ["AL1","AL2"];
agenten = ["Spion"];

GDT_fnc_civCounter = {
	_opfer = _this select 0;
	_schuetze = _this select 1;
	if ( !(vehicleVarName _opfer in agenten) and (_opfer isKindOf "Man" or _opfer isKindOf "Car") and (vehicleVarName _schuetze in killers) ) then { toteziv = toteziv + 1; publicVariable "toteziv";};
	hintSilent format["%1",toteziv];
};

{ if (side _x == CIVILIAN) then { _x addEventHandler ["KILLED",{_this call GDT_fnc_civCounter}]; } } forEach allUnits;
Und für jede nachträglich generierte Einheit sicherstellen, dass der EventHandler "Killed" ausgeführt wird. Irgendein Script wird ja dafür verantwortlich sein... da musst Du es halt einbauen.
Code:
_unit addEventHandler ["KILLED",{call GDT_fnc_civCounter}];
__________________
Buliwyf ist offline  
Alt 17.08.2014, 20:12   #4 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Wolkenbeisser
 
Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
Standard

Hey Buliwyf, das ging aber schnell. Danke schon mal für die schnelle Hilfe. Werde es ausprobieren, sobald ich dazu komme (hoffe, noch heute).

Kurze Frage noch zu diesem Abschnitt in Deinem Code:

Code:
.....or _opfer isKindOf "Car"......
Werden hiermit leere Autos nicht auch gezält? Es dürfen nur Autos gezählt werden, wenn sich ein Zivilist darin befindet (die steigen auf Grund meines Zivilistenscripts manchmal ein und wieder aus). Besser formuliert: Nicht das Auto darf den Zähler erhöhen, sondern nur der im Auto sitzende Zivi.
Wolkenbeisser ist offline  
Alt 17.08.2014, 20:15   #5 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Buliwyf
 
Registriert seit: 11.03.2005
Ort: HH
Alter: 52
Beiträge: 1.930
Standard

Da der EventHandler auf den Zivilisten durch allUnits gesetzt ist, interessiert das Auto nicht. allUnits beinhaltet nur künstliche Intelligenz und keine Objekte.
Du musst bei den spawnenden Einheiten natürlich den EventHandler auf die KI und nicht auf das Auto setzen...
__________________
Buliwyf ist offline  
Alt 17.08.2014, 20:17   #6 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Wolkenbeisser
 
Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
Standard

Alles klar. Danke

Melde mich, sobald ich getestet habe.
Wolkenbeisser ist offline  
Alt 17.08.2014, 23:09   #7 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Wolkenbeisser
 
Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
Standard

Klappt perfekt!

Habe alle möglichen Tests gemacht:

- Als 'AL1' vier Zivilisten erledigt, dann Respawn, dann 1 Zivilist
- Als 'AL2' Zivilisten überfahren
- Als 'AL3' Zivilisten, die in Autos sassen erledigt
- Als 'AL4' leere Autos (und andere Objekte) gesprengt
- Als 'AL5' andere Einheiten, statt der Zivilisten erledigt
- Als 'AL6' Per Script gespawnte Zivilisten erledigt
- Als 'AL7' Im Editor gesetzte Zivilisten erledigt
- Als 'AL8' gesetzte/gespawnte Zivilisten gemischt erledigt
- Als Spion > 10 Zivilisten erledigt
- geschaut, was passiert, wenn ein Ziv. von einem anderen Ziv. überfahren wird

Der Code von Buliwyf (ergänzt mit den spielbaren Figuren AL3 - AL8) hat in jeder Situation richtig funktioniert. Damit ist mein Problem gelöst.

Nochmals: Danke Buliwyf
Wolkenbeisser ist offline  
Alt 05.01.2015, 22:06   #8 (permalink)
Newbie
 
Registriert seit: 05.01.2015
Beiträge: 3
Standard

Entschuldigt wenn ich das hier Quasi wieder ausgrabe,aber ich habe vor in einer MP-Mission per script Zivilisten die als erschossen gelten zu zählen und beim überschreiten einer bestimmten Zahl aufständische zu spawnen und als "Framework" sieht das hier ideal aus.

Leider bekomme ich das beim besten willen nicht zum laufen,liegt das an dem verwendetem "addEventHandler" bzw müsste das in meinem Fall nicht "addMPEventhandler" sein?

Habe jedes Civilian-Casualties-Script ausprobiert das ich gefunden habe,keines Zählt bzw funktioniert.Muss dazu sagen,dass ich Civilisten per EOS spawne.
Ich wäre echt dankbar wenn da jemand licht ins dunkle bringen könnte
Schorsch ist offline  
Alt 06.01.2015, 03:09   #9 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Kommasetzung, Satzzeichen sowie Groß-&Kleinschreibung ist nicht so dein Fall, oder?

Keine Ahnung was EOS ist, aber du mußt in dem Script diesen o.g. EH einfügen.
addeventHandler reicht völlig aus.

Jeder KI beim Spawnen den Killed-EH anhängen und pro Aktivierung den Wert hochzählen lassen. Allerdings sollte ganz zum Anfang in der ServerInit totezivs = 0 stehen
__________________
Bewegende Momente bei ArmA 3
Drunken Officer ist offline  
Alt 06.01.2015, 17:18   #10 (permalink)
Newbie
 
Registriert seit: 05.01.2015
Beiträge: 3
Standard

Zitat von Drunken Officer Beitrag anzeigen

Kommasetzung, Satzzeichen sowie Groß-&Kleinschreibung ist nicht so dein Fall, oder?

Es war Spät [für mich],geb mir Mühe meine Beiträge in Zukunft etwas ordentlicher abzusetzen.Danke auf jeden Fall für die Erklärung.

Ich denke das Script läuft soweit aber es zählt nicht sichtbar hoch.Wenn ein Zivilist getroffen wird,erscheint unter der Waffenanzeige eine Box mit einer Null.Diese Zahl verändert sich auch nicht.Sollte sich das nicht ändern?

Ist es legitim
Code:
killers = [side player == blufor];
zu benutzen um den Counter auf Blufor anstatt einzelne,benannte Einheiten anzuwenden?
Schorsch ist offline  
Alt 06.01.2015, 17:40   #11 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Icon10

Hast du Buli sein Script 1:1 übernommen? Oder was hst du bereits gemacht?

Du willst einen Zähler haben, welcher auslöst, wenn ein Blauer einen Civ umniedet, richtig?

init:
Code:
if (isServer) then {totezivs = 0; { if (side _x == civilian) then {_x addeventhandler ["killed", {call dof_civcnt}]; } }foreach allunits};
dof_civcnt = 
{
_toter = _this select 0;
_schuetze = _this select 1;

If (side _schuetze == west) then 
{
 if (isServer) then {totezivs = totezivs + 1};
hint format ["%1 \n hat einen Zivilisten getötet. \n \n Anzahl aller getöteten Zivilisten: \n %2", name _schuetze, totezivs ];
}
jeder nach spawnenden ziviler KI hängst du den EH Killed an.

Wie du dann die Reißleine ziehst, wenn viele Zivis tot sind, ist dir überlassen.

Willst du die eigene KI von Schuld und Sühne befreien dann schreibe
If (isplayer _schuetze) then {....} anstatt If (side _schuetze == west)
__________________
Bewegende Momente bei ArmA 3

Geändert von Drunken Officer (06.01.2015 um 18:21 Uhr).
Drunken Officer ist offline  
Alt 06.01.2015, 19:27   #12 (permalink)
Newbie
 
Registriert seit: 05.01.2015
Beiträge: 3
Standard

Hab vielen dank,dir mag das trivial vorkommen aber das hat mir immens weitergeholfen.Mein Scripten ist derzeit noch vergleichbar mit einer Horde Affen die versucht ein Auto zu fahren
Schorsch ist offline  
Alt 29.04.2015, 07:33   #13 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Wolkenbeisser
 
Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
Standard

Hallo zusammen

Sorry, wenn ich meinen alten Fred wieder ausgrabe. Ich wollte nun dieses Script in einer neuen Mission verwenden und bin auf ein Problem gestossen.

Alles funzt prima, solange ich als Mörder zu Fuss unterwegs bin, oder mit einem Auto Zivilisten überfahre (siehe meine Tests im Post vom 18.08.2014, 00:09).

Aber: Sobald ich als Schütze eines Fahrzeuges (z.B. aus einem Panzer, Hunter oder Heli) morde, funktioniert der Zähler nicht mehr.

Ich habe versucht das Problem zu lösen, in dem ich die 'killers' im Script mit dem Zusatz 'vehicle' versah (also z.B. vehicle AL1 statt AL1), aber das hat nicht geholfen.

Hat jemand eine Idee, wie man das Script ergänzen müsste, dass auch die Morde eines Fahrzeugschützen zählen?
Wolkenbeisser ist offline  
Alt 29.04.2015, 11:31   #14 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Buliwyf
 
Registriert seit: 11.03.2005
Ort: HH
Alter: 52
Beiträge: 1.930
Standard

Naja, wenn Du meine Variante nutzt, die ist ja nun auf die Variablennamen zurechtgeschnitten. Wenn Du nun als "Hans" in den Helikopter "Fuchur" einsteigst und dort Leute abknallst, dann kann ich mir gut vorstellen, dass ArmA die Kills "Fuchur" zuschreibt und nicht "Hans". Das schliesse ich zumindest aus Deinen Ausführungen so...

Momentan, uff Maloche, hab ich da keibe schnelle Idee wie man das ändern könnte. Ich denke aber, dass man das komplett anders machen müsste - ohne vehicleVarName und so...
__________________
Buliwyf ist offline  
Alt 29.04.2015, 13:15   #15 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Wolkenbeisser
 
Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
Standard

Aha, aber trotzdem ein interessanter Hinweis, Buliwyf

Da die Spieler in meiner Coop explizit nur genau 6 Fahrzeuge zur Verfügung haben (3 Autos und 3 Hubis), die erst noch alle einen eigenen Variablennamen haben (wegen Fz-Respawn und Abfrage in Triggern), könnte ich doch einfach diese Variablen noch zu der Liste der 'killers' hinzufügen.

Das muss ich dringend testen, sobald ich dazu komme... melde mich dann wieder.

Vielen Dank inzwischen.

----------
Edith meint:

Aber warum werden die Morde dann gezählt, wenn ich als Fahrer die Zivis umniete? Als Fahrer wäre Hans im Auto doch auch Fuchur....

Geändert von Wolkenbeisser (29.04.2015 um 13:22 Uhr).
Wolkenbeisser ist offline  
Alt 01.05.2015, 06:28   #16 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 10.10.2006
Beiträge: 263
Standard

Da könnte man jetzt Überprüfen ob der Agent in der Crew ist

Code:
{if (_x in agenten) exitwith { toteziv = toteziv + 1; publicVariable "toteziv";};
} foreach (crew vehicle _schütze)
Nokman ist offline  
Alt 01.05.2015, 15:30   #17 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Wolkenbeisser
 
Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
Standard

@ Nokman: Vielen Dank für den Hinweis. Werde das bei Gelegenheit ausprobieren.

@ Buliwyf: Ich habe die Variablennamen der Fahrzeuge nun auch in dem Script als 'killers' eingetragen. Das funktioniert bestens. Im Moment reicht das für meine Zwecke vollkommen.

Vielen Dank euch beiden. Problem gelöst
Wolkenbeisser 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
T8 Units - Einheiten Spawn Script T-800a Editing & Scripting 2 07.03.2014 20:46
Einheiten in Gruppe löschen Brubaker Editing 6 26.05.2011 17:44
Heal/Repair Script / Einheiten in einem Radius zufällig generieren lassen Noobfire Editing & Scripting 8 06.08.2010 15:22


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