中国页游论坛

 

 

只需一步,快速开始

搜索
abcde 论坛 Travian部落战争 『Tranvian.Com4』 php 外掛研習, kimon 請援手~~~

Rank: 24Rank: 24Rank: 24

骑士

UID
307590 
精华
积分
1108 
帖子
14 
威望
2 点 
银币
5598 元 
女仆
0 个 
阅读权限
50 
注册时间
2009-8-4 
发表于 2009-8-19 22:09 |显示全部帖子
之前kimon 弄的php 外掛, 功能強勁得很, 幾乎涵蓋所有功能, 還好像能探知村裡有沒有兵, 再決定是否出去吃羊.

不过這個php 用法貌似挺複雜, 安裝時有點難搞, 不知道有沒有人熟悉php 呢?
可不可能做一個簡化版呢?  (如果 it 鬼才 kimon能出手就最好啊)  

目標:
1. 搖控輸入 http://s4.travian.com/a2b.php的 中表格:

<form action="http://s4.travian.com/a2b.php" name="snd" method="post">
<input name="b" value="1" type="hidden">
Legion<input name="t1" value="0" size="1" type="text">
Imper<input name="t3" value="0" size="1" type="text">
EI<input name="t5" value="0" size="1" type="text">
Scout<input name="t4" value="0"  size="1" type="text">
Praet<input name="t2" value="0" size="1" type="text">

EC<input name="t6" value="0" size="1" type="text">   
<BR>
Cata<input name="t8" value="0" size="1" type="text">
Ram<input name="t7" value="0" size="1" type="text">
Sen<input name="t9" value="0"  size="1" type="text">
Set<input name="t10" value="0" size="1" type="text">
<BR>

<input class="radio" name="c" value="2" type="radio">Re
<input class="radio" name="c" value="3" type="radio">Nor
<input class="radio" name="c" value="4" checked type="radio">Raid
<BR>Coordinate:
<input class="text" name="x" value="114" size="2" maxlength="4" type="text">
<input class="text" name="y" value="160" size="2" maxlength="4" type="text"><BR>

<input value="ok" name="s1" alt="OK" type="submit">


2. 利用 .txt 的 flat database 去找出決定打哪隻肥羊, 例如:

x     y      t1 t2 t3 t4   (t1= clubswingers 或 legionnaire)
112 202 3 0 0 0 0 0 0 0 0 0 0   // 出 3 隻 cs 去打112 202
122 202 3 0 0 0 0 0 0 0 0 0 0
121 202 3 0 0 0 0 0 0 0 0 0 0
132 202 3 0 0 0 0 0 0 0 0 0 0
112 232 3 0 0 0 0 0 0 0 0 0 0


.txt  每被讀一次, 首行資料就被 truncate 一次,
但我只懂 fopen ( "farm_list.txt", w ) 這種方法, 卻會把整個文件都清洗的,
不知道怎樣才能只刪首行數據

3. 再用 cronjob 每隔一段時間執行一次.

4. 效果: 日後只要掛在自己的個人網頁服務器上, 就能自動攻肥羊, 連電腦也不用打開, 也不怕忽然停電或掛線啊~~~~

但我不太熟悉 php,  請IT 鬼才 kimon  出手增援啦~~~~




<?

require_once('common.php');

// 假設已經登入

login();


// 在a2b 抽出類似句子 <a  href="#">(20)

$url = "http://$server/a2b.php";

if ($fp = fopen("$url", "r"))
{
  while(!feof($fp))
  {
    $line = fgets($fp,1024);
    if (eregi('on[cC]lick="document\.snd\.t([0-9]+)\.value=([0-9]+); return false;',$line)',$line))
    {
    $army = $line; // 這能弄出 $outtext[1...8] 的array , 把每一個符合句子放入去嗎?
    }
  }
  fclose($fp);
}


//  得出 <a  href="#"> 這類句子後,
// 如何向電腦說明:
// $t3= 20;
// $t1 = 10; 等等呢?
// 這樣行不行呢?
// 不懂啊....
// 超菜鳥方法...


$num  = count($army) // 點算有多少個 array 在army 內

while ( $counter <  $num ) {

$counter = $counter + 1;
$army_info_cutting = eregi_replace("(.*).value=", "", $outtext[$counter]); // 把 .value= 及之前的東西砍掉
$army_info_cutting = eregi_replace("; return(.*)", "", $outtext[$counter]); // 把 ; return 及之後的東西砍掉
$troop($counter) = $army_info_cutting
}



// 打開 Flat database

// farm_list.txt 數據格式如下:
// number(出擊的次序) X Y (座標) T1 T2 T3 .... T11  (兵的編號)
// 1  110 152  0 0 10 0 0 0 0 0 0 0 0  <--- 第一項攻擊, 出五隻 imperian, 其餘為 0
// 2  111 152  3 0 0 0 0 0 0 0 0 0 0  <--- 第二項攻擊, 出 3 隻 Legion, 其餘為 0
//

$fh = fopen("farm_list.txt","r");

while($attack = fgets($fh))
  {
  
  ... 不懂怎處理..... . 要再研究研究....
  
      }
      

}

哎.... 寫得好慢, 每寫一行都在翻書, 各位熟悉 php 的高手請來協助一下啦.
回复 引用

收藏 分享 举报 返回顶部

Rank: 24Rank: 24Rank: 24

骑士

UID
161421 
精华
积分
2228 
帖子
79 
威望
0 点 
银币
17019 元 
女仆
0 个 
阅读权限
50 
注册时间
2008-7-15 
发表于 2009-8-20 10:52 |显示全部帖子
$url = "http://$server/a2b.php";
if ($fp = fopen("$url", "r"))

這樣簡單的話HTTP Header的User-Agent會是PHP,可能很容易被抓,
必須換掉User-Agent。

另外,訪問伺服器的時候要注意隨機有個間隔。
点评回复 引用

举报 返回顶部

Rank: 24Rank: 24Rank: 24

骑士

UID
307590 
精华
积分
1108 
帖子
14 
威望
2 点 
银币
5598 元 
女仆
0 个 
阅读权限
50 
注册时间
2009-8-4 
发表于 2009-8-25 05:39 |显示全部帖子
kimon, 請問一下用 curl 的方法去 抓取一個網頁內容時,  要怎樣弄呢?

我剛才按你的編輯, 試試能不能把 a2b.php 的內容抓出來, 但似乎不太成功.

最初, login.php 是按照數據庫內的帳號去設定 $server, $user , $password, 但沒反應
我之後在 login.php 自行加入 username / passwd, 但 echo  $result 同樣沒有反應,
到時是怎麼一回事呢?

謝謝!


<?


        require_once('login.php');


                // get a2b page
                $url = "http://s4.travian.com/a2b.php";
                echo $url . "\n";
               
                $ch = my_curl_init();
                curl_setopt($ch, CURLOPT_URL, $url);
                $result = curl_exec ($ch);
                curl_close ($ch);

                return $result;
               
                echo $result;               
       
                        // onClick="document.snd.t1.value=1; return false;
                        if(!preg_match('/on[cC]lick="document\.snd\.t1\.value=([0-9]+); return false;/', $result, $matches)){
                                $t1 = 0;
                        }else{
                                $t1 = $matches[1];
                        }


                        // onClick="document.snd.t3.value=1; return false;
                        if(!preg_match('/on[cC]lick="document\.snd\.t3\.value=([0-9]+); return false;/', $result, $matches)){
                                $t3 = 0;
                        }else{
                                $t3 = $matches[1];
                        }


                        // onClick="document.snd.t5.value=1; return false;
                        if(!preg_match('/on[cC]lick="document\.snd\.t5\.value=([0-9]+); return false;/', $result, $matches)){
                                $t5 = 0;
                        }else{
                                $t5 = $matches[1];
                        }
                       
                        // onClick="document.snd.t6.value=1; return false;
                        if(!preg_match('/on[cC]lick="document\.snd\.t6\.value=([0-9]+); return false;/', $result, $matches)){
                                $t6 = 0;
                        }else{
                                $t6 = $matches[1];
                        }

                        // ram
                                // onClick="document.snd.t7.value=1; return false;
                                if(preg_match('/on[cC]lick="document\.snd\.t7\.value=([0-9]+); return false;/', $result, $matches)){
                                        $t7 = 0;
                                }
                                else{
                                $t7 = $matches[1];
                        }
                       
                // onClick="document.snd.t11.value=1; return false;"
                        if(preg_match('/on[cC]lick="document\.snd\.t11\.value=1; return false;/', $result, $matches)){
                                $t11 = 0;
                        }else{
                                $t11 = 1;
                        }
       
                       
$t2 = 0;
$t4 = 0;
$t8 = 0;
$t9 = 0;  
$t10 =0;

       
echo $t1;


?>
点评回复 引用

举报 返回顶部

Rank: 24Rank: 24Rank: 24

骑士

UID
161421 
精华
积分
2228 
帖子
79 
威望
0 点 
银币
17019 元 
女仆
0 个 
阅读权限
50 
注册时间
2008-7-15 
发表于 2009-8-26 12:40 |显示全部帖子

回复 #3 mcdulldull 的帖子

在echo $result;前面有個
return $result;

程序結束了。
点评回复 引用

举报 返回顶部

Rank: 24Rank: 24Rank: 24

骑士

UID
307590 
精华
积分
1108 
帖子
14 
威望
2 点 
银币
5598 元 
女仆
0 个 
阅读权限
50 
注册时间
2009-8-4 
发表于 2009-8-29 18:23 |显示全部帖子
已抽到了. 謝啊.

另外, 想到一個方法可以自動更新死羊名單, 但又不用天天下載世界地圖.
例如這條連結:

http://www.traviandope.com/close ... os_y=45&idle_only=1

之後:

$server_number = 4;
$x = 186;
$y = 45;

$requesturl = "http://www.traviandope.com/closest.php?change_sid=". $server_number . "&act=search_pos&pos_x=" . $x .

"&pos_y=" . $y . "&idle_only=1";

if ($fp = fopen("$requesturl", "r"))
{
  while(!feof($fp))
  {
    $line = fgets($fp,1024);
    if (eregi('<tr>',$line))
    {
    $outtext = $outtext.$line;
    }
  }
  fclose($fp);

但是:
- 不懂怎樣用 preg match 把全部 (只懂抽一條) 的 <tr>..... </tr>都抽出來.

- 假如已抽好, 每早執行一次, 把他們的資料填入數據庫 targets 一欄中, 這就不用再用 worldmap 了. 不过我要查查  mysql的用......
点评回复 引用

举报 返回顶部

Rank: 1

见习

UID
319286 
精华
积分
帖子
1 
威望
0 点 
银币
3009 元 
女仆
0 个 
阅读权限
10 
注册时间
2009-10-2 
发表于 2009-10-2 01:03 |显示全部帖子

回复 #5 mcdulldull 的帖子

2位高人 不知道是不是能把程序发个给我呢?谢谢了 !~
poohyj@gmail.com
点评回复 引用

举报 返回顶部

快速发帖

你需要登录后才可以回帖 登录 | 注册

Archiver|中国页游网 ( 沪ICP备06036464号-2 )

GMT+8, 2012-2-6 14:13 , Processed in 0.095659 second(s), 20 queries .

Powered by Discuz! X1.5

© 2001-2010 Comsenz Inc.