Перейти к содержимому


Фотография

Перехват "ПКМ"


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 17

#1 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 12 July 2017 - 23:59

Не могу перехватить действие кнопки мыши:

так работает при нажатии "G"

(findDisplay 46) displayAddEventHandler ["keyDown", "_this call functionName_keyDown"]; 
functionName_keyDown = { 
    params ["_ctrl", "_dikCode", "_shift", "_ctrlKey", "_alt"]; 
  
    private _handled = false; 
  
    if (!_shift && !_ctrlKey && !_alt) then { 
        if (_dikCode in [(actionKeys "gear") select 0]) then { 
           hint "gear"      ;
      _handled = true; 
        }; 
    }; 
  
    _handled;   
};

 

а так нет при нажатии 'ЛКМ'

(findDisplay 46) displayAddEventHandler ["MouseButtonDown", "_this call functionName_keyDown"]; 
functionName_keyDown = { 
    params ["_ctrl", "_dikCode", "_shift", "_ctrlKey", "_alt"]; 
  
    private _handled = false; 
  

        if (_dikCode in [((actionKeys "defaultAction") select 0)]) then { 
           hint "defaultAction"      ;
      _handled = true; 
        }; 
    _handled;   
}; 

и зажатую ПКМ тоже не могу словить
 

(findDisplay 46) displayAddEventHandler ["MouseButtonDown", "_this call functionName_keyDown"]; 
functionName_keyDown = {   
   
 
        if((_this select 1) in [((actionKeys "zoomTemp") select 0)]) then {  
            hint 'true'; 
        };  
}; 


Сообщение отредактировал Dimon UA: 13 July 2017 - 00:00

  • 0

#2 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 13 July 2017 - 00:12

Dimon UA, перезаписать таким образом можно только клавишы на клавиатуре, все остальные - нет (ЛКМ и остальное, можно через невидимый addAction, для которого определен параметр "shortcut" для действия, которое имеет хотя-бы один вариант раскладки, в точности совпадающий с нужной тебе клавишой, для ЛКМ это "DefaultAction")

PS Для примера можешь посмотреть реализацию предохранителя в ACE Mod

Сообщение отредактировал vlad333000: 13 July 2017 - 00:12

  • 1

#3 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 13 July 2017 - 00:15

Dimon UA, перезаписать таким образом можно только клавишы на клавиатуре, все остальные - нет (ЛКМ и остальное, можно через невидимый addAction, для которого определен параметр "shortcut" для действия, которое имеет хотя-бы один вариант раскладки, в точности совпадающий с нужной тебе клавишой, для ЛКМ это "DefaultAction")

меня спутала работа кода
 

(findDisplay 46) displayAddEventHandler ["MouseButtonDown", "hint str _this"]; 

он то работает...
+ здесь тоже видит ПКМ
 

[] spawn { 
 waitUntil {inputAction "ZoomTemp" > 0};   
 hint "ZoomTemp Key Pressed"; 
};

ясно. спасибо



PS Для примера можешь посмотреть реализацию предохранителя в ACE Mod

да я уже такое делал - я понял о чем ты


  • 0

#4 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 13 July 2017 - 00:16

Dimon UA, ну вот такие вот они БЕСы, для клавы нормальнуб реализацию переопределения клавиш сделали, а для остального - нет. И не забудь посмотреть предохранитель в ACE Mod, если все же крайне нужно переопределить кнопки на мышке
  • 1

#5 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 13 July 2017 - 00:54

p=player addAction ["", { 
    playSound3D ['a3\sounds_f\weapons\Other\dry9.wss', _this select 0]; 
}, "", 0, false, true, "ZoomTemp", ""];

Мда, все равно не догоняю что с этим делать - хочу обрубить приближение на ПКМ.
 


  • 0

#6 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 13 July 2017 - 01:17

я так понимаю что происходит какое-то действие камеры - и так понимаю нужно включить скрипт с противодействием...


  • 0

#7 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 13 July 2017 - 01:25

Dimon UA, потыкал я, походу и этот способ работает только для "DefaultAction", короче БЕСы в своем репертуаре...
Самый простой способ для запрета увеличения - это крутить каждый кадр цикл и, при обнаружении через inputAction, создавать на весь экран непрозрачный control
  • 1

#8 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 13 July 2017 - 01:41

Dimon UA, потыкал я, походу и этот способ работает только для "DefaultAction", короче БЕСы в своем репертуаре...
Самый простой способ для запрета увеличения - это крутить каждый кадр цикл и, при обнаружении через inputAction, создавать на весь экран непрозрачный control

нашел у КК

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


KK_fnc_trueZoom = { 
    ( 
        [0.5,0.5]  
        distance2D   
        worldToScreen  
        positionCameraToWorld  
        [0,3,4] 
    ) * ( 
        getResolution  
        select 5 
    ) / 2 
};
[] spawn {
onEachFrame { 
    hintSilent format [ 
        "CURRENT ZOOM: %1x", 
        round (call KK_fnc_trueZoom * 10) / 10 
    ] 
};
};

терь осталось отключить приближение

KK_fnc_trueZoom = {  
    ( [0.5,0.5] distance2D worldToScreen  positionCameraToWorld  [0,3,4] ) * ( getResolution  select 5 ) / 2  
}; 
[] spawn { 
onEachFrame {  
  
        if (round (call KK_fnc_trueZoom * 10) / 10 > 0.3) then {hintsilent "help disable zoom"}; 
}; 
};

первый набросок
 

KK_fnc_trueZoom = { 
    ( [0.5,0.5] distance2D worldToScreen  positionCameraToWorld  [0,3,4] ) * ( getResolution  select 5 ) / 2 
};
[] spawn {
onEachFrame { 
 
        if (round (call KK_fnc_trueZoom * 10) / 10 > 0.3) then {
		
		_camera = "camera" camCreate (positionCameraToWorld  [0,0,0]);
		_camera cameraEffect ["Fixed","BACK"];
		
		};
};
};

хотя так проще наверное как ты влад и сказал
 

[] spawn {  
 waitUntil {inputAction "ZoomTemp" > 0};    
 _camera = "camera" camCreate (positionCameraToWorld  [0,0,0]); 
  _camera cameraEffect ["Fixed","FRONT TOP"];};

Сообщение отредактировал Dimon UA: 13 July 2017 - 02:37

  • 0

#9 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 13 July 2017 - 02:47

как то так
 

[] spawn {   
while {true} do { 
 waitUntil {inputAction "ZoomTemp" > 0};     
 _camera = "camera" camCreate (positionCameraToWorld  [0,0,0]);  
  _camera cameraEffect ["Fixed","FRONT TOP"]; 
 waitUntil {inputAction "ZoomTemp" == 0}; 
_camera cameraEffect ["TERMINATE","BACK"];  
    camDestroy _camera; 
}; 
};

осталось правильно камеру разместить


  • 0

#10 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 15 July 2017 - 09:53


непрозрачный control

разьясни плиз по-подробней


  • 0

#11 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 15 July 2017 - 11:58

Dimon UA,
disableSerialization;
private _ctrl = (findDisplay 46) ctrlCreate ["RscStructuredText", -1];

_ctrl ctrlSetPosition [safeZoneXAbs, safeZoneY, safeZoneWAbs, safeZoneH];
_ctrl ctrlSetBackgroundColor [0, 0, 0, 1];
_ctrl ctrlSetTextColor [1, 1, 1, 1];
_ctrl ctrlSetStructuredText (parseText "<t align='center'>Zoom is disabled! Please stop using zoom</t>");
_ctrl ctrlCommit 0;

  • 1

#12 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 15 July 2017 - 13:21

Dimon UA,

disableSerialization;
private _ctrl = (findDisplay 46) ctrlCreate ["RscStructuredText", -1];

_ctrl ctrlSetPosition [safeZoneXAbs, safeZoneY, safeZoneWAbs, safeZoneH];
_ctrl ctrlSetBackgroundColor [0, 0, 0, 1];
_ctrl ctrlSetTextColor [1, 1, 1, 1];
_ctrl ctrlSetStructuredText (parseText "<t align='center'>Zoom is disabled! Please stop using zoom</t>");
_ctrl ctrlCommit 0;

Спасибо - расшифровал про что ты )

 

[] spawn {  
 disableSerialization;  
 private _ctrl = (findDisplay 46) ctrlCreate ["RscStructuredText", 20001];  
 _ctrl ctrlSetPosition [safeZoneXAbs, safeZoneY, safeZoneWAbs, safeZoneH];  
 _ctrl ctrlSetBackgroundColor [0, 0, 0, 1];  
 _ctrl ctrlSetTextColor [1, 1, 1, 1];  
 _ctrl ctrlSetStructuredText (parseText "<t align='center'>Zoom is disabled! Please stop using zoom</t>");  
 _ctrl ctrlSetFade 1; 
 _ctrl ctrlCommit 0; 
 while {true} do {  
   waitUntil {inputAction "ZoomTemp" > 0 || inputAction "zoomIn" > 0 || inputAction "zoomInToggle" > 0}; 
   _ctrl ctrlSetFade 0; 
  _ctrl ctrlCommit 0; 
   waitUntil {inputAction "ZoomTemp" == 0 || inputAction "zoomIn" == 0 || inputAction "zoomInToggle" == 0}; 
  _ctrl ctrlSetFade 1; 
  _ctrl ctrlCommit 1; 
 };  
}; 

осталось придумать как сделать в идеале - чтобы все видеть и при этом блокировать зум...


Сообщение отредактировал Dimon UA: 15 July 2017 - 13:53

  • 0

#13 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 15 July 2017 - 14:01

вообщем теперь беда из-за
 

inputAction "zoomInToggle" == 0

на двойное нажатие то реагирует но потом картинка остается приближенной...

переписал с использование КК скрипта
 

KK_fnc_trueZoom = { 
    ( [0.5,0.5] distance2D worldToScreen  positionCameraToWorld  [0,3,4] ) * ( getResolution  select 5 ) / 2 
};

[] spawn { 
	disableSerialization; 
	private _ctrl = (findDisplay 46) ctrlCreate ["RscStructuredText", 20001]; 
	_ctrl ctrlSetPosition [safeZoneXAbs, safeZoneY, safeZoneWAbs, safeZoneH]; 
	_ctrl ctrlSetBackgroundColor [0, 0, 0, 1]; 
	_ctrl ctrlSetTextColor [1, 1, 1, 1]; 
	_ctrl ctrlSetStructuredText (parseText "<t align='center'>Zoom is disabled! Please stop using zoom</t>"); 
	_ctrl ctrlSetFade 1;
	_ctrl ctrlCommit 0;
	while {true} do { 
		 waitUntil {round (call KK_fnc_trueZoom * 10) / 10 > 0.4};
		 _ctrl ctrlSetFade 0;
		_ctrl ctrlCommit 0;
		 waitUntil {round (call KK_fnc_trueZoom * 10) / 10 <= 0.4};
		_ctrl ctrlSetFade 1;
		_ctrl ctrlCommit 1;
	}; 
};

но теперь проблема с тем чтобы смотреть в прицел оптики...

кто знает как можно вычислить смотрит ли игрок в оптику?


  • 0

#14 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 15 July 2017 - 14:35

пока выкрутился так
 

KK_fnc_trueZoom = { 
    ( [0.5,0.5] distance2D worldToScreen  positionCameraToWorld  [0,3,4] ) * ( getResolution  select 5 ) / 2 
};

[] spawn { 
	disableSerialization; 
	private _ctrl = (findDisplay 46) ctrlCreate ["RscStructuredText", 20001]; 
	_ctrl ctrlSetPosition [safeZoneXAbs, safeZoneY, safeZoneWAbs, safeZoneH]; 
	_ctrl ctrlSetBackgroundColor [0, 0, 0, 1]; 
	_ctrl ctrlSetTextColor [1, 1, 1, 1]; 
	_ctrl ctrlSetStructuredText (parseText "<t align='center'>Zoom is disabled! Please stop using zoom</t>"); 
	_ctrl ctrlSetFade 1;
	_ctrl ctrlCommit 0;
	while {true} do { 
		 waitUntil {round (call KK_fnc_trueZoom * 10) / 10 > 0.4 && {round (call KK_fnc_trueZoom * 10) / 10 <=1}};
		 _ctrl ctrlSetFade 0;
		_ctrl ctrlCommit 0;
		 waitUntil {round (call KK_fnc_trueZoom * 10) / 10 <= 0.4};
		_ctrl ctrlSetFade 1;
		_ctrl ctrlCommit 1;
	}; 
};

  • 0

#15 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 15 July 2017 - 19:34

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


  • 1

#16 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 27 July 2017 - 01:42


  • 0

#17 OFFLINE   ruPal

ruPal

    Мл. лейтенант

  • HMG-RO
  • 914 сообщений

Отправлено 27 July 2017 - 14:24

Можно переписать конфиги оружия и техники. Делал такое для ванилы, RHS и нескольких других модов год назад

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


  • 0

#18 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 27 July 2017 - 16:28

ruPal,да я знаю про твой аддон. Но тут такой момент: чтобы продвинуть аддон нужно попробывать "как в это играть" - для этого нужна тестовая миссия и реализация с помощью скрипта.  


  • 0




Яндекс.Метрика