Ace 3 damage Deaktivieren

  • * Life

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

  • Ace 3 damage Deaktivieren

    Hallo zusammen,

    habe nur eine kleine Frage,
    ich habe ein Script in dem ich ganz kurz, jeglichen schade eines Spieler ausstellen möchte.
    Nur leider weiß ich nicht wie ich Ace das bei bringen soll und habe auch leider bei Google nichts gefunden was mir wirklich hilft.
    player allowDamage false; funktioniert ja leider nicht.

    Kann mir jemand verraten wie das geht ?

    Bei dem Script handelt es sich um ein Taser Script welches beim eintreffen der kugel den schaden halt ausschalten soll :)

    Freue mich über Hilfe
    Liebe Grüße
    Pasi
  • Also ich bin zwar kein ACE Experte, aber ich gehe schwer davon aus, dass ACE den Schaden über einen EventHandler verarbeitet und ich denke am wahrscheinlichsten ist es, dass der HandleDammage verwendet wird. Das bedeutet, wenn du den Schaden verhindern willst musst du den EH überschreiben (selber einen hinzufügen) mit einem, der immer 0 zurück gibt (somit wird immer der resultierende Scahden von 0 angewandt).

    Siehe hier für Details.
    Entwickler von SQDev
    Co-Entwickler von OurAltis
  • this allowDamage false; funktioniert leider nicht es geht um einen anderen Spieler bei dem ich die Init nicht standardmäßig umsetzen kann.
    Ich poste hier mal beide Scripts es handelt sich dabei um AL Scripts

    Quellcode

    1. private["_unit","_damage","_source","_projectile","_part","_curWep"];
    2. _unit = _this select 0;
    3. _part = _this select 1;
    4. _damage = _this select 2;
    5. _source = _this select 3;
    6. _projectile = _this select 4;
    7. //Internal Debugging.
    8. if(!isNil "TON_Debug") then {
    9. systemChat format["PART: %1 || DAMAGE: %2 || SOURCE: %3 || PROJECTILE: %4 || FRAME: %5",_part,_damage,_source,_projectile,diag_frameno];
    10. };
    11. //Handle the tazer first (Top-Priority).
    12. if(!isNull _source) then {
    13. if(_source != _unit) then {
    14. _curWep = currentWeapon _source;
    15. if(_projectile in ["B_9x21_Ball","B_556x45_dual"] && _curWep in ["hgun_Rook40_F","hgun_Rook40_snds_F"]) then {
    16. private["_distance","_isVehicle","_isQuad"];
    17. _distance = if(_projectile == "B_556x45_dual") then {100} else {50};
    18. _isVehicle = if(vehicle player != player) then {true} else {false};
    19. _isQuad = if(_isVehicle) then {if(typeOf (vehicle player) == "B_Quadbike_01_F") then {true} else {false}} else {false};
    20. _damage = false;
    21. if(_unit distance _source < _distance) then {
    22. if(!life_istazed && !(_unit getVariable["restrained",false])) then {
    23. if(_isVehicle && _isQuad) then {
    24. player action ["Eject",vehicle player];
    25. [_unit,_source] spawn life_fnc_tazed;
    26. } else {
    27. [_unit,_source] spawn life_fnc_tazed;
    28. };
    29. };
    30. };
    31. };
    32. if(playerSide == independent && side _source == independent) then {
    33. _damage = false;
    34. };
    35. };
    36. };
    37. _damage;
    Alles anzeigen


    Das hier startet alles was passiert wenn der Spieler getroffen wurde.

    Quellcode

    1. /*
    2. File: fn_tazed.sqf
    3. Author: Bryan "Tonic" Boardwine
    4. Description:
    5. Starts the tazed animation and broadcasts out what it needs to.
    6. */
    7. private["_unit","_shooter","_curWep","_curMags","_attach"];
    8. _unit = [_this,0,Objnull,[Objnull]] call BIS_fnc_param;
    9. _shooter = [_this,1,Objnull,[Objnull]] call BIS_fnc_param;
    10. if(isNull _unit OR isNull _shooter) exitWith {player allowDamage true; life_istazed = false;};
    11. if(_shooter isKindOf "Man" && alive player) then
    12. {
    13. if(!life_istazed) then
    14. {
    15. life_istazed = true;
    16. _curWep = currentWeapon player;
    17. _curMags = magazines player;
    18. _attach = if(primaryWeapon player != "") then {primaryWeaponItems _unit} else {[]};
    19. {player removeMagazine _x} foreach _curMags;
    20. player removeWeapon _curWep;
    21. player addWeapon _curWep;
    22. if(count _attach != 0 && primaryWeapon _unit != "") then
    23. {
    24. {
    25. _unit addPrimaryWeaponItem _x;
    26. } foreach _attach;
    27. };
    28. if(count _curMags != 0) then
    29. {
    30. {player addMagazine _x;} foreach _curMags;
    31. };
    32. [[_unit],"life_fnc_tazeSound",true,false] spawn life_fnc_MP;
    33. _obj = "Land_ClutterCutter_small_F" createVehicle (getPosATL _unit);
    34. _obj setPosATL (getPosATL _unit);
    35. [[player,"AinjPfalMstpSnonWnonDf_carried_fallwc"],"life_fnc_animSync",true,false] spawn life_fnc_MP;
    36. [[0,"STR_NOTF_Tazed",true,[profileName, _shooter getVariable["realname",name _shooter]]],"life_fnc_broadcast",true,false] spawn life_fnc_MP;
    37. _unit attachTo [_obj,[0,0,0]];
    38. disableUserInput true;
    39. sleep 15;
    40. [[player,"amovppnemstpsraswrfldnon"],"life_fnc_animSync",true,false] spawn life_fnc_MP;
    41. if(!(player getVariable["Escorting",false])) then {
    42. detach player;
    43. };
    44. life_istazed = false;
    45. player allowDamage true;
    46. disableUserInput false;
    47. };
    48. }
    49. else
    50. {
    51. _unit allowDamage true;
    52. life_iztazed = false;
    53. };
    Alles anzeigen
  • Greni schrieb:

    völlig falsch gelesen ... oder reicht in der Init der Einheit nicht
    this allowDamage false;
    Ja es reicht. Damit nimmt die Einheit keinen Schaden mehr.
    Ob der Schaden im Medic Menü noch angezeigt wird bin ich mir nicht sicher, aber Schaden nehmen tut die Einheit dann nicht mehr.
    Haben das sowohl local als auch auf nem Dedi getestet.

    Nutzen nämlich genau diese Funktion wenn ich Trigger und Spawnsscripte teste.
  • So wie ich das sehe, setzt du "player allowDamage false;" nicht in der If Bedingung, daher bekommt der Spieler auch Schaden.
    Ich sehe sowie im gesamten Script kein "player allowDamage false;", übersehe ich etwas?! Wo setzt du denn den Schaden für den Spieler auf false?

    Sollte ich nichts übersehen haben einfach in der ersten Zeile unter dem "If (!life_istazed) then" einfach ein "player allowDamage false" einfügen und der Spieler sollte keinen Schaden mehr nach dem Tasern erhalten.

    MfG

    Chibi
  • Das ist das Problem.

    Ich benutze einen eventhandler der handldamage heißt.
    diese Datei ist der event handler.

    Quellcode

    1. /*
    2. File: fn_handleDamage.sqf
    3. Author: Bryan "Tonic" Boardwine
    4. Description:
    5. Handles damage, specifically for handling the 'tazer' pistol and nothing else.
    6. */
    7. private["_unit","_damage","_source","_projectile","_part","_curWep"];
    8. _unit = _this select 0;
    9. _part = _this select 1;
    10. _damage = _this select 2;
    11. _source = _this select 3;
    12. _projectile = _this select 4;
    13. //Internal Debugging.
    14. if(!isNil "TON_Debug") then {
    15. systemChat format["PART: %1 || DAMAGE: %2 || SOURCE: %3 || PROJECTILE: %4 || FRAME: %5",_part,_damage,_source,_projectile,diag_frameno];
    16. };
    17. //26_taser
    18. //Handle the tazer first (Top-Priority).
    19. if(!isNull _source) then {
    20. if(_source != _unit) then {
    21. _curWep = currentWeapon _source;
    22. if(_projectile in ["B_9x21_Ball","B_556x45_dual"] && _curWep in ["hgun_Rook40_F","hgun_Rook40_snds_F"]) then {
    23. private["_distance","_isVehicle","_isQuad"];
    24. _distance = if(_curWep IN ["SMG_02_ARCO_pointg_F","arifle_Mk20_GL_MRCO_pointer_F"]) then {150} else {50};
    25. _isVehicle = if(vehicle _unit != player) then {true} else {false};
    26. _isQuad = if(_isVehicle) then {if(typeOf (vehicle player) IN ["B_Quadbike_01_F"]) then {true} else {false};};
    27. _damage = false;
    28. if((_unit distance _source < _distance)) then {
    29. if(!life_istazed && !(_unit getVariable["restrained",false])) then {
    30. //[_unit,_source] spawn life_fnc_tazed;
    31. if(_isVehicle) then {
    32. if(_isQuad) then {
    33. player action ["Eject",vehicle player];
    34. [_unit,_source] spawn life_fnc_tazed;
    35. };
    36. } else {
    37. [_unit,_source] spawn life_fnc_tazed;
    38. };
    39. };
    40. };
    41. };
    42. };
    43. };
    44. [] call life_fnc_hudUpdate;
    45. _damage;
    Alles anzeigen




    Hiermit fange ich normalerweise den Schaden ab deswegen funktioniert das ganze auch nicht.

    Quellcode

    1. _damage = _this select 2;
    Später wir dies hier ausgeführt und damit für das Event der Schade für den der abgeschossen wurde entfernt

    Quellcode

    1. _damage = false;
    Hier mal ein Bild zum EventHandler dort siehst du auch die Parameter die ich abfrage




    Wenn ich die Methode benutze ist aus irgend welchen Gründer der Spieler entweder Unverwundbar oder Stirbt ganz Normal. Aber getasert wir er nicht...
  • Also mit dem Eventhandler klingt ja ganz sinnig das zu machen, allerdings habe ich nun einige Probleme entdeckt, auf dich ich keine Antwort mehr geben kann, weil ich einfach keine Ahnung habe oder weil Altis Life einfach ein wenig umfangreich ist.

    1.) Wenn du einen Eventhandler benutzt, der abfragt, ob die Einheit eben getazerd ist oder nicht, warum dann noch "player allowDamage true" bzw. "_unit allowDamage true" setzen, wenn sowie der EH das regeln sollte?
    Der EH sollte ja checken, ob der arme Kerl getazert ist und dementsprechend den Schaden handhaben (Deswegen ja "Eventhandler" ^^) und der Schaden müsste (aus meinem Verständnis) damit auch nicht mehr auf true gesetzt werden

    Dann habe ich auf einige Sachen keine Einsicht
    2.) Wie/wo ist der EH eingebunden?
    3.) Der EH ruft die Funktion life_fnc_tazed aus -> Kein Einsicht

    Und dann noch ganz persönliche Probleme
    4.) Alles was ich weiß, habe ich mir alleine von unbestätigten Quellen selbst bei gebracht, ich habe kein Informatikstudium und nur selbst beigebrachte Scriptkenntnisse, mein Wissen ist also nur sehr begrenzt. Es kann sehr gut sein, das ich einfach etwas übersehe oder falsch verstehe :D

    Abschließend kann ich dir nur den Tipp geben, dir einen erfahrenen Scripter zu suchen, mal einen Blick über das gesamte Ding zu geben und dir dann helfen zu lassen, da das Projekt doch etwas umfangreicher ist ;)

    MfG

    Chibi
  • Du gibst einen falschen DatenTyp aus dem EventHandler zurück...
    Ich darf mal kurz das BIKI zu dem Thema zitieren:

    BIKI schrieb:

    If code provided returns a numeric value, this value will overwrite the default damage of given selection after processing. Return value of 0 will make the unit invulnerable if damage is not scripted in other ways
    Das bedeutet, der EH muss eine Zahl zurück geben und kein Boolean. Ganz konkret heißt das, dass du an der Stelle, an der du _damage = false setzt das Ganze in _damage = 0 ändern musst und dann sollte das funktionieren.
    Das Ganze kannst du dir an und für sich auch aus deinem Code selbst erschließen: _damage wird als Parameter übergeben und zwar als Zahl und der selbe _damage wird unten wieder zurück gegeben. Da es nicht allzu oft vorkommt, dass eine Funktion unterschiedliche Datentypen zurück gibt (außer zusätzlich vllt noch nil) ist es immer eine gute Idee mal bei diesem Datentyp zu bleiben ;)

    Für eine detaillierte Erklärung zu dem EH siehe hier: forums.bistudio.com/topic/1089…plained-poor-mans-gethit/
    Entwickler von SQDev
    Co-Entwickler von OurAltis

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Raven ()