AOPを使用したオンラインJavaScriptゲームのボットを作成しています



オンラインゲームが好きなのに、あまり時間をかけたくない場合は、catにようこそ。 ボットの良し悪しについては説明しませんが、特定のオンラインゲーム用のボットの作成方法を分析するだけです。 彼はタイムアウトのためにボタンを愚かにクリックしませんが、ブラウザのイベントに応答します。 これは、アスペクト指向プログラミング(以降AOP)を使用して行います。 例として、私は、hub病者に愛されているゲームPernatskを選択しました。



1.材料を調理する



必要なもの:





重要! ゲームはクライアントではなくブラウザで動作するはずです。 Flashではなく、HTML + JavaScriptで。

出力では、Chromeの拡張機能を取得する必要があります。

2.拡張機能を作成する



拡張の実行方法については詳しく説明しません。 ハブについては、例えばここでそれについてすでに書いています

必要なファイルのコードのみを提供します。

manifest.jsonで



{ "name": "BOT for pernatsk", "version": "0.1", "manifest_version": 2, "content_scripts": [ { "matches": [ "http://pernatsk.ru/*" ], "js": [ "background.js" ], "run_at": "document_end" } ], "permissions": [ "storage" ], "web_accessible_resources": [ "/injected.js" ] }
      
      





「matches」:[" pernatsk.ru *"]行で、ゲームのアドレスを指定する必要があります。

サイトにJSコードを挿入する場合にbackground.jsファイルを使用します。 実際にはbackground.jsコード:



 $.get(chrome.extension.getURL('/injected.js'), function(data) { var script = document.createElement("script"); script.setAttribute("type", "text/javascript"); script.innerHTML = data; document.getElementsByTagName("head")[0].appendChild(script); document.getElementsByTagName("body")[0].setAttribute("onLoad", "ai_on();"); } );
      
      





重要! この単一の機能で私たちが何をしているかを理解していない場合、ボットを作成するには時期尚早です。 JavaScriptの基本をお読みください。

私たちとのすべての作業は、injected.jsファイルで実行されます。

 function ai_on(){ console.log("Hello world") }
      
      





これらのファイルはすべて1つのボットフォルダーに保存されます。

3.ボットの最初の起動



[設定]-[ツール]-[拡張機能]で[Chomre]に移動し、[展開された拡張機能をダウンロード]をクリックします。 「開発者モード」にチェックマークが付いているはずです。 ファイルを含むフォルダーを指定します。

それでは、ゲームに入りましょう。 開発者コンソールの電源を入れます(これは頻繁に行う必要があります)-F12キーを押して「Hello Wolrd」を表示します。 アプリケーションが獲得しました。

これで、ai_on関数で記述するすべてが、ページのロード後に処理されます。

4. AOPを追加する



ボットが機能するには、ライブラリが必要です。 私のお気に入りのjQueryはペルナツクで既に使用されているため、追加しません。

JqueryプラグインのAOPを追加します。 良いことには、拡張機能自体を別のファイルとしてパックする価値がありましたが、私は怠け者です。 したがって、injected.jsの最初の行としてbin / aop.pack.jsコードを追加するだけです。

ai_onを変更して、これが機能することを確認します

 function ai_on(){ bot = jQuery.aop.after( {target: window, method: '$'}, function(result){ console.log('jQuery detected!'); bot[0].unweave(); return result; }); }
      
      





AOPが正しく接続されていることを確認してください。 「jQueryが検出されました!」という行が開発者のコ​​ンソールに表示されますが、最初の操作後にアドバイスをオフにしているため、メッセージは1回だけです。

重要! jQuery.aop.afterおよびbot [0] .unweave()を理解するには、AOP for Jqueryのドキュメントを読んでください。

5. AOPを使用する理由



AOPの本質は、次のように非常に大まかに表現できます。「 function_1の後、function_2を作成する必要があります。どのようなfunction_1は、私たちにはほとんど関心がありませんこちらの例の通常の説明をよく読んでください

使い方は? どんな機能の後でも起動できます。 たとえば、ブラウザで機能が機能し、モンスターが可視ゾーンに表示されました。 私たちは彼を攻撃する機能を開始します。

6.ボットに最初のチームを教える



jected.jsに次のコードを追加します:

 var commands = { conessearch:function(){ if( window.location.pathname != "/location/conessearch") { window.location.pathname = "/location/conessearch"; return false; } var buttons = $('form').eq(0).find('button'); for (var index = 0; index < buttons.length; ++index) { if(buttons.eq(index).css('display') == "inline-block") { buttons.eq(index).mouseenter(); buttons.eq(index).click(); return true; } } return false; }, }
      
      







このコマンドで、鳥鳥はコーンのためにペルナツクで飛ぶでしょう。 Pernatskではボットに対する保護がほとんどないため、コードは少し複雑です。

コマンドを書くときは、最初にコンソールでコマンドのパフォーマンスをテストしてから、コードをエディターに転送することをお勧めします。

チームの作業をテストおよび検証するには、cosnolでcommand.conessearch commands.conessearch()



コードを実行します。



7.ボットが応答するイベントを探しています



最初に2つの方法があります-ゲームコードを分析します。 長い:(

2番目の方法は、AOPを使用することです。すべての機能が機能した後、その名前をログに出力します。 次に、必要なものを選択します。

ai_on()を変更

 function ai_on(){ bot = jQuery.aop.around( {target: window, method: ''}, function(invocation){ console.log(invocation.method); return invocation.proceed(); }); }
      
      





多くの機能があります。 jQueryからの$または標準のsetTimeoutがあります。

これで作業するのはあまり便利ではありません。コードを再度変更します。

 function ai_on(){ fnList = []; bot = jQuery.aop.around( {target: window, method: ''}, function(invocation){ var fnName = invocation.method.toString(); if(fnList.indexOf(fnName) == -1) { console.log(fnName); fnList.push(fnName); } }); }
      
      





これで、まだ表示されていない機能のみが反映されます。 完全なリストをfnListに保存します。

数分後、関数["clearInterval", "$", "setTimeout", "timerTick", "serverTimeUpdate", "getComputedStyle", "setInterval", "tutorialArr", "showQ", "showQc", "updateBirdData", "viz", "unviz", "weatherUpdate"]



そのようなオプションが表示されます["clearInterval", "$", "setTimeout", "timerTick", "serverTimeUpdate", "getComputedStyle", "setInterval", "tutorialArr", "showQ", "showQc", "updateBirdData", "viz", "unviz", "weatherUpdate"]





メソッド内のターゲットと正規表現を変更すると、それに固執するために私たちに合った関数を選択できます。 たとえば、天気が変わるたびに、weatherUpdate関数を選択すると、鳥がコーンの後ろを飛びます。

7.イベントに応答するようボットに教える



関数コードai_on()を再度変更します

 function ai_on(){ bot = jQuery.aop.after( {target: window, method: 'weatherUpdate'}, commands.conessearch()); } function ai_off(){ bot[0].unweave(); }
      
      





コンソールを介してボットをオフにするには、ai_off関数が必要です。

8.さらなる開発の方向性



この資料がお役に立てば幸いです。 他に何ができますか?



コードは実際には何もしないので、投稿しません。



All Articles