数日前、素晴らしいニュースがHabréに登場しました。
入植者がオンラインになりました !
ゲームはフレックスで記述されているため、ほとんどすべての最新プラットフォームで動作します。 しかし、ゲームのベータ版はその跡を残します-多くはまだ確定していませんが、いくつかは単に不安定です。 インターフェースは絶対に便利なものとは言えません。
貿易なくして完全な経済戦略はありません。 将来的には、1つのタイプのリソースを生成する単一村を作成し、残りを市場で交換することが可能です。 概念の証明と同様に、取引を少し単純化するために、私は可能な限り簡単なユーティリティを書くことにしました。
それでは、顧客はどのようにして市場の品揃えを知るのでしょうか?
見つける最も簡単な方法は、スニファーを配置し、クライアントとサーバーの間で何が起こるかを確認することです。 有料だが絶対に正当化できないプログラムをいくつかテストした後、実証済みの無料の
Wiresharkに戻りました。 隠されているものを見ることができます。
Wiresharkをインストールしても問題は発生しません。すぐにスニッフィングに進みましょう。 これを行うには、設定で通信が行われるインターフェースを選択します。 これを行うには、Ctrl + Iの組み合わせ、またはメニュー項目Capture-> Interfacesを使用できます。
この段階で追加の設定を行う必要はありません。アクティブなインターフェースの反対側にある「開始」をクリックします。
次のようなものがメインウィンドウに表示されます。
もちろん、急流、ダウンローダー、その他の動物の活動がここに表示されるため、この情報のほとんどは絶対に必要ありません。 ipがゲームのxmppサーバーのipと一致するパケットをフィルターで除外します(このプロトコルでは、チャットとトレードの両方がいくつかの変更を加えています)。
すべてのパッケージの中で、HTTP / XMLに関心があります。Wiresharkを使用すると、情報をすぐに抽出できると同時に、送信パケットを削除できます。この場合、興味深い情報は含まれていません。 これを行うには、フィルターを「ip.src == 87.119.203.13 and xml」に変更します。
これらのパッケージのいずれかを見ると、次のようなものが表示されます(ブラケットが正しく表示されるように変更されています)。
eXtensible Markup Language
[body xmlns='http://jabber.org/protocol/httpbind']
[message xmlns="jabber:client" to="dim0n@87.119.203.13/xiff-bosh" id="m_3115" type="groupchat" from="trade@conference.87.119.203.13/pimo"]
[body]Coin|1|Stone|200[/body]
[bbmsg xmlns="bbmsg" playername="Pimo" playerid="85153"/]
[/message]
[/body]
このメッセージから、1コイン(コイン| 1)に対して、プレイヤーが200ストーン(ストーン| 200)を獲得したいことが明らかです。 最良の取引ではありませんが、ポイントではありません。 この形式では、すべての取引メッセージが送信されます。 一般的な場合、正規表現\ w + \ | \ w + \ | \ w + \ | \ w +で記述できます。
だから私たちはほぼゴールに近づいています。 取引メッセージを受信する方法を学び、それらを美しく表示することができます。 ただし、関連する情報はすべて適切です。 Wiresharkにはdumpcap.exeが含まれています。 実際、Wireshark自体を起動することなく、必要なパケットを記録できます。 開始の引数については説明しません。ヘルプからそれらについて学ぶことができますが、次の行を取得しました
-i \ Device \ NPF_ {4DC422B9-3A2E-4899-9775-2DD89AF02FDD} -f "host 87.119.203.13" -w C:\ Users \ Dim0N \デスクトップ\ 323232my 。 パッケージは323232myファイルに追加されます(名前の正当性はありません)。
受信した情報をC#で処理します。 これを行うには、列「Purchase」、「Purchase Price」、「Sale」、「Sale Price」でDataGridViewを作成します。 タイマーによって、5秒ごとに、ファイルからの新しいパケットをチェックします。
public Form1()
{
InitializeComponent();
timer1.Start();
timer1.Interval = 5000;
Process.Start( @"C:\Users\Dim0N\Desktop\2\WiresharkPortable\App\Wireshark\dumpcap.exe" ,
"-i \\Device\\NPF_{4DC422B9-3A2E-4899-9775-2DD89AF02FDD} -f \"host 87.119.203.13\" -w C:\\Users\\Dim0N\\Desktop\\323232my" ); // dumpcap .
}
* This source code was highlighted with Source Code Highlighter .
5秒に1回、次のコードが実行されます。
private void timer1_Tick( object sender, EventArgs e)
{
File .Copy( @"C:\Users\Dim0N\Desktop\323232my" , @"C:\Users\Dim0N\Desktop\323232mycopy" , true ); // , , dumpcamp
var streamReader = new StreamReader( @"C:\Users\Dim0N\Desktop\323232mycopy" );
string str = streamReader.ReadToEnd(); //
streamReader.Close();
int i = 0;
dataGridView1.Rows.Clear(); // ,
foreach ( var match in Regex.Matches(str, @"\w+\|\w+\|\w+\|\w+" )) //
{
string matchstr = match.ToString(); //
dataGridView1.Rows.Add(matchstr.Split( '|' )[0], matchstr.Split( '|' )[1], matchstr.Split( '|' )[2], matchstr.Split( '|' )[3]); // ,
if ((matchstr.Split( '|' )[0] == matchstr.Split( '|' )[2]) && ( Convert .ToInt32(matchstr.Split( '|' )[1]) < Convert .ToInt32(matchstr.Split( '|' )[3]))) // , , ( 100 10 )
{
dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Red; //
}
i += 1;
}
* This source code was highlighted with Source Code Highlighter .
その結果、ソートして最も有利なオファーを選択し、必要に応じて情報を処理できるテーブルがあります。