Advertisement
SharpSabre

KeyUP

Dec 4th, 2022
542
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQF 17.04 KB | Gaming | 0 0
  1. /**
  2.  * ExileClient_gui_hud_event_onKeyUp
  3.  *
  4.  * Exile Mod
  5.  * www.exilemod.com
  6.  * © 2015 Exile Mod Team
  7.  *
  8.  * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
  9.  * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
  10.  */
  11.  
  12. private["_stopPropagation","_caller","_keyCode","_shiftState","_controlState","_altState","_posObject","_step"];
  13. _stopPropagation = false;
  14. _caller = _this select 0;
  15. _keyCode = _this select 1;
  16. _shiftState = _this select 2;
  17. _controlState = _this select 3;
  18. _altState = _this select 4;
  19. if (_keyCode in (actionKeys "TacticalView")) exitWith {true};
  20. if (_keyCode in (actionKeys "User1") && !(_keyCode isEqualTo 0x02)) exitWith
  21. {
  22.     if !(ExileClientIsHandcuffed) then
  23.     {
  24.         call ExileClient_object_vehicle_interaction_keyLock;
  25.     };
  26.     true
  27. };
  28. if (_keyCode in (actionKeys "User2")) exitWith
  29. {
  30.     if (ExileClientAllowPartyMarkers) then
  31.     {
  32.         if !(ExileClientPartyID isEqualTo -1) then
  33.         {
  34.             if !(ExileClientIsHandcuffed) then
  35.             {
  36.                 call ExileClient_system_party_updateMyMarker;  
  37.             };
  38.         };
  39.     };
  40.     true
  41. };
  42. if (_keyCode in (actionKeys "User3")) exitWith
  43. {
  44.     ExileClientWaypoints = [];
  45.     true
  46. };
  47.  
  48. switch (_keyCode) do  
  49. {
  50.     case 0x29: 
  51.     {
  52.         call ExileClient_gui_hud_toggleStatsBar;
  53.         _stopPropagation = true;
  54.     };
  55.     case 0x11,
  56.     case 0x1E,
  57.     case 0x1F,
  58.     case 0x20:
  59.     {
  60.         if (ExileClientIsAutoRunning) then
  61.         {
  62.             call ExileClient_system_autoRun_stop;
  63.             _stopPropagation = true;
  64.         };
  65.     };
  66.     case 0x0B:     
  67.     {
  68.         if !(ExileClientIsHandcuffed) then
  69.         {
  70.             if !(ExileIsPlayingRussianRoulette) then
  71.             {
  72.                 call ExileClient_system_autoRun_toggle;
  73.             };
  74.         };
  75.         _stopPropagation = true;
  76.     };
  77.     case 0x08:  
  78.     {
  79.     if (getText(missionConfigFile >> "Header" >> "gameType") isEqualTo "Escape") then
  80.         {
  81.             player playMove "Exile_Funny_Dab01";
  82.         };
  83.     _stopPropagation = true;
  84.     };
  85.     case 0x09:  { _stopPropagation = true; };
  86.     case 0x0A:  { _stopPropagation = true; };
  87.     case 0x3B:  { _stopPropagation = true; };
  88.     case 0x3C:  { _stopPropagation = true; };
  89.     case 0x3D:  { _stopPropagation = true; };
  90.     case 0x3E:  { _stopPropagation = true; };
  91.     case 0x41:  { _stopPropagation = true; };
  92.     case 0x42:  { _stopPropagation = true; };
  93.     case 0x43:  { _stopPropagation = true; };
  94.     case 0x44:  { _stopPropagation = true; };
  95.     case 0x57:  { _stopPropagation = true; };
  96.     case 0x58:  { _stopPropagation = true; };
  97.     case 0x0E:  { _stopPropagation = true; };
  98.     case 0x02:  
  99.     {
  100.         if !(ExileClientIsHandcuffed || ExileIsPlayingRussianRoulette) then
  101.         {
  102.             if (ExileClientIsInConstructionMode) then
  103.             {
  104.                 ExileClientConstructionObject setObjectTextureGlobal [0, "#(argb,2,2,1)color(0.7,0.93,0,0.6,ca)"];
  105.                 ExileClientConstructionCurrentSnapToObject = objNull;
  106.                 ExileClientConstructionIsInSelectSnapObjectMode = false;
  107.                 ExileClientConstructionPossibleSnapPositions = [];
  108.                 ExileClientConstructionMode = 1;
  109.                 [] call ExileClient_gui_constructionMode_update;
  110.             }
  111.             else
  112.             {
  113.                 if (primaryWeapon player != "") then
  114.                 {
  115.                     if (primaryWeapon player != currentWeapon player) then
  116.                     {
  117.                         player selectWeapon (primaryWeapon player);
  118.                     };
  119.                 };
  120.             };
  121.         };
  122.         _stopPropagation = true;
  123.     };
  124.     case 0x03:  
  125.     {
  126.         if !(ExileClientIsHandcuffed || ExileIsPlayingRussianRoulette) then
  127.         {
  128.             if (ExileClientIsInConstructionMode) then
  129.             {
  130.                 ExileClientConstructionObject setObjectTextureGlobal [0, "#(argb,2,2,1)color(0.7,0.93,0,0.6,ca)"];
  131.                 ExileClientConstructionCurrentSnapToObject = objNull;
  132.                 ExileClientConstructionIsInSelectSnapObjectMode = false;
  133.                 ExileClientConstructionPossibleSnapPositions = [];
  134.                 ExileClientConstructionMode = 2;
  135.                 [] call ExileClient_gui_constructionMode_update;
  136.             }
  137.             else
  138.             {
  139.                 if (handgunWeapon player != "") then
  140.                 {
  141.                     if (handgunWeapon player != currentWeapon player) then
  142.                     {
  143.                         player selectWeapon (handgunWeapon player);
  144.                     };
  145.                 };
  146.             };
  147.         };
  148.         _stopPropagation = true;
  149.     };
  150.     case 0x04:  
  151.     {
  152.         if !(ExileClientIsHandcuffed || ExileIsPlayingRussianRoulette) then
  153.         {
  154.             if (ExileClientIsInConstructionMode) then
  155.             {
  156.                 if (ExileClientConstructionSupportSnapMode) then
  157.                 {
  158.                     if (ExileClientConstructionMode != 3) then
  159.                     {
  160.                         ExileClientConstructionCurrentSnapToObject = objNull;
  161.                         ExileClientConstructionPossibleSnapPositions = [];
  162.                         ["InfoTitleAndText", ["Snap Mode", "Look at the object you want to snap to, press SPACE to lock on it and then move your object next to a snap point. Press SPACE again to place the object."]] call ExileClient_gui_toaster_addTemplateToast;
  163.                     };
  164.                     ExileClientConstructionMode = 3;
  165.                     ExileClientConstructionIsInSelectSnapObjectMode = true;
  166.                     [] call ExileClient_gui_constructionMode_update;
  167.                 };
  168.             }
  169.             else
  170.             {
  171.             //Dual Arms Start
  172.                 private _dialog = uiNameSpace getVariable ["RscDisplayInventory", displayNull];
  173.  
  174.                 if (secondaryWeapon player != "") then
  175.                 {
  176.                     if (((secondaryWeapon player) splitString "_") select ((count ((secondaryWeapon player) splitString "_"))-1) == "secondary") then
  177.                     {
  178.                         if(!(SecondaryWeaponsSwapping) && (_dialog isEqualTo displayNull)) then
  179.                         {
  180.                             (primaryWeapon player) spawn SecondaryWeapons_events_swapSecondaryWeapon;
  181.                         };
  182.                     } else {
  183.                         if (secondaryWeapon player != currentWeapon player) then
  184.                         {
  185.                             player selectWeapon (secondaryWeapon player);
  186.                         };
  187.                     };
  188.                 } else {
  189.                     if (primaryWeapon player != "") then
  190.                     {
  191.                         if(!(SecondaryWeaponsSwapping) && (_dialog isEqualTo displayNull)) then
  192.                         {
  193.                             (primaryWeapon player) spawn SecondaryWeapons_events_addSecondaryWeapon;
  194.                         };
  195.                     };
  196.                 };
  197.                 //Dual Arms End
  198.             };
  199.         };
  200.         _stopPropagation = true;
  201.     };
  202.     case 0x05:  
  203.     {
  204.         if !(ExileClientIsHandcuffed || ExileIsPlayingRussianRoulette) then
  205.         {
  206.             if (ExileClientIsInConstructionMode) then
  207.             {
  208.                 if !(ExileClientConstructionKitClassName isEqualTo "Exile_Item_Flag") then
  209.                 {
  210.                     ExileClientConstructionModePhysx = !ExileClientConstructionModePhysx;
  211.                     [] call ExileClient_gui_constructionMode_update;
  212.                 };
  213.             }
  214.             else
  215.             {
  216.                 if (currentWeapon player != "") then
  217.                 {
  218.                     ExileClientPlayerHolsteredWeapon = currentWeapon player;
  219.                     player action["switchWeapon", player, player, 100];
  220.                 }
  221.                 else
  222.                 {
  223.                     if (ExileClientPlayerHolsteredWeapon != "") then
  224.                     {
  225.                         player selectWeapon ExileClientPlayerHolsteredWeapon;
  226.                     };
  227.                 };
  228.             };
  229.         };
  230.         _stopPropagation = true;
  231.     };
  232.     case 0x06:
  233.     {
  234.         if (ExileClientIsInConstructionMode) then
  235.         {
  236.             ExileClientConstructionShowHint = !ExileClientConstructionShowHint;
  237.             [] call ExileClient_gui_constructionMode_update;
  238.         }
  239.         else
  240.         {
  241.             call ExileClient_system_music_earplugs_toggle;
  242.         };
  243.         _stopPropagation = true;
  244.     };
  245.     case 0x07:
  246.     {
  247.         if (getText(missionConfigFile >> "Header" >> "gameType") isEqualTo "Escape") then
  248.         {
  249.             if (alive player) then
  250.             {
  251.                 [] call ExileClient_gui_hud_toggleEscapeStats;
  252.             }; 
  253.         }
  254.         else
  255.         {
  256.             if (ExileClientIsInConstructionMode) then
  257.             {
  258.                 if(ExileClientConstructionLock)then
  259.                 {
  260.                     ExileClientConstructionLock = false;
  261.                     _posObject = position ExileClientConstructionObject;
  262.                     ExileClientConstructionOffset = player worldToModel _posObject;
  263.                     ExileClientConstructionRotation = (getDir ExileClientConstructionObject) - (getDir player);
  264.                 }
  265.                 else
  266.                 {
  267.                     ExileClientConstructionLock = true;
  268.                 }; 
  269.             }
  270.             else
  271.             {
  272.                 if (!ExileClientXM8IsVisible) then
  273.                 {
  274.                     if ("Exile_Item_XM8" in (assignedItems player)) then
  275.                     {
  276.                         if (alive player) then
  277.                         {
  278.                             ExileClientXM8CurrentSlide = "apps"; // We are adding this
  279.                             [] call ExileClient_gui_xm8_show;
  280.                         }; 
  281.                     };
  282.                 };
  283.             };
  284.         };
  285.         _stopPropagation = true;
  286.     };
  287.     case 0x39:
  288.     {
  289.         if (ExileIsPlayingRussianRoulette) then
  290.         {
  291.             if (ExileRussianRouletteCanFire) then
  292.             {
  293.                 [] spawn ExileClient_system_russianRoulette_fire;
  294.             };
  295.         }
  296.         else
  297.         {
  298.             if (ExileClientIsInConstructionMode) then
  299.             {
  300.                 if (ExileClientConstructionMode == 3) then
  301.                 {
  302.                     if (ExileClientConstructionIsInSelectSnapObjectMode) then
  303.                     {
  304.                         if !(isNull ExileClientConstructionCurrentSnapToObject) then
  305.                         {
  306.                             ExileClientConstructionIsInSelectSnapObjectMode = false;
  307.                             [] call ExileClient_gui_constructionMode_update;
  308.                         };
  309.                     }
  310.                     else
  311.                     {
  312.                         if (ExileClientConstructionCanPlaceObject) then
  313.                         {
  314.                             ExileClientConstructionResult = 1;
  315.                         };
  316.                     };
  317.                 }
  318.                 else
  319.                 {
  320.                     if (ExileClientConstructionCanPlaceObject) then
  321.                     {
  322.                         ExileClientConstructionResult = 1;
  323.                     };
  324.                 };
  325.                 _stopPropagation = true;
  326.             };
  327.         };
  328.     };
  329.     case 0x01:
  330.     {
  331.         if (ExileIsPlayingRussianRoulette) then
  332.         {
  333.             _stopPropagation = true;
  334.         }
  335.         else
  336.         {
  337.             if (ExileClientIsInConstructionMode) then
  338.             {
  339.                 _stopPropagation = true;
  340.             };
  341.         };
  342.     };
  343.     case 0x10:
  344.     {
  345.         if (ExileClientIsInConstructionMode) then
  346.         {
  347.         _step = 45;
  348.             if (_shiftState) then
  349.             {
  350.                 _step = 90;
  351.             }
  352.             else
  353.             {
  354.                 if (_controlState) then
  355.                 {
  356.                     _step = 22.5;
  357.                 };
  358.             };
  359.             ExileClientConstructionRotation = (ExileClientConstructionRotation - _step + 360) % 360;   
  360.             [] call ExileClient_gui_constructionMode_update;
  361.  
  362.             _stopPropagation = true;
  363.         };
  364.     };
  365.     case 0x12:
  366.     {
  367.         if (ExileClientIsInConstructionMode) then
  368.         {
  369.             _step = 45;
  370.             if (_shiftState) then
  371.             {
  372.                 _step = 90;
  373.             }
  374.             else
  375.             {
  376.                 if (_controlState) then
  377.                 {
  378.                     _step = 22.5;
  379.                 };
  380.             };
  381.             ExileClientConstructionRotation = (ExileClientConstructionRotation + _step + 360) % 360;   
  382.             [] call ExileClient_gui_constructionMode_update;
  383.             _stopPropagation = true;
  384.         };
  385.     };
  386.     case 0x47:
  387.     {
  388.         if (ExileClientIsInConstructionMode) then
  389.         {
  390.             _stopPropagation = true;
  391.         };
  392.     };
  393.     case 0x49:
  394.     {
  395.         if (ExileClientIsInConstructionMode) then
  396.         {
  397.             _stopPropagation = true;
  398.         };
  399.     };
  400.     case 0x19:
  401.     {
  402.         if (ExileClientIsInBush) then
  403.         {
  404.             call ExileClient_object_bush_detach;
  405.             _stopPropagation = true;
  406.         };
  407.     };
  408.     case 0x31:
  409.     {
  410.         if!(isNull ExileClientCameraParentObject)then
  411.         {
  412.             if(ExileClientCameraNVG)then
  413.             {
  414.                 camUseNVG false;
  415.             }
  416.             else
  417.             {
  418.                 camUseNVG true;
  419.             }; 
  420.             ExileClientCameraNVG = !ExileClientCameraNVG;
  421.             _stopPropagation = true;
  422.         };
  423.     };
  424.     case 0xC9:
  425.     {
  426.         if (ExileClientIsInConstructionMode) then
  427.         {
  428.             _step = 0.5;
  429.             if(_shiftState)then{_step = 1.5;};
  430.             if(_controlState)then{_step = 0.1;};
  431.             if(_altState)then{_step = 0.01;};
  432.             if!(ExileClientConstructionMode isEqualTo 4)then
  433.             {
  434.                 ExileClientConstructionOffset set [2, ((((ExileClientConstructionOffset select 2) + _step) min 6) max -3) ];
  435.             }else{
  436.                 ExileClientConstructionOffset set [2,((ExileClientConstructionOffset select 2) + _step)];
  437.             };
  438.             [] call ExileClient_gui_constructionMode_update;
  439.             _stopPropagation = true;
  440.             if (_controlState) then
  441.                 {
  442.                     _step = 0.025;
  443.                 };
  444.         };
  445.     };
  446.     case 0xD1:
  447.     {
  448.         if (ExileClientIsInConstructionMode) then
  449.         {
  450.             _step = 0.5;
  451.             if(_shiftState)then{_step = 1.5;};
  452.             if(_controlState)then{_step = 0.1;};
  453.             if(_altState)then{_step = 0.01;};
  454.             if!(ExileClientConstructionMode isEqualTo 4)then
  455.             {
  456.                 ExileClientConstructionOffset set [2, ((((ExileClientConstructionOffset select 2) - _step) min 6) max -3) ];
  457.             }else{
  458.                 ExileClientConstructionOffset set [2,((ExileClientConstructionOffset select 2) - _step)];
  459.             };
  460.             [] call ExileClient_gui_constructionMode_update;
  461.             _stopPropagation = true;
  462.         };
  463.     };
  464.     case 0xC7:
  465.     {
  466.         if (ExileClientIsInConstructionMode) then
  467.         {
  468.             _step = 0.5;
  469.             if(_shiftState)then{_step = 1.5;};
  470.             if(_controlState)then{_step = 0.1;};
  471.             if(_altState)then{_step = 0.01;};
  472.             if!(ExileClientConstructionMode isEqualTo 4)then
  473.             {
  474.                 ExileClientConstructionOffset set [1, (((ExileClientConstructionOffset select 1) + _step) min 6) max ExileClientConstructionBoundingRadius ];
  475.             }else{
  476.                 ExileClientConstructionOffset set [1,((ExileClientConstructionOffset select 1) + _step)];
  477.             };
  478.             [] call ExileClient_gui_constructionMode_update;
  479.             _stopPropagation = true;
  480.         };
  481.     };
  482.     case 0xCF:
  483.     {
  484.         if (ExileClientIsInConstructionMode) then
  485.         {
  486.             _step = 0.5;
  487.             if(_shiftState)then{_step = 1.5;};
  488.             if(_controlState)then{_step = 0.1;};
  489.             if(_altState)then{_step = 0.01;};
  490.             if!(ExileClientConstructionMode isEqualTo 4)then
  491.             {
  492.                 ExileClientConstructionOffset set [1, (((ExileClientConstructionOffset select 1) - _step) min 6) max ExileClientConstructionBoundingRadius ];
  493.             }else{
  494.                 ExileClientConstructionOffset set [1,((ExileClientConstructionOffset select 1) - _step)];
  495.             };
  496.             [] call ExileClient_gui_constructionMode_update;
  497.             _stopPropagation = true;
  498.         };
  499.     };
  500.     case 0x48:
  501.     {
  502.         if (ExileClientIsInConstructionMode) then
  503.         {
  504.             _step = 0.5;
  505.             if(_shiftState)then{_step = 1.5;};
  506.             if(_controlState)then{_step = 0.1;};
  507.             if(_altState)then{_step = 0.01;};
  508.             if!(ExileClientConstructionMode isEqualTo 4)then
  509.             {
  510.                 ExileClientConstructionOffset set [1, (((ExileClientConstructionOffset select 1) + _step) min 6) max ExileClientConstructionBoundingRadius ];
  511.             }else{
  512.                 ExileClientConstructionOffset set [1,((ExileClientConstructionOffset select 1) + _step)];
  513.             };
  514.             [] call ExileClient_gui_constructionMode_update;
  515.             _stopPropagation = true;
  516.         };
  517.     };
  518.     case 0x50:
  519.     {
  520.         if (ExileClientIsInConstructionMode) then
  521.         {
  522.             _step = 0.5;
  523.             if(_shiftState)then{_step = 1.5;};
  524.             if(_controlState)then{_step = 0.1;};
  525.             if(_altState)then{_step = 0.01;};
  526.             if!(ExileClientConstructionMode isEqualTo 4)then
  527.             {
  528.                 ExileClientConstructionOffset set [1, (((ExileClientConstructionOffset select 1) - _step) min 6) max ExileClientConstructionBoundingRadius ];
  529.             }else{
  530.                 ExileClientConstructionOffset set [1,((ExileClientConstructionOffset select 1) - _step)];
  531.             };
  532.             [] call ExileClient_gui_constructionMode_update;
  533.             _stopPropagation = true;
  534.         };
  535.     };
  536.     case 0x4B:
  537.     {
  538.         if (ExileClientIsInConstructionMode) then
  539.         {
  540.             _step = 0.5;
  541.             if(_shiftState)then{_step = 1.5;};
  542.             if(_controlState)then{_step = 0.1;};
  543.             if(_altState)then{_step = 0.01;};
  544.             if!(ExileClientConstructionMode isEqualTo 4)then
  545.             {
  546.                 ExileClientConstructionOffset set [0,((((ExileClientConstructionOffset select 0) - _step)min 10) max -10)];
  547.             }else{
  548.                 ExileClientConstructionOffset set [0,((ExileClientConstructionOffset select 0) - _step)];
  549.             };
  550.             [] call ExileClient_gui_constructionMode_update;
  551.             _stopPropagation = true;
  552.         };
  553.     };
  554.     case 0x4D:
  555.     {
  556.         if (ExileClientIsInConstructionMode) then
  557.         {
  558.             _step = 0.5;
  559.             if(_shiftState)then{_step = 1.5;};
  560.             if(_controlState)then{_step = 0.1;};
  561.             if(_altState)then{_step = 0.01;};
  562.             if!(ExileClientConstructionMode isEqualTo 4)then
  563.             {
  564.                 ExileClientConstructionOffset set [0,((((ExileClientConstructionOffset select 0) + _step)min 10) max -10)];
  565.             }else{
  566.                 ExileClientConstructionOffset set [0,((ExileClientConstructionOffset select 0) + _step)];
  567.             };
  568.             [] call ExileClient_gui_constructionMode_update;
  569.             _stopPropagation = true;
  570.         };
  571.     };
  572.     case 0x4C:
  573.     {
  574.         if (ExileClientIsInConstructionMode) then
  575.         {
  576.             BuildVecYaw = 0;BuildVecPitch = 0;BuildVecRoll = 0;
  577.             ExileClientConstructionOffset = [0,5,0];
  578.             _stopPropagation = true;
  579.         };
  580.     };
  581.     case 0x52:
  582.     {
  583.         if (ExileClientIsInConstructionMode) then
  584.         {
  585.             if(DPBEAClientObjAttachedTo isEqualTo player)then
  586.             {
  587.                 private _isClass = isClass(configFile >> "CfgVehicles" >> (typeOf ExileClientInteractionObject));
  588.                 private _returnItem = isText(configFile >> "CfgVehicles" >> (typeOf ExileClientInteractionObject) >> "returnItem");
  589.                 private _exileBuildable = (ExileClientInteractionObject isKindOf "Exile_Construction_Abstract_Static");
  590.                 if((_returnItem)||(_exileBuildable))then
  591.                 {
  592.                     []spawn
  593.                     {
  594.                         disableSerialization;
  595.                         private _result = ["Do you really want to snap to this object?", "Confirm", "Yes", "Nah"] call BIS_fnc_guiMessage;
  596.                         waitUntil { !isNil "_result" };
  597.                         if (_result) then
  598.                         {
  599.                             BuildVecYaw = 0;BuildVecPitch = 0;BuildVecRoll = 0;
  600.                             DPBEAClientObjAttachedTo = ExileClientInteractionObject;
  601.                             ExileClientConstructionMode = 4;
  602.                         };
  603.                     };
  604.                 };
  605.             }else{
  606.                 BuildVecYaw = 0;BuildVecPitch = 0;BuildVecRoll = 0;
  607.                 DPBEAClientObjAttachedTo = player;
  608.                 ExileClientConstructionMode = 1;
  609.             };
  610.             _stopPropagation = true;
  611.         };
  612.     };
  613.     case 0xCB:
  614.     {
  615.         if (ExileClientIsInConstructionMode) then
  616.         {
  617.             _stopPropagation = true;
  618.         };
  619.     };
  620.     case 0xCD:
  621.     {
  622.         if (ExileClientIsInConstructionMode) then
  623.         {
  624.             _stopPropagation = true;
  625.         };
  626.     };
  627.     case 0xC8:
  628.     {
  629.         if (ExileClientIsInConstructionMode) then
  630.         {
  631.             _stopPropagation = true;
  632.         };
  633.     };
  634.     case 0xD0:
  635.     {
  636.         if (ExileClientIsInConstructionMode) then
  637.         {
  638.             _stopPropagation = true;
  639.         };
  640.     };
  641.     case 0xDB:
  642.     {
  643.         switch (ExilePartyEspMode) do
  644.         {
  645.             case 0:         { ExilePartyEspMode = 1; };
  646.             case 1:     { ExilePartyEspMode = 2; };
  647.             case 2:             { ExilePartyEspMode = 0; };
  648.         };
  649.         _stopPropagation = true;
  650.     };
  651. };
  652. _stopPropagation
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement