PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Animationen im MP verbugt


GregorEZ
23.02.2017, 14:32
Hallo Leute,

ich habe folgendes Szenario erstellt:

1.) Gefangene Person kniet (per Animation) auf dem Boden.
2.) Offizier steht nah vor dem Gefangenem.

Dann wird ein Script aufgerufen:

Der Offizier führte eine Animation aus, bei der er die Waffe auf den Gefangenen richtet und dabei einen Schuss abgibt, wobei der Schuss natürlich auch nur eine Animation ist.

Damit aber ein Schuss abgegeben wird (für den Audioeffekt und das Mündungsfeuer) habe ich dem Script die Action "kill" hinzugefügt.

Der Gefangen führt dann eine Animation aus, bei der er umkippt. Sterben tut er dank setDamage.

Nun zum Problem:

Teste ich das ganze im Singleplayer, läuft es problemlos und sieht auch verdammt gut aus. Im Multiplayer, selbst gehostet (nicht dedicated) wenn ich das Script nach Killzone_Kids (https://community.bistudio.com/wiki/BIS_fnc_MP) Vorgabe angepasst habe, funtioniert auch alles.

Starte ich den Server jedoch ia TADST als dedicated, bugt der Ablauf. Im ersten Versuch wird die Animation der Hinrichtung doppelt ausgeführt. Gehe ich zurück in die Lobby und starte die Mission neu, läuft die Animation nur einmal.

Desweiteren, ebenfalls nur beim dedicated Server, ist der Schuss nicht zuhören.

Hat jemand eine Idee woran das liegen könnte?

Gruß Gregor.

Drunken Officer
23.02.2017, 15:41
Script wäre hilfreich. ich führe Animationen mit RemoteExec aus, damit sie im MP für jeden sichtbar sind.

Bis_fnc_Mp ist veraltet.
[deinObjekt,"deinegewünschteAnimation"] remoteExec ["playMove"]

Die Animation darf nur ein Client oder der Server ausführen, sonst kommt es zu Dopplungen.

GregorEZ
23.02.2017, 16:18
Jawoll, war noch auf nicht zu Hause :D

kill_informant.sqf:

if (isServer) then {

[[(Offizier),"Acts_Executioner_Squat"], "anim_fnc"] call BIS_fnc_MP;
sleep 10.033;
[[(Offizier),"Acts_Executioner_Squat_End"], "anim_fnc"] call BIS_fnc_MP;
sleep 5.468;

[[(Offizier),"Acts_Executioner_Kill"], "anim_fnc"] call BIS_fnc_MP;
sleep 0.65;
[[(informant),"Acts_ExecutionVictim_Kill_End"], "anim_fnc"] call BIS_fnc_MP;
sleep 1.05;
Offizier fire "hgun_Pistol_heavy_02_F";
sleep 2;
Offizier removeWeapon ((weapons Offizier) select 0);
sleep 1.6;
informant setDamage 1;
};

Teste es gerade mit remoteExec:

if (isServer) then {

//[[(Offizier),"Acts_Executioner_Squat"], "anim_fnc"] call BIS_fnc_MP;
[Offizier, "Acts_Executioner_Squat"] remoteExec ["playMove"];
sleep 10.033;

//[[(Offizier),"Acts_Executioner_Squat_End"], "anim_fnc"] call BIS_fnc_MP;
[Offizier, "Acts_Executioner_Squat_End"] remoteExec ["playMove"];
sleep 6;

//[[(Offizier),"Acts_Executioner_Kill"], "anim_fnc"] call BIS_fnc_MP;
[Offizier, "Acts_Executioner_Kill"] remoteExec ["playMove"];
sleep 0.65;

//[[(informant),"Acts_ExecutionVictim_Kill_End"], "anim_fnc"] call BIS_fnc_MP;
[informant, "Acts_ExecutionVictim_Kill_End"] remoteExec ["playMove"];

sleep 3.05;

Offizier removeWeapon ((weapons Offizier) select 0);
sleep 1.6;
informant setDamage 1;
else {
sleep 17.083;
Offizier fire "hgun_Pistol_heavy_02_F";

};

Geladen wird das Script über einen EH:

init.sqf:

"b_spotted" addPublicVariableEventHandler {if (b_spotted > 0) then { 0 = []execVM "scripts\mission\kill_informant.sqf"};};