PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unterschiedliches AI-Verhalten auf dedi Server


SmokyJoey
14.11.2013, 22:01
Hallo
ich hab auf der Map eine West-Einheit gesetzt. Der Einheit schreib ich in die InitZeile:

aaOffz02 = this;{aaOffz02 enableAI _x} foreach ["MOVE", "AUTOTARGET", "ANIM", "TARGET", "FSM"];removeAllWeapons aaOffz02;aaOffz02 allowdamage false;aaOffz02 allowfleeing 0;
über Script spawne ich einen feindlichen Heli mit

_Target = [_spwnPos, 180, "O_Heli_Attack_02_F", _trgtSite] call bis_fnc_spawnvehicle;
die Gegner-Seite (_trgtSite) wird so erzeugt:

_trgtSite = createCenter east;
_trgtSite setfriend [west, 1];
west setfriend [_trgtSite, 1];
Starte ich das Ganze im Multiplayer mit lokalem Server, funktioniert alles so wie ich es will.
Der Gegner-Heli wird gespawnt und der West-Soldat bleibt stehen wie eine eins und rührt sich nicht.

Starte ich das Ganze mit dediziertem Server, tut´s nicht mehr.
Sobald ich den Heli spawne, geht der West-Soldat in Deckung und legt sich hin.

Wie bekomme ich den West-Soldaten dazu, auch auf dem Dedi das zu machen was ich will - nämlich einfach stehen bleiben und nichts tun?

SmokyJoey
15.11.2013, 11:29
ich hab jetzt noch weiterführend getestet.....
irgendwie scheint der Dedi "setfriend" auszuhebeln....

ich frage in Schleife den Freundschafts-Status zwischen der gespawnten Feindeinheit und west ab ---> ist beim Start vom lokalen Server (so wie ichs auch vorgebe) 1 .... und bleibt es auch.

Wenn ich´s auf dem Dedi starte, ist der Wert beim Start auch 1 - sobald ich aber den Feindheli spawne geht der Wert auf 0.....

Irgendjemand ´ne Idee?

Lester
15.11.2013, 12:27
ich hab jetzt noch weiterführend getestet.....
irgendwie scheint der Dedi "setfriend" auszuhebeln....

ich frage in Schleife den Freundschafts-Status zwischen der gespawnten Feindeinheit und west ab ---> ist beim Start vom lokalen Server (so wie ichs auch vorgebe) 1 .... und bleibt es auch.

Wenn ich´s auf dem Dedi starte, ist der Wert beim Start auch 1 - sobald ich aber den Feindheli spawne geht der Wert auf 0.....

Irgendjemand ´ne Idee?Der Dedi hebelt da nichts aus, das Problem ist die für die MP Nutzung schlechte Umsetzung der Scripte/Befehle.

Es gibt welche mit globale und welche mit lokalen Effekten, KI Aktionen müssen nur auf den Maschinen ausgeführt werden wo diese auch berechnet wird.

i.D.R. ist das der Server, beim gehosteten Spiel ist der aber eben auch gleichzeitig Client, insofern können da Dinge funktionieren die auf einen Dedizierten Server eben nicht funktionieren, weil dort diverse Clientaktionen eben nicht automatisch ankommen.

SmokyJoey
15.11.2013, 15:18
danke @Lester für den Input....
Aber wie kann ich das nun lösen? (oder läßt es sich nicht lösen?)

Ich habe jetzt gehofft, dass wenn ich die Feindseite global erzeuge, dass es dann funktioniert.....
Aber selbst wenn ich das auf globaler Ebene versuche, tut´s nicht. Oder kapier ich´s nur nicht?

mein aktueller Testaufbau bezieht sich jetzt rein auf dieses Problem:

beim Initialisieren des Spiels wird die Feindseite so erzeugt:

trgtSite = createCenter east;
publicVariable "trgtSite";



unmittelbar danach wird ein script aufgerufen, was nur Folgendes macht:

trgtSite setfriend [west, 1];
west setfriend [trgtSite, 1];

(beides wird auch nur auf dem Server ausgeführt)

via Funkauslöser rufe ich den Abfrage-Script auf:

_friendA = west getfriend trgtSite;
_friendB = trgtSite getfriend west;

hintC format ["FeundW = %1\nFreundE = %2", _friendA, _friendB];
Ergebnis wenn ich´s lokal starte:
FreundW = 1
FreundE = 1

Ergebnis wenn ich´s dediziert starte:
FreundW = 0
FreundE = 0

irgendwie kapier ich´s ned :confused:


EDIT [GELÖST]:
ich hab´s jetzt für mich so gelöst und es funktioniert:

- Gegnerseite global erzeugt und auf freundlich gesetzt
- unmittelbar bevor ich den feindlichen Heli spawne, frage ich die freundschaftswerte nochmal ab und sind die kleiner 1, befehle ich meiner West-Unit erneut disableAI und setze die Freundschaft auf 1.
- dann erst spawnt der Heli.

Jetzt klappts auf dem Dedi