Inkonsistenz in Geiselskript

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Inkonsistenz in Geiselskript

    Hi,

    Ich habe ein Problem in meinem Skript, das zu inkonsistentem Verhalten führt: Zuweilen steigt der mitgeführte NPC nicht in Fahrzeuge ein, steigt aus und sofort wieder ein oder weigert sich das Fahrzeug zu verlassen. Das kommt aber nur sporadisch vor und ich kann mir diese Verhalten nicht wirklich erklären warum es mal geht und mal nicht. Es wäre super wenn sich jemand, mit mehr Erfahrung als ich, das mal ansehen könnte.

    Gruß
    Daishi

    Quellcode: grabnew.sqf

    1. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    2. // Needed file: releasenew.sqf //
    3. // place this in the init of the unit that is a hostage(called whatever you like e.x. HVT): //
    4. // HVT addaction["<t color='#FF0000'>Move HVT</t>","grabnew.sqf",nil,1,false,true,"","(_target distance _this <3)"]; //
    5. // change number at the end <3 to the range in meters you want the player to see addaction //
    6. // By TyrDaishi //
    7. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    8. HVT =_this select 0;
    9. taker =_this select 1;
    10. _stance = 0;
    11. _lastStance = "UP";
    12. _objarray = attachedObjects taker;
    13. findhvt = _objarray find str HVT;
    14. if (findhvt <= 0) then {
    15. //add hostage to taker and add release
    16. HVT attachto [taker,[-0.3,0.5,0]];
    17. _index=taker addaction["Release HVT","releasenew.sqf"];
    18. findhvt = 1;
    19. while {alive HVT && (findhvt > 0) && (HVT distance taker <=4)} do
    20. {
    21. HVT enableAI "FSM";
    22. HVT disableAI "AUTO";
    23. HVT disableAI "AUTOTARGET";
    24. HVT disableAI "Move";
    25. HVT disableAI "Anim";
    26. HVT setbehaviour "Careless";
    27. HVT allowfleeing 0;
    28. HVT setCombatMode "Blue";
    29. //set unit stance according to taker
    30. sleep 0.1;
    31. //hint Format["Stance:%1",_stance];
    32. switch (stance taker) do
    33. {
    34. case "STAND": {_stance = "UP";sleep 0.2;};
    35. case "CROUCH": {_stance = "MIDDLE";sleep 0.2;};
    36. case "PRONE": {_stance = "DOWN";sleep 0.2;};
    37. case "UNDEFINED": {_stance = _lastStance;sleep 0.2;};
    38. default {_stance = _lastStance;sleep 0.2;};
    39. };
    40. //HVT setUnitPos _stance;
    41. [[HVT,_stance],"setUnitPos",true,true] call BIS_fnc_MP;
    42. //change animation according to mv speed and position
    43. //Combatroll
    44. // if ("AmovPpneMstpSrasWrflDnon_AmovPpneMevaSlowWrflDl" == AnimationState taker) then {[[HVT,"AmovPpneMstpSnonWnonDnon_AmovPpneMevaSnonWnonDl"],"playmovenow",true,true] call BIS_fnc_MP;};
    45. // if ("AmovPpneMstpSrasWpstDnon_AmovPpneMevaSlowWpstDl" == AnimationState taker) then {[[HVT,"AmovPpneMstpSnonWnonDnon_AmovPpneMevaSnonWnonDl"],"playmovenow",true,true] call BIS_fnc_MP;};
    46. // if ("AmovPpneMstpSrasWrflDnon_AmovPpneMevaSlowWrflDr" == AnimationState taker) then {[[HVT,"AmovPpneMstpSnonWnonDnon_AmovPpneMevaSnonWnonDr"],"playmovenow",true,true] call BIS_fnc_MP;};
    47. // if ("AmovPpneMstpSrasWpstDnon_AmovPpneMevaSlowWpstDr" == AnimationState taker) then {[[HVT,"AmovPpneMstpSnonWnonDnon_AmovPpneMevaSnonWnonDr"],"playmovenow",true,true] call BIS_fnc_MP;};
    48. //NoMovement //Stand, Crouch, Prone
    49. if ((speed taker <= 0.1) && (stance taker == "STAND")) then {[[HVT,"AmovPercMstpSnonWnonDnon"],"playmovenow",true,true] call BIS_fnc_MP;};
    50. if ((speed taker <= 0.1) && (stance taker == "CROUCH")) then {[[HVT,"AmovPknlMstpSnonWnonDnon_relax"],"playmovenow",true,true] call BIS_fnc_MP;};
    51. if ((speed taker <= 0.1) && (stance taker == "PRONE")) then {[[HVT,"AmovPpneMstpSnonWnonDnon"],"playmovenow",true,true] call BIS_fnc_MP;;};
    52. //Speed normal //Stand, Crouch, Prone
    53. if ((speed taker >= 5.8) && (stance taker == "STAND")) then {[[HVT,"AmovPercMrunSnonWnonDf"],"playmovenow",true,true] call BIS_fnc_MP;};
    54. if ((speed taker >= 4.5) && (stance taker == "CROUCH")) then {[[HVT,"AmovPknlMrunSnonWnonDf"],"playmovenow",true,true] call BIS_fnc_MP;};
    55. if ((speed taker >= 1.7) && (stance taker == "PRONE")) then {[[HVT,"AmovPpneMrunSnonWbinDf"],"playmovenow",true,true] call BIS_fnc_MP;};
    56. //Speed fast //Stand, Crouch, Prone
    57. if ((speed taker >= 15) && (stance taker == "STAND")) then {[[HVT,"AmovPercMevaSnonWnonDf"],"playmovenow",true,true] call BIS_fnc_MP;};
    58. if ((speed taker >= 12) && (stance taker == "CROUCH")) then {[[HVT,"AmovPknlMevaSnonWnonDf"],"playmovenow",true,true] call BIS_fnc_MP;};
    59. if ((speed taker >= 3.3) && (stance taker == "PRONE")) then {[[HVT,"AmovPpneMsprSnonWnonDf"],"playmovenow",true,true] call BIS_fnc_MP;};
    60. //check if player in and near vehicle, add HVT to vehicle accordingly
    61. if (taker != (vehicle taker)) then {
    62. detach HVT;
    63. taker removeaction _index;
    64. HVT action ["getInCargo",vehicle taker];
    65. sleep 0.4;
    66. HVT allowCrewInImmobile true;
    67. HVT disableAI "FSM";
    68. HVT disableAI "MOVE";
    69. sleep 0.2;
    70. while { (HVT in vehicle taker) && (findhvt > 0 || findhvt <= 0)} do
    71. {
    72. waituntil {!(taker in (vehicle HVT))};
    73. sleep 0.2;
    74. HVT enableAI "FSM";
    75. HVT enableAI "MOVE";
    76. sleep 0.2;
    77. HVT action ["eject", vehicle HVT];
    78. unassignVehicle HVT;
    79. HVT attachto [taker,[-0.3,0.5,0]];
    80. _index=taker addaction["Release HVT","releasenew.sqf"];
    81. };
    82. };
    83. };
    84. taker removeaction _index;
    85. };
    Alles anzeigen


    and this is to release the hostage from the caretaker:

    Quellcode: releasenew.sqf

    1. ///////////////////////////////
    2. // needed file: grabnew.sqf //
    3. // By TyrDaishi //
    4. ///////////////////////////////
    5. _Taker=_this select 0;
    6. _index=_this select 3;
    7. _id=_this select 2;
    8. findhvt = 0;
    9. detach HVT;
    10. HVT enableAI "AUTO";
    11. HVT enableAI "AUTOTARGET";
    12. HVT enableAI "Move";
    13. HVT enableAI "Anim";
    14. HVT setbehaviour "Aware";
    15. HVT allowfleeing 1;
    16. HVT setCombatMode "Yellow";
    17. player removeaction _id;
    Alles anzeigen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von TyrDaishi ()

  • OK vorweg kann ich es mir nicht verkneifen dir ans Herz zu legen dir ein paar Tutorials anzuschauen.
    Versuch mal das ganze ohne sleep und while-Schleifen hinzubekommen, sonst sind die Probleme vorprogrammiert (und ja das geht, und nein sleep verbessert nicht die Performance). Ich weiß nicht ob es Absicht ist aber an einigen Stellen solltest du eine lokale Variable nutzen statt eine globale (z.B. taker).

    Aber eigentlich ich möchte nicht dein Skript verbessern sondern deine Frage beantworten:
    HVT action ["getInCargo",vehicle taker];

    Du lässt dein HVT einsteigen und wartest erstmal 0.4s bevor du sicherstellst, dass er auch wirklich im Fahrzeug sein darf (allowCrewInImmobile )... Wieso?
    Außerdem beachtest du in die Lokalität des Fahrzeug überhaupt nicht. Hier solltest du dich genauer Informieren und deinen Code entsprechend anpassen.

    101st Airborne Division
    airborne-division.de

    TaktiCool (ArmaAtWar, CLib, Streamator)
    github.com/TaktiCool
  • NetFusion schrieb:

    OK vorweg kann ich es mir nicht verkneifen dir ans Herz zu legen dir ein paar Tutorials anzuschauen.
    Versuch mal das ganze ohne sleep und while-Schleifen hinzubekommen, sonst sind die Probleme vorprogrammiert (und ja das geht, und nein sleep verbessert nicht die Performance). Ich weiß nicht ob es Absicht ist aber an einigen Stellen solltest du eine lokale Variable nutzen statt eine globale (z.B. taker).

    Aber eigentlich ich möchte nicht dein Skript verbessern sondern deine Frage beantworten:
    HVT action ["getInCargo",vehicle taker];

    Du lässt dein HVT einsteigen und wartest erstmal 0.4s bevor du sicherstellst, dass er auch wirklich im Fahrzeug sein darf (allowCrewInImmobile )... Wieso?
    Außerdem beachtest du in die Lokalität des Fahrzeug überhaupt nicht. Hier solltest du dich genauer Informieren und deinen Code entsprechend anpassen.
    Hi, welche Tutorials empfiehlst du? Wie ich bereits schrieb bin ich ein Anfänger in diesen dingen. Und die Tutorials die ich angeschaut habe, habe ich auch befolgt. Aus sicht von jemanden der das schon jahre macht sieht das wahrscheinlich anders aus, das ist mir klar. "Lokalität des Fahrzeugs" die Auswirkung ist mir leider nicht klar und wie ich das prüfe.