Geschrieben
·
bearbeitet von brainslush An das neue HCF angepasst!
=TSS= Headless Client Framework (HCF)
by: .:NemesisoD:. & Brainslush Ideen von zinki
Funktion
Damit jeder Missionsbauer sehr einfach in seinen Missionen auf das HCF zurückgreifen kann möchte ich hier kurz erklären wie dieses Funktioniert:
Was macht ein Headless Client?
Ein Headless Client (kurz HC) ist prinzipiell ein ganz normaler Spieler, welcher lediglich kein Interface, d. h. keine Grafikausgabe, besitzt. Er wird dazu eingesetzt um die AI vom Server zu übernehmen, damit dieser sich auf die Verwaltung von Spielern und dem Missionsablauf kümmern kann. Dadurch ist es möglich deutlich mehr AI zu positionieren, welche gleichzeitig auch noch viel agiler ist. Es ist auch möglichen Berechnungen auf den/die HC/s auszulagern, was aber auf Grund mancher Probleme mit HCs (z. B. Disconnects), nicht ratsam ist. In der Regel laufen die HCs auf dem selben Hardware wie der Server. Der Grund dafür liegt daran, dass Arma nicht in der Lage ist mehr als zwei Kerne mit mehr als 50% auszulasten. Bei einem 8-Kern CPU kann man also somit bedenkenlos 4HCs mitlaufen lassen.
Grundsätzlich: Ein oder mehrer HCs bringen ein Performancevorteil. Aber man sollte abwägen, ob es immer sinnvoll ist. Bei einer 5 Mann Mission mit vllt. 50 AI Gegner, ist es eher sinnfrei.
Vorbereitung
Um überhaupt HCs in der Mission verwenden zu können, müssen wir daher diesen Slots bereitstellen. Dazu stellen wir beim =TSS= 4 HC-Slots bereit.
Um einen HC Slot hinzuzufügen platzieren wir im Editor eine neue Einheit: Side: Game Logic Class: Virtual Entities Unit: Headless Client Name: HC_1, HC_2, etc.
Diese Einheit setzen wir "Playable"/"Spielbar" und fertig.
Der Headless Client wird sich in der Slotliste automatisch auf einen dieser Slots platzieren.
Einrichten
Um das HCFramework zu nutzen gibt es drei Möglichkeiten.
1. Editormodule: Paket: hcf_core
Brain hat ingesamt 3 Module zur Verfügung gestellt: "Enable Group Transfer" Modul: Wenn Ihr dieses gesetzt habt, werden alle gesetzten Units auf die HCs gleichmäßig aufgeteilt. Ausnahme: Units die synchronisierte Waypoints besitzen oder mit dem "Disable Transfer" Modul synchronisiert sind "Enable Debug" Modul: Wenn das Modul gesetzt ist, schreibt es in die RPTs der HCs, Server und der Spieler alle 5 Sekunden eine Zeile, in der ersichtlich ist, wie viele KI vorhanden ist und wer wie viel zu händeln hat.
2. Spawnen von Einheiten: Paket: hcf_spawn
Empfehlung: Installiert euch die Poseidon Tools um Überischt bei der Befehlerstellung zu behalten. Die "[" und "]" werden recht viele!
Eine Möglichkeit ist es Einheiten direkt auf einen HC spawnen zu lassen, dazu wird folgender Befehl benötigt:
handle: Ein Scripthandle braucht ihr nur, wenn ihr den Aufruf in einem Trigger verwendet (kennen die Meisten als "nul =").
SpawnPos: Position an der die Gruppe Spawnt (z.B. getMarkerPos "mk_spawnpoint" oder getPos Objectname)
side: Die Seite zu der die Gruppe gehört (z.B. EAST, WEST, etc.)
units: Array mit den Classnames der Einheiten, oder die config der Gruppe (z.B. ["rhs_vdv_rifleman","rhs_vdv_rifleman"] oder (configfile >> "CfgGroups" >> "Indep" >> "IND_F" >> "Infantry" >> "HAF_InfTeam") oder ein Multidimensionales Array*)
Der zweite Teil des Befehls ist gesplittet in den "TASK" und die dafür nötigen Parameter:
*Was sind multidimensionale Arrays und was will der Autor überhaupt damit? Was ist das: Ein multidimensionales Array ist ein Array in dem verschiedene Arrays sind (https://community.bistudio.com/wiki/Array#Multi-dimensional_arrays). Was will der Autor damit: An einem Beispiel wird es schnell klar:
Wie man vllt. erkennen kann, ist der Aufruf ellenlang und man kapiert nichts mehr! Daher habe ich für den Parameter units ein Array erstellt in dem die verschieden Arrays der Gruppen gespeichert sind:
Dieses Script rufe ich einmal in der init.sqf auf:
if (isServer) then {
[] execVM "scripts\guerGroup.sqf";
};
Da ich nun ein multidimensionales Array habe, in dem alle meine Gruppen gespeichert sind, kann ich per "select X" die verschiedenen Gruppen in jedem Trigger und Script (solange vom Server gesteuert) verwenden. Dadurch wird mein Anfangsbeispiel kürzer und übersichtlicher:
[Mod] Headless Client Framework
in Mod Ecke
Geschrieben · bearbeitet von brainslush
An das neue HCF angepasst!
=TSS= Headless Client Framework (HCF)
by: .:NemesisoD:. & Brainslush
Ideen von zinki
Funktion
Damit jeder Missionsbauer sehr einfach in seinen Missionen auf das HCF zurückgreifen kann möchte ich hier kurz erklären wie dieses Funktioniert:
Was macht ein Headless Client?
Ein Headless Client (kurz HC) ist prinzipiell ein ganz normaler Spieler, welcher lediglich kein Interface, d. h. keine Grafikausgabe, besitzt. Er wird dazu eingesetzt um die AI vom Server zu übernehmen, damit dieser sich auf die Verwaltung von Spielern und dem Missionsablauf kümmern kann. Dadurch ist es möglich deutlich mehr AI zu positionieren, welche gleichzeitig auch noch viel agiler ist. Es ist auch möglichen Berechnungen auf den/die HC/s auszulagern, was aber auf Grund mancher Probleme mit HCs (z. B. Disconnects), nicht ratsam ist. In der Regel laufen die HCs auf dem selben Hardware wie der Server. Der Grund dafür liegt daran, dass Arma nicht in der Lage ist mehr als zwei Kerne mit mehr als 50% auszulasten. Bei einem 8-Kern CPU kann man also somit bedenkenlos 4HCs mitlaufen lassen.
Grundsätzlich: Ein oder mehrer HCs bringen ein Performancevorteil. Aber man sollte abwägen, ob es immer sinnvoll ist. Bei einer 5 Mann Mission mit vllt. 50 AI Gegner, ist es eher sinnfrei.
Vorbereitung
Um überhaupt HCs in der Mission verwenden zu können, müssen wir daher diesen Slots bereitstellen. Dazu stellen wir beim =TSS= 4 HC-Slots bereit.
Um einen HC Slot hinzuzufügen platzieren wir im Editor eine neue Einheit:
Side: Game Logic
Class: Virtual Entities
Unit: Headless Client
Name: HC_1, HC_2, etc.
Diese Einheit setzen wir "Playable"/"Spielbar" und fertig.
Der Headless Client wird sich in der Slotliste automatisch auf einen dieser Slots platzieren.
Einrichten
Um das HCFramework zu nutzen gibt es drei Möglichkeiten.
1. Editormodule: Paket: hcf_core
Brain hat ingesamt 3 Module zur Verfügung gestellt:
"Enable Group Transfer" Modul: Wenn Ihr dieses gesetzt habt, werden alle gesetzten Units auf die HCs gleichmäßig aufgeteilt.
Ausnahme: Units die synchronisierte Waypoints besitzen oder mit dem "Disable Transfer" Modul synchronisiert sind
"Enable Debug" Modul: Wenn das Modul gesetzt ist, schreibt es in die RPTs der HCs, Server und der Spieler alle 5 Sekunden eine Zeile, in der ersichtlich ist, wie viele KI vorhanden ist und wer wie viel zu händeln hat.
2. Spawnen von Einheiten: Paket: hcf_spawn
Empfehlung: Installiert euch die Poseidon Tools um Überischt bei der Befehlerstellung zu behalten. Die "[" und "]" werden recht viele!
Eine Möglichkeit ist es Einheiten direkt auf einen HC spawnen zu lassen, dazu wird folgender Befehl benötigt:
*Was sind multidimensionale Arrays und was will der Autor überhaupt damit?
Was ist das:
Ein multidimensionales Array ist ein Array in dem verschiedene Arrays sind (https://community.bistudio.com/wiki/Array#Multi-dimensional_arrays).
Was will der Autor damit:
An einem Beispiel wird es schnell klar: Wie man vllt. erkennen kann, ist der Aufruf ellenlang und man kapiert nichts mehr! Daher habe ich für den Parameter units ein Array erstellt in dem die verschieden Arrays der Gruppen gespeichert sind: Dieses Script rufe ich einmal in der init.sqf auf: Da ich nun ein multidimensionales Array habe, in dem alle meine Gruppen gespeichert sind, kann ich per "select X" die verschiedenen Gruppen in jedem Trigger und Script (solange vom Server gesteuert) verwenden. Dadurch wird mein Anfangsbeispiel kürzer und übersichtlicher:
3) Spawnen von Einheiten als Zeus: Paket: hcf_zeus
Insgesamt verfügt dieses Paket über drei Module: