DIY分割画面またはDIY分割画面

私たちの多くは、友人と一緒に暖かい管テレビの前で夜を過ごし、コンソールをプレイしました。 彼らの順番を待たずに、同時に一緒にプレイすることは常に特に良かったです。





懐かしさ



残念ながら、現在、多くのゲーム開発者はこのモードを追加していません-分割画面を使用した新しいゲームは、ほとんど片手の指で数えることができます。 ある春の夕方、開発者によって課せられた制限を回避し、分割画面ゲームモードをよりアクセスしやすくしようとするアイデアが思い浮かびました。





ゲームのモルモットとして、いくつかの理由からWorld of Tanksを選びました。

1.一緒にプレイする機能。このモードは「 小隊 」と呼ばれます。

2.最小設定でプレイするのは十分ではありません-パフォーマンスの平均的なPCは2コピーをプルするはずです。

3.戦車のゲームプレイは非常に単純ですが、開発者は「ロールプレイングゲーム、シューティングゲーム、戦略の要素を備えたアクションの分野での大規模なマルチプレイヤーオンラインゲーム」( Wikipedia )として位置付けられています。 しかし、私にとっては-pimple-pimpleのアーケードです

4.おそらく最も基本的な理由-私は、週に数時間、私の一番下の息子が撮影するのが大好きです。 長老と一緒にPortal2に行くこともありますが、そこにはテレビ用の分割画面モードがあります。





これらの人たちが多くの人に馴染みのあることを願っています;)



テレビで一緒にタンクのすべてのコンポーネントのより詳細な研究は、以下につながりました:

1. 2つのコピーを起動できるようにゲームクライアントを構成します

2.テレビ画面を2つの仮想画面に分割する必要があります。

3.ボタンの押下を送信する/ゲームパッドから非アクティブなウィンドウにスティックを拒否する問題を解決します。

4.さまざまなクライアントからさまざまなゲームパッドに振動を送信します。



決定プロセスの詳細をご覧ください。



1. 2つのクライアントの起動。

デフォルトでは、Wargamingの開発者は2つのコピーを同時に起動する機能を削除しました。 「サンドボックス」のすべての魅力については説明しません- あなたを助けるサンドボックス。



2.テレビ画面を2つの部分に分割します。

ウィンドウモードの「WoT」の最小解像度は1024x768です。FullHDTVを半分に分割する場合、各ウィンドウの解像度は少なくとも960x1080である必要があり、ウィンドウフレームとタイトルバーがあればさらに小さくなります。 つまり スナップを介した標準の「ホットキー」を使用すると、異なる方向でウィンドウを開くと、ウィンドウの部分的なオーバーラップが発生します。 デスクトップを2つの部分に分割するその他のユーティリティは、同様の機能を使用し、ゲームの幅の最小解像度に影響を与えることはありません。

膨大な量を試した後、 仮想ディスプレイマネージャーに出会いました。名前に「デスクトップ」という言葉がなかったためです。

ユーティリティは正しいことを行いました-2つの仮想ディスプレイの構成を追加し、ウィンドウを正しいものに移動します-ゲームは必要な価値を引き継ぎます。つまり、画面のちょうど半分を占有します。 ちなみに、分割数を大きくする必要があります。



3.非アクティブなウィンドウにキーストロークを送信します。

この決断は私の心にとって最も難しいことでした 。 2つのクライアントが実行されており、ウィンドウは互いに間隔を空けて重なり合っていませんが、ウィンドウの1つはそれぞれアクティブで、ボタンの押下とマウスの動きを受け入れますが、2番目のクライアントはすべての結果でアクティブではありません。





解像度1366x768。



この問題を解決するために、私はAutoHotkeyの知り合いに促されました。 本当に「AutoHotkeyはWindows用の無料のオープンソースユーティリティであり、優れた機能を備えたスクリプト言語であり、原則としてインストールも必要ありません。」( リンク



時には戦いに乗ることさえできる最初のスクリプト
#InstallKeybdHook

w ::

WinGet、wot、PID、WoTクライアント

ControlSend、{sc11 Down}、ahk_pid%wot%

KeyWait、w

ControlSend、{sc11 Up}、ahk_pid%wot%

戻る

::

WinGet、wot、PID、WoTクライアント

ControlSend、{sc1E Down}、ahk_pid%wot%

KeyWait、

ControlSend、{sc1E Up}、ahk_pid%wot%

戻る

s ::

WinGet、wot、PID、WoTクライアント

ControlSend、{sc1F Down}、ahk_pid%wot%

KeyWait、s

ControlSend、{sc1F Up}、ahk_pid%wot%

戻る

d ::

WinGet、wot、PID、WoTクライアント

ControlSend、{sc20 Down}、ahk_pid%wot%

KeyWait、d

ControlSend、{sc20 Up}、ahk_pid%wot%

戻る



スクリプトが機能した理由は、私にはまだ不明でした。



何度も失敗した後、解決策が見つかりました。 SendMessageを介して、ウィンドウにアクティブであることを伝え、キーストロークを送信します。 そのような独特の欺ception。

スクリプトは、矢印、WASD、およびスペース(ゲーム内のショットに再割り当て)を非アクティブなウィンドウに送信します。
#SingleInstance

#InstallKeybdHook

SetControlDelay -1

vk49 ::

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{vk57 Down}、WoTクライアント

KeyWait、vk49

ControlSend、{vk57 Up}、WoTクライアント

戻る

vk4A ::

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{vk41 Down}、WoTクライアント

KeyWait、vk4A

ControlSend、{vk41 Up}、WoTクライアント

戻る

vk4B ::

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{vk53 Down}、WoTクライアント

KeyWait、vk4B

ControlSend、{vk53 Up}、WoTクライアント

戻る

vk4C ::

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{vk44 Down}、WoTクライアント

KeyWait、vk4C

ControlSend、{vk44 Up}、WoTクライアント

戻る

テンキー::

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend 、、 {up Down}、WoTクライアント

KeyWait、numpadup

ControlSend、{up Up}、WoTクライアント

戻る

テンキーダウン::

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{down Down}、WoTクライアント

KeyWait、テンキーダウン

ControlSend 、、 {down Up}、WoTクライアント

戻る

numpadleft ::

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{left Down}、WoTクライアント

KeyWait、numpadleft

ControlSend、{left Up}、WoTクライアント

戻る

numpadright ::

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{right Down}、WoTクライアント

KeyWait、numpadright

ControlSend、{right Up}、WoTクライアント

戻る

NumpadEnter ::

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend 、、 {vk20 Down}、WoTクライアント

KeyWait、NumpadEnter

ControlSend、{vk20 Up}、WoTクライアント

戻る





それからもっと楽しくなりました。



完全にコードを建設的に批判してください。

World_Of_Tanks_Split_screen
JoyMultiplier = 5

JoyThreshold = 5

JoyThresholdUpper:= 50 + JoyThreshold

JoyThresholdLower:= 50-JoyThreshold

#永続的

SetTimer、WatchAxisFirstJoyMoveForwardAndZoom、10

SetTimer、WatchAxisFirstJoyMoveRotate、10

SetTimer、WatchAxisFirstJoyCameraRotateVert、10

SetTimer、WatchAxisFirstJoyCameraRotateHoriz、10

SetTimer、WatchAxisFirstJoyShoot、10

SetTimer、WatchFirstJoyPOV、10

SetTimer、WatchAxisSecondJoyMoveForwardAndZoom、10

SetTimer、WatchAxisSecondJoyMoveRotate、10

SetTimer、WatchAxisSecondJoyCameraRotate、10

SetTimer、WatchAxisSecondJoyShoot、10

SetTimer、WatchSecondJoyPOV、10

帰る



;;;;;;;;;;;;;;;; ウィンドウのタイトルを削除する



^!+ s ::

WinWait、WoTクライアント

WinSet、スタイル、-0xC00000

WinWait、[#] WoTクライアント[#]

WinSet、スタイル、-0xC00000

帰る



;;;;;;;;;;;;;;;; 非アクティブなウィンドウで最初のゲームパッドが前後に移動し、ズームする



WatchAxisFirstJoyMoveForwardAndZoom:

GetKeyState、1JoyY、1JoyY

GetKeyState、1JoyZ、1JoyZ

GetKeyState、1Joy2、1Joy2

GetKeyState、1Joy3、1Joy3

FirstJoyMoveForwardAndZoomPrev =%FirstJoyMoveForwardAndZoom%



1Joy2 = Dの場合

GoSub、FirstJoyConsumables

その他の場合、1Joy3 = D

GoSub、FirstJoyConsumables

他に

{

1JoyZ> 70の場合

{

1JoyY <30の場合

FirstJoyMoveForwardAndZoom = PgDn

それ以外の場合は、1JoyY> 70

FirstJoyMoveForwardAndZoom = PgUp

他に

FirstJoyMoveForwardAndZoom =

}

それ以外の場合、1JoyY <30

FirstJoyMoveForwardAndZoom = vk57

それ以外の場合は、1JoyY> 70

FirstJoyMoveForwardAndZoom = vk53

他に

FirstJoyMoveForwardAndZoom =

}



FirstJoyMoveForwardAndZoom =%FirstJoyMoveForwardAndZoomPrev%の場合

帰る



SetKeyDelay -1

FirstJoyMoveForwardAndZoomの場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{%FirstJoyMoveForwardAndZoom%down}、WoTクライアント

}

}

FirstJoyMoveForwardAndZoomPrevの場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend 、、 {%FirstJoyMoveForwardAndZoomPrev%up}、WoTクライアント

}

}

帰る



;;;;;;;;;;;;;;;; 非アクティブなウィンドウでの最初のゲームパッドの左右の動き



WatchAxisFirstJoyMoveRotate:

GetKeyState、1JoyX、1JoyX

GetKeyState、1Joy2、1Joy2

GetKeyState、1Joy3、1Joy3

FirstJoyMoveRotatePrev =%FirstJoyMoveRotate%



1Joy2 = Dの場合

GoSub、SecondJoyConsumables

その他の場合、1Joy3 = D

GoSub、SecondJoyConsumables

他に

{

1JoyX> 80の場合

FirstJoyMoveRotate = vk44

それ以外の場合、1JoyX <20

FirstJoyMoveRotate = vk41

他に

FirstJoyMoveRotate =

}



FirstJoyMoveRotate =%FirstJoyMoveRotatePrev%の場合

帰る



SetKeyDelay -1

FirstJoyMoveRotateの場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{%FirstJoyMoveRotate%down}、WoTクライアント

}

}

FirstJoyMoveRotatePrevの場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{%FirstJoyMoveRotatePrev%up}、WoTクライアント

}

}

帰る



;;;;;;;;;;;;;;;; 非アクティブなウィンドウの消耗品メニューの最初のゲームパッド



FirstJoyConsumables:

FirstJoyConsumablesPrev =%FirstJoyConsumables%



1JoyX <20の場合

{

1JoyY <20の場合

FirstJoyConsumables = vk38

それ以外の場合、1JoyYが40〜60の場合

FirstJoyConsumables = vk37

それ以外の場合は1JoyY> 80

FirstJoyConsumables = vk36

それ以外の場合FirstJoyConsumables =

}

1JoyXが40〜60の場合

{

1JoyY <10の場合

FirstJoyConsumables = vk31

それ以外の場合は、1JoyY> 90

FirstJoyConsumables = vk35

それ以外の場合FirstJoyConsumables =

}

それ以外の場合、1JoyX> 80の場合

{

1JoyY <20の場合

FirstJoyConsumables = vk32

それ以外の場合、1JoyYが40〜60の場合

FirstJoyConsumables = vk33

それ以外の場合は1JoyY> 80

FirstJoyConsumables = vk34

それ以外の場合FirstJoyConsumables =

}

それ以外の場合FirstJoyConsumables =



FirstJoyConsumables =%SFirstJoyConsumablesPrev%の場合

帰る



SetKeyDelay -1

FirstJoyConsumablesの場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend 、、 {%FirstJoyConsumables%down}、WoTクライアント

}

}

FirstJoyConsumablesPrevの場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{%FirstJoyConsumablesPrev%up}、WoTクライアント

}

}

帰る



;;;;;;;;;;;;;;;; アクティブでないウィンドウでの最初のゲームパッドの左/右レビュー



WatchAxisFirstJoyCameraRotateVert:

GetKeyState、1JoyU、1JoyU

GetKeyState、1Joy5、1Joy5

FirstJoyCameraRotateVertPrev =%FirstJoyCameraRotateVert%



1Joy5 = Dの場合

GoSub、FirstJoyCommandMenu

他に

{

1JoyU> 70の場合

FirstJoyCameraRotateVert =右

それ以外の場合、1JoyU <30

FirstJoyCameraRotateVert =左

他に

FirstJoyCameraRotateVert =

}



FirstJoyCameraRotateVert =%FirstJoyCameraRotateVertPrev%の場合

帰る



SetKeyDelay -1

FirstJoyCameraRotateVertの場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{%FirstJoyCameraRotateVert%down}、WoTクライアント

}

}

FirstJoyCameraRotateVertPrevの場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{%FirstJoyCameraRotateVertPrev%up}、WoTクライアント

}

}

帰る



;;;;;;;;;;;;;;;; 非アクティブなウィンドウでの最初のゲームパッドのアップ/ダウンレビュー



WatchAxisFirstJoyCameraRotateHoriz:

GetKeyState、1JoyR、1JoyR

GetKeyState、1Joy5、1Joy5

FirstJoyCameraRotateHorizPrev =%FirstJoyCameraRotateHoriz%



1Joy5 = Dの場合

GoSub、FirstJoyCommandMenu

他に

{

1JoyR> 70の場合

FirstJoyCameraRotateHoriz = Down

それ以外の場合、1JoyR <30

FirstJoyCameraRotateHoriz = Up

他に

FirstJoyCameraRotateHoriz =

}



FirstJoyCameraRotateHoriz =%FirstJoyCameraRotateHorizPrev%の場合

帰る



SetKeyDelay -1

FirstJoyCameraRotateHorizの場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{%FirstJoyCameraRotateHoriz%down}、WoTクライアント

}

}

FirstJoyCameraRotateHorizPrevの場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend 、、 {%FirstJoyCameraRotateHorizPrev%up}、WoTクライアント

}

}

帰る



;;;;;;;;;;;;;;;; 最初のゲームパッド注文メニュー



FirstJoyCommandMenu:

FirstJoyCommandMenuPrev =%FirstJoyCommandMenu%



1JoyU <20の場合

{

1JoyR <20の場合

FirstJoyCommandMenu = Numpad8

1JoyRが40〜60の場合

FirstJoyCommandMenu = Numpad7

それ以外の場合は1JoyR> 80

FirstJoyCommandMenu = Numpad6

それ以外の場合FirstJoyCommandMenu =

}

それ以外の場合、1JoyUが40〜60の場合

{

1JoyR <10の場合

FirstJoyCommandMenu = vk54

それ以外の場合は、1JoyR> 90

FirstJoyCommandMenu = Numpad5

それ以外の場合FirstJoyCommandMenu =

}

それ以外の場合は1JoyU> 80

{

1JoyR <20の場合

FirstJoyCommandMenu = Numpad2

1JoyRが40〜60の場合

FirstJoyCommandMenu = Numpad3

それ以外の場合は1JoyR> 80

FirstJoyCommandMenu = Numpad4

それ以外の場合FirstJoyCommandMenu =

}

それ以外の場合FirstJoyCommandMenu =



FirstJoyCommandMenu =%FirstJoyCommandMenuPrev%の場合

帰る



SetKeyDelay -1

FirstJoyCommandMenuの場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{%FirstJoyCommandMenu%down}、WoTクライアント

}

}

FirstJoyCommandMenuPrevの場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{%FirstJoyCommandMenuPrev%up}、WoTクライアント

}

}

帰る



;;;;;;;;;;;;;;;; 非アクティブなウィンドウで撮影された最初のゲームパッド



WatchAxisFirstJoyShoot:

GetKeyState、1JoyZ、1JoyZ

FirstJoyShootPrev =%FirstJoyShoot%



1JoyZ <30の場合

FirstJoyShoot = LButton

他に

FirstJoyShoot =



FirstJoyShoot =%FirstJoyShootPrev%の場合

帰る



SetKeyDelay -1

FirstJoyShootの場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x201 、、、、 WoTクライアント

}

}

FirstJoyShootPrevの場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x202 、、、、 WoTクライアント

}

}

帰る



;;;;;;;;;;;;;;;;;; 非アクティブなウィンドウでの最初のゲームパッドのクロス



WatchFirstJoyPOV:

GetKeyState、1JoyPOV、1JoyPOV

FirstJoyPOVPrev =%FirstJoyPOV%



1JoyPOV = 0の場合

FirstJoyPOV = vk52

それ以外の場合、1JoyPOV = 18000の場合

FirstJoyPOV = vk46

それ以外の場合、1JoyPOV = 27000の場合

FirstJoyPOV = vk58

それ以外の場合、1JoyPOV = 9000の場合

FirstJoyPOV = vk43

それ以外の場合FirstJoyPOV =



FirstJoyPOV =%FirstJoyPOVPrev%の場合

帰る



SetKeyDelay -1

FirstJoyPOVの場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{%FirstJoyPOV%down}、WoTクライアント

}

}

FirstJoyPOVPrevの場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{%FirstJoyPOVprev%up}、WoTクライアント

}

}

帰る



;;;;;;;;;;;;;;;; アクティブでないウィンドウでの最初のLShiftゲームパッド



1Joy10 ::

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{vkA0 Down}、WoTクライアント

KeyWait、1Joy10

ControlSend、{vkA0 Up}、WoTクライアント

}

}

帰る



;;;;;;;;;;;;;;;; 非アクティブなウィンドウでの最初のSpaceゲームパッド



1Joy9 ::

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend 、、 {vk20 Down}、WoTクライアント

KeyWait、1Joy9

ControlSend、{vk20 Up}、WoTクライアント

}

}

帰る



;;;;;;;;;;;;;;;; 非アクティブなウィンドウでのシェルの最初のゲームパッド選択



1Joy1 ::

Gosub、FirstSubToggle

戻る



FirstSubToggle:

FirstToggle ++

FirstToggle = 1の場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend 、、 {vk31 down}、WoTクライアント

睡眠10

ControlSend、{vk31 up}、WoTクライアント

睡眠10

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend 、、 {vk31 down}、WoTクライアント

睡眠10

ControlSend、{vk31 up}、WoTクライアント

}

}

FirstToggle = 2の場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend 、、 {vk32 down}、WoTクライアント

睡眠10

ControlSend、{vk32 up}、WoTクライアント

睡眠10

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend 、、 {vk32 down}、WoTクライアント

睡眠10

ControlSend、{vk32 up}、WoTクライアント

}

}

FirstToggle = 3の場合

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend 、、 {vk33 down}、WoTクライアント

睡眠10

ControlSend、{vk33 up}、WoTクライアント

睡眠10

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend 、、 {vk33 down}、WoTクライアント

睡眠10

ControlSend、{vk33 up}、WoTクライアント

}

FirstToggle = 0

}

帰る



;;;;;;;;;;;;;;;; 非アクティブなウィンドウでの最初のゲームパッド消火器



1Joy4 ::

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend 、、 {vk35 Down}、WoTクライアント

KeyWait、1Joy4

ControlSend、{vk35 Up}、WoTクライアント

}

}

帰る



;;;;;;;;;;;;;;;; アクティブでないウィンドウでの最初のゲームパッド自動視界



1Joy6 ::

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x204、1 、、、 WoTクライアント

KeyWait、1Joy6

SendMessage、0x205、1 、、、 WoTクライアント

}

}

帰る



;;;;;;;;;;;;;;;; 最初のウィンドウ内メニューのゲームパッド



1Joy8 ::

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{vk1B Down}、WoTクライアント

KeyWait、1Joy8

ControlSend、{vk1B Up}、WoTクライアント

}

}

帰る



;;;;;;;;;;;;;;;; 最初のゲームパッドは非アクティブなウィンドウでミニマップを非表示



1Joy7 ::

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{vk4D Down}、WoTクライアント

KeyWait、1Joy7

ControlSend、{vk4D Up}、WoTクライアント

}

}

帰る



;;;;;;;;;;;;;;;; 非アクティブなウィンドウでの最初のゲームパッドの修復



1Joy3 ::

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{vk34 Down}、WoTクライアント

KeyWait、1Joy3

ControlSend、{vk34 Up}、WoTクライアント

}

}

帰る



;;;;;;;;;;;;;;;; 非アクティブなウィンドウでの最初のゲームパッド処理



1Joy2 ::

{

IfWinNotActive、WoTクライアント

{

SendMessage、0x06、1 、、、 WoTクライアント

ControlSend、{vk36 Down}、WoTクライアント

KeyWait、1Joy2

ControlSend、{vk36 Up}、WoTクライアント

}

}

帰る



;;;;;;;;;;;;;;;; セカンドゲームパッド



;;;;;;;;;;;;;;;; アクティブなウィンドウで2番目のゲームパッドを前後に移動してズーム



WatchAxisSecondJoyMoveForwardAndZoom:

GetKeyState、2JoyY、2JoyY

GetKeyState、2JoyZ、2JoyZ

GetKeyState、2Joy2、2Joy2

GetKeyState、2Joy3、2Joy3

SecondJoyMoveForwardAndZoomPrev =%SecondJoyMoveForwardAndZoom%



2Joy2 = Dの場合

GoSub、SecondJoyConsumables

それ以外の場合、2Joy3 = Dの場合

GoSub、SecondJoyConsumables

他に

{

2JoyZ> 70の場合

{

2JoyY <30の場合

SecondJoyMoveForwardAndZoom = PgDn

それ以外の場合、2JoyY> 70の場合

SecondJoyMoveForwardAndZoom = PgUp

他に

SecondJoyMoveForwardAndZoom =

}

それ以外の場合、2JoyY <30

SecondJoyMoveForwardAndZoom = vk57

それ以外の場合、2JoyY> 70の場合

SecondJoyMoveForwardAndZoom = vk53

他に

SecondJoyMoveForwardAndZoom =

}



SecondJoyMoveForwardAndZoom =%SecondJoyMoveForwardAndZoomPrev%の場合

帰る



SetKeyDelay -1

SecondJoyMoveForwardAndZoomの場合

{

ControlSend、{%SecondJoyMoveForwardAndZoom%down}、[#] WoTクライアント[#]

}

SecondJoyMoveForwardAndZoomPrevの場合

{

ControlSend ,, {%SecondJoyMoveForwardAndZoomPrev%up}、[#] WoT Client [#]

}

帰る



;;;;;;;;;;;;;;;; アクティブなウィンドウでの2番目のゲームパッドの左右の動き



WatchAxisSecondJoyMoveRotate:

GetKeyState、2JoyX、2JoyX

GetKeyState、2Joy2、2Joy2

GetKeyState、2Joy3、2Joy3

SecondJoyMoveRotatePrev =%SecondJoyMoveRotate%



2Joy2 = Dの場合

GoSub、SecondJoyConsumables

それ以外の場合、2Joy3 = Dの場合

GoSub、SecondJoyConsumables

他に

{

2JoyX> 80の場合

SecondJoyMoveRotate = vk44

それ以外の場合、2JoyX <20

SecondJoyMoveRotate = vk41

他に

SecondJoyMoveRotate =

}



SecondJoyMoveRotate =%SecondJoyMoveRotatePrev%の場合

帰る



SetKeyDelay -1

SecondJoyMoveRotateの場合

{

ControlSend、{%SecondJoyMoveRotate%down}、[#] WoTクライアント[#]

}

SecondJoyMoveRotatePrevの場合

{

ControlSend ,, {%SecondJoyMoveRotatePrev%up}、[#] WoT Client [#]

}

帰る



;;;;;;;;;;;;;;;; 2番目のゲームパッドメニューの消耗品



SecondJoyConsumables:

SecondJoyConsumablesPrev =%SecondJoyConsumables%



2JoyX <20の場合

{

2JoyY <20の場合

SecondJoyConsumables = vk38

それ以外の場合、2JoyYが40〜60の場合

SecondJoyConsumables = vk37

それ以外の場合、2JoyY> 80の場合

SecondJoyConsumables = vk36

else SecondJoyConsumables =

}

それ以外の場合、2JoyXが40〜60の場合

{

2JoyY <10の場合

SecondJoyConsumables = vk31

それ以外の場合、2JoyY> 90

SecondJoyConsumables = vk35

else SecondJoyConsumables =

}

それ以外の場合、2JoyX> 80の場合

{

2JoyY <20の場合

SecondJoyConsumables = vk32

それ以外の場合、2JoyYが40〜60の場合

SecondJoyConsumables = vk33

それ以外の場合、2JoyY> 80の場合

SecondJoyConsumables = vk34

else SecondJoyConsumables =

}

else SecondJoyConsumables =



SecondJoyConsumables =%SecondJoyConsumablesPrev%の場合

帰る



SetKeyDelay -1

SecondJoyConsumablesの場合

{

ControlSend、{%SecondJoyConsumables%down}、[#] WoTクライアント[#]

}

SecondJoyConsumablesPrevの場合

{

ControlSend ,, {%SecondJoyConsumablesPrev%up}、[#] WoT Client [#]

}

帰る



;;;;;;;;;;;;;;;; 2番目のゲームパッドレビューとアクティブウィンドウでのマウス



WatchAxisSecondJoyCameraRotate:

MouseNeedsToBeMoved:= false

SetFormat、float、03

GetKeyState、2JoyU、2JoyU

GetKeyState、2JoyR、2JoyR

GetKeyState、2Joy5、2Joy5



2Joy5 = Dの場合

GoSub、SecondJoyCommandMenu

それ以外の場合、2Joy5 = Uの場合

{

if 2JoyU>%JoyThresholdUpper%

{

MouseNeedsToBeMoved:= true

DeltaU:= 2JoyU-JoyThresholdUpper

}

それ以外の場合、2JoyU <%JoyThresholdLower%の場合

{

MouseNeedsToBeMoved:= true

DeltaU:= 2JoyU-JoyThresholdLower

}

他に

DeltaU = 0

2JoyR>%JoyThresholdUpper%の場合

{

MouseNeedsToBeMoved:= true

DeltaR:= 2JoyR-JoyThresholdUpper

}

それ以外の場合、2JoyR <%JoyThresholdLower%

{

MouseNeedsToBeMoved:= true

DeltaR:= 2JoyR-JoyThresholdLower

}

他に

DeltaR = 0

}



SetKeyDelay -1

MouseNeedsToBeMovedの場合

{

SetMouseDelay、-1; 動きをスムーズにします

x:=(DeltaU / 30)*(ABS(DeltaU)/ 30)* JoyMultiplier

y:=(DeltaR / 30)*(ABS(DeltaR)/ 30)* JoyMultiplier

DllCall( "mouse_event"、uint、1、int、x、int、y、uint、0、int、0)

}

帰る



;;;;;;;;;;;;;;;; 2番目のゲームパッド注文メニュー



SecondJoyCommandMenu:

SecondJoyCommandMenuPrev =%SecondJoyCommandMenu%



2JoyU <20の場合

{

2JoyR <20の場合

SecondJoyCommandMenu = Numpad8

それ以外の場合、2JoyRが40〜60の場合

SecondJoyCommandMenu = Numpad7

それ以外の場合、2JoyR> 80の場合

SecondJoyCommandMenu = Numpad6

その他SecondJoyCommandMenu =

}

それ以外の場合、2JoyUが40〜60の場合

{

2JoyR <10の場合

SecondJoyCommandMenu = vk54

それ以外の場合、2JoyR> 90

SecondJoyCommandMenu = Numpad5

その他SecondJoyCommandMenu =

}

それ以外の場合、2JoyU> 80

{

2JoyR <20の場合

SecondJoyCommandMenu = Numpad2

それ以外の場合、2JoyRが40〜60の場合

SecondJoyCommandMenu = Numpad3

それ以外の場合、2JoyR> 80の場合

SecondJoyCommandMenu = Numpad4

その他SecondJoyCommandMenu =

}

その他SecondJoyCommandMenu =



SecondJoyCommandMenu =%SecondJoyCommandMenuPrev%の場合

帰る



SetKeyDelay -1

SecondJoyCommandMenuの場合

{

ControlSend、{%SecondJoyCommandMenu%down}、[#] WoTクライアント[#]

}

SecondJoyCommandMenuPrevの場合

{

ControlSend ,, {%SecondJoyCommandMenuPrev%up}、[#] WoT Client [#]

}

帰る



;;;;;;;;;;;;;;;; アクティブウィンドウで2番目のゲームパッドショット



WatchAxisSecondJoyShoot:

GetKeyState、2JoyZ、2JoyZ

SecondJoyShootPrev =%SecondJoyShoot%



2JoyZ <30の場合

SecondJoyShoot = LButton

他に

SecondJoyShoot =



SecondJoyShoot =%SecondJoyShootPrev%の場合

帰る



SetKeyDelay -1

SecondJoyShootの場合

{

送信、{%SecondJoyShoot%down}

}

SecondJoyShootPrevの場合

{

送信、{%SecondJoyShootPrev%up}

}

帰る



;;;;;;;;;;;;;;;;;; アクティブなウィンドウの2番目のゲームパッドクロス



WatchSecondJoyPOV:

GetKeyState、2JoyPOV、2JoyPOV

SecondJoyPOVPrev =%SecondJoyPOV%



2JoyPOV = 0の場合

SecondJoyPOV = vk52

それ以外の場合、2JoyPOV = 18000の場合

SecondJoyPOV = vk46

それ以外の場合、2JoyPOV = 27000

SecondJoyPOV = vk58

それ以外の場合、2JoyPOV = 9000の場合

SecondJoyPOV = vk43

else SecondJoyPOV =



SecondJoyPOV =%SecondJoyPOVPrev%の場合

帰る



SetKeyDelay -1

SecondJoyPOVの場合

{

ControlSend ,, {%SecondJoyPOV%down}、[#] WoT Client [#]

}

SecondJoyPOVPrevの場合

{

ControlSend ,, {%SecondJoyPOVprev%up}、[#] WoT Client [#]

}

帰る



;;;;;;;;;;;;;;;; アクティブなウィンドウの2番目のLShiftゲームパッド



2Joy10 ::

{

ControlSend ,, {vkA0 Down}、[#] WoT Client [#]

KeyWait、2Joy10

ControlSend、{vkA0 Up}、[#] WoTクライアント[#]

}

帰る



;;;;;;;;;;;;;;;; アクティブなウィンドウの2番目のスペースゲームパッド



2Joy9 ::

{

ControlSend、{vk20 Down}、[#] WoTクライアント[#]

KeyWait、2Joy9

ControlSend、{vk20 Up}、[#] WoTクライアント[#]

}

帰る



;;;;;;;;;;;;;;;; 非アクティブなウィンドウでのシェルの2番目のゲームパッド選択



2Joy1 ::

Gosub、SecondSubToggle

戻る



SecondSubToggle:

SecondToggle ++

SecondToggle = 1の場合

{

ControlSend、{vk31 down}、[#] WoTクライアント[#]

睡眠10

ControlSend ,, {vk31 up}、[#] WoT Client [#]

睡眠10

ControlSend、{vk31 down}、[#] WoTクライアント[#]

睡眠10

ControlSend ,, {vk31 up}、[#] WoT Client [#]

}

SecondToggle = 2の場合

{

ControlSend、{vk32 down}、[#] WoTクライアント[#]

睡眠10

ControlSend、{vk32 up}、[#] WoTクライアント[#]

睡眠10

ControlSend、{vk32 down}、[#] WoTクライアント[#]

睡眠10

ControlSend、{vk32 up}、[#] WoTクライアント[#]

}

SecondToggle = 3の場合

{

ControlSend、{vk33 down}、[#] WoTクライアント[#]

睡眠10

ControlSend、{vk33 up}、[#] WoTクライアント[#]

睡眠10

ControlSend、{vk33 down}、[#] WoTクライアント[#]

睡眠10

ControlSend、{vk33 up}、[#] WoTクライアント[#]

SecondToggle = 0

}

帰る



;;;;;;;;;;;;;;;; アクティブウィンドウ内の2番目のゲームパッド消火器



2Joy4 ::

{

ControlSend ,, {vk35 Down}、[#] WoT Client [#]

KeyWait、2Joy4

ControlSend、{vk35 Up}、[#] WoTクライアント[#]

}

帰る



;;;;;;;;;;;;;;;; アクティブウィンドウでの2番目のゲームパッド自動視界



2Joy6 ::

{

送信、{RButton Down}

KeyWait、2Joy6

送信、{RButton up}

}

帰る



;;;;;;;;;;;;;;;; 非アクティブなウィンドウの2番目のゲームパッドメニュー



2Joy8 ::

{

ControlSend、{vk1B Down}、[#] WoTクライアント[#]

KeyWait、2Joy8

ControlSend ,, {vk1B Up}、[#] WoT Client [#]

}

帰る



;;;;;;;;;;;;;;;; 2番目のゲームパッドはアクティブウィンドウでミニマップを非表示にします



2Joy7 ::

{

ControlSend、{vk4D Down}、[#] WoTクライアント[#]

KeyWait、2Joy7

ControlSend、{vk4D Up}、[#] WoTクライアント[#]

}

帰る



;;;;;;;;;;;;;;;; 2番目のゲームパッドはアクティブウィンドウでミニマップを非表示にします



2Joy5 ::

{

ControlSend、{vk5A Down}、[#] WoTクライアント[#]

KeyWait、2Joy5

ControlSend、{vk5A Up}、[#] WoTクライアント[#]

}

帰る



;;;;;;;;;;;;;;;; 2番目のゲームパッドの修理



2Joy3 ::

{

ControlSend、{vk34 Down}、[#] WoTクライアント[#]

KeyWait、2Joy3

ControlSend、{vk34 Up}、[#] WoTクライアント[#]

}

帰る



;;;;;;;;;;;;;;;; 第二のゲームパッド治療



2Joy2 ::

{

ControlSend ,, {vk36 Down}、[#] WoT Client [#]

KeyWait、2Joy2

ControlSend ,, {vk36 Up}、[#] WoT Client [#]

}

帰る





もちろん、キーボード/マウスでテレビで遊ぶ人はいませんでした。 タンク制御は、Xbox360の2つのゲームパッドを使用して実行されます。 基本は、Xbox 360のバージョンからコントロールを選択しました。

Xbox 360の管理設定
画像








一般的に、私はこのようなことをしました。

PC管理設定


切り替えてシェルのタイプを選択-一度押すと-1番目のタイプ、2番目-2番目、3番目-3番目、最初にリセット(1-2-3)。 シェルはすぐに使用されます-AHKはゲームをダブルクリックします。



注文メニューは、左バンパーと右スティックの組み合わせ、左スティックと組み合わせた「X」および「B」ボタンの処理と修理です。





分割画面モードでのビデオゲームプレイ:



ビデオはドラフトスクリプトで記録されました-戦車、砲塔、狙撃モード、およびスペースバーショットの制御のみがあった場合。



4.ゲームパッドの振動を構成します。

ここでは、ゲームパッドでゲームに振動を追加することについて既に書いています。 このゲームの変更では、Webサービスを使用してバイブレーションを送信し、2番目のゲームパッドに送信するため、Flaskポートを変更する必要がありました。



しかし、振動するゲームパッドの「分割画面」でプレイするには、独自のmodを使用して「サンドボックス」(別の名前の隣のフォルダーをコピー)でクライアントの完全なコピーを実行し、Python27を「サンドボックス」にコピーする必要があります。



結果。



この解決策は多くのゲームに適用することができるようです。 解決策は非常に不便であることが判明しました-あらゆる種類の「しかし」。 しかし、「ファン」向けのゲームは成功したと言えます。 戦いのすべての人に幸運を!



グレイフォーラムとティードリンカーモデレーターであるコリアンランダムとinj3ct0rに感謝します。 ありがとう!!! また、私を助言し、助け、支えてくれたすべての人々にも。



PSメインおよび「サンド」クライアント用のmod(注文のメニュー、スナイパーモードとバイブロの切り替え)を広めました。 また、アーカイブには、WinL + LButtonキーの組み合わせを押すことにより、クライアントの周囲のフレームを完全に削除するスクリプトがあります。



All Articles