qq农场js外挂详细制作(提供源码、有注释、有抓包数据分析、不再更新、不回答提问)

(图片不能用另存为下载,用属性查看链接,然后下载)

 

源代码下载:http://download.csdn.net/source/1889334

 

 

以下为html文件代码,即外挂主程序。

 


<script type="text/javascript">
/*
作者:王安林。QQ:379184514。邮箱:w18514379@126.com。博客:http://blog.csdn.net/w184514379http://blog.csdn.net/lin379184514
特别声明:本作品仅做研究交流用,仅为大家提供一点思路,可任意修改和传播,不追究版权亦不承担任何责任,不回答提问,不再更新。
2009.12.10
*/
</script>
<script type="text/javascript" src="md5.js"></script>
<script type="text/javascript">
//farmKey计算
  function getkey()
  {
    var c = new Date();
    var farmTime = Math.floor(c.getTime() / 1000);

 

        var key = "fs#$hsJ!Fa*AF!-0aPS";
        var farmKey = hex_md5(farmTime + key.substr(parseInt(farmTime) % 10, 19));
        key = "&farmTime=" + farmTime + "&farmKey=" + farmKey;
    //alert(key);
    return key;
  };
/*
  function ResChinese(ustr) //UTF-8转中文
  {
    var sss = unescape(ustr.replace(///u/g, '%u'));
    // alert(sss);
    return sss;
  }
*/
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  POST 发数据 end XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//
  function createXMLHttpRequest()
  {
    if (window.XMLHttpRequest) {
      XMLHttpR = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
      try {
        XMLHttpR = new ActiveXObject("Msxml2.XMLHTTP");
      } catch(e) {
        try {
          XMLHttpR = new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e) {}
      }
    }
  }

  function sendRequest(method , url, data, callback,unm)
  {
    createXMLHttpRequest();
    XMLHttpR.open(method=="p"?"POST":"GET", url, false);//method等于"p"为post方法,其他为get方法
    XMLHttpR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    XMLHttpR.onreadystatechange =function(){eval(callback+"processResponse/(unm/)");}//通过eval创建一列处理函数
    XMLHttpR.send(data);
  }
 
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  POST 发数据 end XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX// 
 
 
//zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 获取个人信息 start zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz//
  function userinfoprocessResponse() //通过eval函数创建的。即eval("userinfo"+"processResponse/(unm/)");
  {
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
       txtOutput.value =XMLHttpR.responseText;
       transUserInfo(XMLHttpR.responseText);
    }
  }

  function getUserInfo()
  {
    var url = "http://happyfarm.qzone.qq.com/api.php?mod=user&act=run";
    var data = getkey();
    sendRequest("p",url, data,"userinfo");
  }

  function transUserInfo(myString)
  {
    var userinfo = eval('(' + myString + ')');   //用字符串myString创建JSON对象userinfo。
    //创建表格,利用innerHTML,注意,table的innerHTML属性是只读的,所以不能直接操作table的innerHTML,这里操作的是DIV的innerHTML。
    var str='<TR align=middle bgColor="#ffff66"><TD>'+userinfo.user.uId+'</TD><TD>'+userinfo.user.yellowlevel+'</TD><TD>'+userinfo.user.exp+'</TD><TD>'+userinfo.user.money+'</TD><TD>'+getLevel(userinfo.user.exp)[0]+'</TD><TD>'+((getLevel(userinfo.user.exp)[0]+1)*200-getLevel(userinfo.user.exp)[1])+"//"+(getLevel(userinfo.user.exp)[0]+1)*200+'</TD></TR>';
    document.getElementById('userinfoDiv').innerHTML='<TABLE border=1><TBODY id=userinfoTab><TR align=middle><TH>UID</TH><TH>黄钻等级</TH><TH>经验</TH><TH>金币</TH><TH>等级</TH><TH>升级</TH></TR>'  + str + '</TBODY></TABLE>';
   }
//zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 获取个人信息 end zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz//


//*************************************************** 等级计算 start *****************************************************************//
//9级以上的升级所需经验不对。具体计算方法不清楚。等级是都对的。
function getLevel(experience){
    var levelArray = new Array(2);
    levelArray[0] = 0;
    levelArray[1] = 0;
    for (var i = 1; i < 100; i++) {
        levelArray[0] += 200 + 200 * (i - 1);
        if (levelArray[0] > experience) {
            //取得升级所需经验
            levelArray[1] = levelArray[0] - experience;
            //取得当前级别
            levelArray[0] = i - 1;
            break;
        }
    }
    return levelArray;
};

//****************************************************** 等级计算 end ***************************************************************//


//----------------------------好友列表 start-------------------------------------------//
  function FriendListprocessResponse()
  {
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
      txtOutput.value =XMLHttpR.responseText;
      transFriend(XMLHttpR.responseText);
    }
  }

  function getFriendList()
  {
    var url = "http://happyfarm.qzone.qq.com/api.php?mod=friend";
    var data = getkey();
    sendRequest("p",url, data,"FriendList");
  }

  function transFriend(myString)
  {

    var friendinfo = new Array();
    friendinfo = eval('(' + myString + ')');
    var friendTitle = '<TR align=middle><TH>序号</TH><TH>ID</TH><TH>QQ</TH><TH>昵称</TH><TH>头像</TH><TH>黄钻</TH><TH>经验</TH><TH>金币</TH><TH>等级</TH><TH>升级</TH><TH>狗粮</TH><TH>选中</TH></TR>';
    //alert(friendinfo[0].userId);
   
    var str="";
    for (i = 0; i < friendinfo.length; i++)
    {
      //friendinfo[0].userId;
      str += '<TR align=middle><TD>' + i + '</TD><TD>' + friendinfo[i].userId + '</TD><TD>' + friendinfo[i].uin + '</TD><TD>' + friendinfo[i].userName+ '</TD><TD><IMG height=40  width=40 src=' + friendinfo[i].headPic + '></TD></TD><TD>' + friendinfo[i].yellowlevel + '</TD><TD>' + friendinfo[i].exp + '</TD><TD>' + friendinfo[i].money + '</TD><TD>'+ getLevel(friendinfo[i].exp)[0] +'</TD><TD>'+ ((getLevel(friendinfo[i].exp)[0]+1)*200-getLevel(friendinfo[i].exp)[1]*1)+'//'+(getLevel(friendinfo[i].exp)[0]+1)*200+'</TD><TD>?</TD><TD><input type="checkbox" id="friendinfo'+ i +'" checked></TD></TR>';
    }
    var userinfo='<TR align=middle bgColor="#ffff66"><TD>' + i + '</TD><TD>' + document.getElementById("userinfoTab").rows[1].cells[0].innerText + '</TD><TD>NULL</TD><TD>主人</TD><TD>NULL</TD><TD>' +  document.getElementById("userinfoTab").rows[1].cells[1].innerText + '</TD><TD>' +  document.getElementById("userinfoTab").rows[1].cells[2].innerText + '</TD><TD>' +  document.getElementById("userinfoTab").rows[1].cells[3].innerText + '</TD><TD>' +  document.getElementById("userinfoTab").rows[1].cells[4].innerText + '</TD><TD>' +  document.getElementById("userinfoTab").rows[1].cells[5].innerText + '</TD><TD>?</TD><TD><input type="checkbox" id="friendinfo'+ i +'" checked></TD></TR>';
    document.getElementById('friendListDiv').innerHTML = '<TABLE border=1><TBODY id=friendTab>' + friendTitle + str +userinfo+ '</TBODY></TABLE>';
  }


//-----------------------------好友列表 end-----------------------------------------------//

 

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 表格排序 start~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  function swap(array, i, j) //交换数组元素
  {
    var temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }
  function bubbleSort(array, tmparray,up) //冒泡法排序
  {
    up=(up=="up"?"<":">");
   // alert(up);
    for (var i = array.length - 1; i > 0; --i)
    {
      for (var j = 0; j < i; ++j)
      {
        eval("if /(array/[j/]"+up+"array/[j + 1/]/)/{/swap/(array/, j/, j + 1/)/;swap/(tmparray/, j/, j + 1/)/;/}");
        //这个地方可以用if判断up来做,用eval可读性不好,不过简洁。
        //其实就是up=="up"为if (array[j]<array[j + 1]){swap(array, j, j + 1);swap(tmparray, j, j + 1);}。
        //否则为if (array[j]>array[j + 1]){swap(array, j, j + 1);swap(tmparray, j, j + 1);}。
      }
    }
  }

  function paixu(tab1id,ncell,div2id,tab2id) //排序主体函数:要排序表格的ID为tab1id,按第ncell列排序,拍好后放到id为div2id的DIV中,表格的id叫tab2id。
  {
    var array = new Array();//要排序的数的数组。
    var tmparray = new Array();//要排序的数在原来表格中的标号,通过这个标号数组生成排序后的表格。
    //var tab = document.getElementById(tab1id).rows.length;//取得表格列数。
    for (var i = 1; i < document.getElementById(tab1id).rows.length; i++)
    {
      //var aa = document.getElementById(tab1id).rows[i].cells[ncell];
      array[i - 1] = document.getElementById(tab1id).rows[i].cells[ncell].innerText * 1;
      tmparray[i - 1] = i;
    }
    //alert(array);
    //alert(tmparray);
    //eval("array." + type + "Sort()");
    var up="down";
    if(document.getElementById(div2id+"ck").checked==true)//判断是升序排序还是降序排序。
    up="up";
    bubbleSort(array, tmparray,up); //用冒泡法进行排序。
    var title=document.getElementById(tab1id).rows[0].innerHTML;//取得原始表格的标题行。

    var str="";      
    for (i = 0; i < tmparray.length; i++) //通过排序后的标号生成排序后的表格。
    {
      var j = tmparray[i];
      var tmp = "";
      for (k = 1; k < document.getElementById(tab1id).rows[0].cells.length; k++)
      {
        tmp += '<TD>' + document.getElementById(tab1id).rows[j].cells[k].innerHTML + '</TD>';
      }
      tmp='<TR align=middle><TD>'+i+'</TD>'+tmp+'</TR>';
      str+=tmp;
    }
    document.getElementById(div2id).innerHTML = '<TABLE border=1><TBODY id='+tab2id+'>' + title + str + '</TR></TBODY></TABLE>';
    paixuOutput.value = tmparray.join(" "); //用空格间隔连接数组为字符串
  }

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 表格排序 end~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//


//====================================种子信息 start==============================================//
var hideseed=[
//隐藏作物:种子编号,种子名称,成熟时间(秒),几季作物,预计收入,预计产量,售价,种子价格,等级,经验/季 。
16,"神秘种子",126000,2,0,0,0,0,0,0,
25,"神秘种子",208800,3,0,0,0,0,0,0,
28,"神秘种子",180000,4,0,0,0,0,0,0,
30,"神秘种子",205200,4,0,0,0,0,0,0,
32,"神秘种子",234000,4,0,0,0,0,0,0,
21,"红薯",93600,2,0,0,0,0,0,0,
24,"黄瓜",198000,3,0,0,0,0,0,0,
36,"奇异果",291600,4,0,0,0,0,0,0,
46,"爱心果",111600,3,0,0,0,0,0,0,
101,"薰衣草",219600,3,0,0,0,0,0,0,
102,"马蹄莲",230400,3,0,0,0,0,0,0,
103,"天香百合",72000,1,0,0,0,0,0,0,
104,"非洲菊",75600,2,0,0,0,0,0,0,
105,"小雏菊",61200,1,0,0,0,0,0,0,
54,"梨",115200,4,0,0,0,0,0,0,
53,"桂圆",111600,5,0,0,0,0,0,0,
55,"枇杷",151200,4,0,0,0,0,0,0,
56,"哈密瓜",111600,5,0,0,0,0,0,0,
57,"芒果",111600,5,0,0,0,0,0,0,
58,"榴莲",111600,5,0,0,0,0,0,0,
64,"大葱",39600,1,0,0,0,0,0,0,
66,"鲜姜",39600,1,0,0,0,0,0,0,
71,"小白菜",39600,1,0,0,0,0,0,0,
71,"小白菜",39600,1,0,0,0,0,0,0,
73,"菠菜",61200,1,0,0,0,0,0,0,
70,"黄豆",100800,2,0,0,0,0,0,0,
72,"榛子",165600,3,0,0,0,0,0,0,
69,"莴笋",198000,4,0,0,0,0,0,0,
63,"苦瓜",252000,4,0,0,0,0,0,0,
68,"冬瓜",259200,4,0,0,0,0,0,0,
67,"香瓜",277200,4,0,0,0,0,0,0,
80,"月柿",111600,5,0,0,0,0,0,0,
80,"月柿",111600,5,0,0,0,0,0,0,
75,"桑葚",111600,5,0,0,0,0,0,0,
78,"杏子",111600,5,0,0,0,0,0,0,
75,"金桔",111600,5,0,0,0,0,0,0,
79,"番石榴",111600,5,0,0,0,0,0,0,
77,"蓝莓",111600,5,0,0,0,0,0,0,
76,"山竹",111600,5,0,0,0,0,0,0,
120,"蒲公英",57600,1,0,0,0,0,0,0,
120,"蒲公英",57600,1,0,0,0,0,0,0,
110,"满天星",79200,1,0,0,0,0,0,0,
111,"粉玫瑰",100800,2,0,0,0,0,0,0,
122,"丁香花",111600,2,0,0,0,0,0,0,
112,"风信子",111600,2,0,0,0,0,0,0,
118,"水仙花",111600,2,0,0,0,0,0,0,
113,"枙子花",133200,3,0,0,0,0,0,0,
106,"郁金香",187200,3,0,0,0,0,0,0,
109,"蝴蝶兰",230400,3,0,0,0,0,0,0,
114,"蓝玫瑰",151200,4,0,0,0,0,0,0,
107,"仙人掌",115200,4,0,0,0,0,0,0,
115,"兰花",151200,4,0,0,0,0,0,0,
108,"铃兰",115200,4,0,0,0,0,0,0,
123,"海棠花",277200,4,0,0,0,0,0,0,
0,"空地",0,0,0,0,0,0,0,0
];
//alert(hideseed[1]);
function seedinfoprocessResponse()
{
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
        txtOutput.value =XMLHttpR.responseText;
        transSeedInfo(XMLHttpR.responseText);
    }
}

function getSeedInfo()
{
 var url="http://happyfarm.qzone.qq.com/api.php?mod=repertory&act=getSeedInfo"; 
 var data=getkey(); 
 sendRequest("g",url,data,"seedinfo"); 
}


function transSeedInfo(myString)

 var str=""; 
 var seedinfo=eval('(' + myString + ')');
 var seedTitle='<TH>序号</TH><TH>ID</TH><TH>名字</TH><TH>成熟时间</TH><TH>季</TH><TH>预计收入</TH><TH>预计产量</TH><TH>售价</TH><TH>种子价格</TH><TH>等级</TH><TH>经验/季</TH>';
 //alert(friendinfo[0].userId);
  var i=0,k=0;
 for(i=0;i<seedinfo.length;i++)//生成普通种子列表。
 {
  str +='<TR align=middle><TD>'+i+'</TD><TD>'+seedinfo[i].cId+'</TD><TD>'+seedinfo[i].cName+'</TD><TD>'+seedinfo[i].growthCycle/3600+'</TD><TD>'+seedinfo[i].maturingTime+'</TD><TD>'+seedinfo[i].expect+'</TD><TD>'+seedinfo[i].output+'</TD><TD>'+seedinfo[i].sale+'</TD><TD>'+seedinfo[i].price+'</TD><TD>'+seedinfo[i].cLevel+'</TD><TD>'+seedinfo[i].cropExp+'</TD></TR>'  
 } 

 for(k=0;k<hideseed.length;k++)//添加隐藏种子列表。
 {
    if(k%10==0) str+='<TR align=middle><TD>'+(k/10+seedinfo.length)+'</TD>';
   
    if(k%10==2) str+='<TD>'+hideseed[k]/3600+'</TD>';
    else str+='<TD>'+hideseed[k]+'</TD>';
   
    if(k%10==9) str+='</TR>';
 }

 document.getElementById('seedinfoDiv').innerHTML='<TABLE border=1><TBODY id=seedtable>'+ seedTitle + str +'</TBODY></TABLE>'; 
}


//=====================================种子信息 end ==================================================//

 

//******************************************种子成熟时间索引表 start********************************************************//
var seedarray=new Array();
function seedlinkTab()//通过种子编号cid来取得种子成熟时间。
{
//array["a"]="saf";
//array["b"]="dfdff";
//alert(array["a"]);
    for (var i = 1; i < document.getElementById("seedtable").rows.length; i++)
    {
      var aa = document.getElementById("seedtable").rows[i].cells[1].innerText;
      var bb = document.getElementById("seedtable").rows[i].cells[3].innerText;
      seedarray[aa]=bb;
    }
    alert(seedarray["45"]);//输出种子编号为“45”的成熟时间,即猕猴桃的成熟时间为46小时。
}
//******************************************种子成熟时间索引表 end********************************************************//

 

//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 时间转换  start!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
function toUnixTime(time)//将格式为“1260443404”的时间转换为格式为“ 2009年12月10日星期四 19:10:04 ”的时间。
{
  var datum = new Date(time * 1000);
  datum = new Date(datum.getTime());
  return datum.toLocaleString();
};

function transTime(seedTime)//将秒数换算成“时:分:秒”格式。
{
  var ss=seedTime%60;
  var mm=parseInt(seedTime/60%60);
  var hh=parseInt(seedTime/60/60);
  var aa=hh+":"+mm+":"+ss;
  return aa;
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 时间转换  end!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//

 

//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^获取所有好友农场信息 start^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//
var uid="";//暂存好友的代号。
var num=0;//所有好友的土地信息的序号。
var str="";//暂存所有土地信息的表格代码。
var nnuser=0;//正在操作的好友在好友列表中的序号。
function farmAllInfoprocessResponse()
{
   if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
   {
     txtOutput.value =XMLHttpR.responseText;
     makefarmAllInfoTab(XMLHttpR.responseText,uid);
   }
}
function getfarmAllInfo(ownerId)//获得代号为ownerId的好友的土地信息。
{
    uid=ownerId;
    var url="http://nc.qzone.qq.com/cgi-bin/cgi_farm_index?mod=user&act=run&ownerId="+ownerId;//不是qq是uid
    sendRequest("g",url,"","farmAllInfo"); 
}


function makefarmAllInfoTab(myString,uid)//通过活动的好友土地信息进行分析并生成表格。
{
 var farmAllInfo=eval('(' + myString + ')');
  var dog="~";//无狗
  if(farmAllInfo.dog==null) ;// alert("无狗");
  else
  {
    dog=farmAllInfo.dog.isHungry==0?"●":"○";//"不饿":"饿//无";
    //alert(dog);
  }
  document.getElementById("friendTab").rows[nnuser+1].cells[10].innerText=dog;
  for(j=0;j<farmAllInfo.farmlandStatus.length;j++)
  {
    str+='<TR align=middle><TD>'+(num+j)+'</TD><TD>'+uid+'</TD><TD>'+dog+'</TD><TD>'+j+'</TD><TD>'+farmAllInfo.farmlandStatus[j].a+'</TD><TD>'+farmAllInfo.farmlandStatus[j].b+'</TD><TD>'+farmAllInfo.farmlandStatus[j].f+'</TD><TD>'+farmAllInfo.farmlandStatus[j].g+'</TD><TD>'+farmAllInfo.farmlandStatus[j].h+'</TD><TD>'+farmAllInfo.farmlandStatus[j].j+'</TD><TD>'+farmAllInfo.farmlandStatus[j].k+'</TD><TD>'+farmAllInfo.farmlandStatus[j].l+'</TD><TD>'+farmAllInfo.farmlandStatus[j].m+'</TD><TD>'+farmAllInfo.farmlandStatus[j].o+'</TD><TD>'+farmAllInfo.farmlandStatus[j].q+'</TD><TD>'+(farmAllInfo.farmlandStatus[j].q*1+seedarray[farmAllInfo.farmlandStatus[j].a]*3600)+'</TD><TD>'+toUnixTime(farmAllInfo.farmlandStatus[j].q*1+seedarray[farmAllInfo.farmlandStatus[j].a]*3600)+'</TD><TD>n</TD><TD>n</TD></TR>';
  }
  num+=j;
}

function getFriendfarmAllInfo(ownerId)
{
  getfarmAllInfo(ownerId);//获得代号为ownerId的好友的土地信息。
  var farminfotitle='<TR align=middle><TH>序号</TH><TH>主人uId</TH><TH>狗粮</TH><TH>土地标号</TH><TH>种子编号</TH><TH>土地状态</TH><TH>草</TH><TH>虫</TH><TH>水</TH><TH>采摘次数</TH><TH>产量</TH><TH>最少剩余</TH><TH>当前剩余</TH><TH>施肥</TH><TH>种植时间</TH><TH>成熟时间</TH><TH>成熟时间(转化后)</TH><TH>操作状态</TH><TH>收获或失败原因</TH></TR>';
  document.getElementById('farmAllInfoDiv').innerHTML ='<TABLE border=1><TBODY id=farmAllInfoTab>'+farminfotitle+str+'</TBODY></TABLE>';
  str="";//清空暂存所有土地信息的表格代码的变量,为了释放内存(不知道管不管用)。
  num=0;
}

function getAllFriendfarmAllInfo()//从好友列表依次读取好友编号,通过循环获得所有好友的土地信息。
{
    tab1id="friendTab";
    for (var i = 1; i < document.getElementById(tab1id).rows.length; i++)
    {
      var ownerId = document.getElementById(tab1id).rows[i].cells[1].innerText * 1;
      eval("if/(friendinfo"+ (i-1)+".checked==true/)getfarmAllInfo/(ownerId/)/;");//判断该好友是否选中,选中则获取他土地的详细信息,不选中则不获取。
      //好友列表的checkbox是用代码生成的,id为friendinfo1、friendinfo2、……
     
      //if(friendinfo3.checked==true) getfarmAllInfo(ownerId);
      nnuser=i;
    }
  var farminfotitle='<TR align=middle><TH>序号</TH><TH>主人uId</TH><TH>狗粮</TH><TH>土地标号</TH><TH>种子编号</TH><TH>土地状态</TH><TH>草</TH><TH>虫</TH><TH>水</TH><TH>采摘次数</TH><TH>产量</TH><TH>最少剩余</TH><TH>当前剩余</TH><TH>施肥</TH><TH>种植时间</TH><TH>成熟时间</TH><TH>成熟时间(转化后)</TH><TH>操作状态</TH><TH>收获或失败原因</TH></TR>';
   document.getElementById('farmAllInfoDiv').innerHTML ='<TABLE border=1><TBODY id=farmAllInfoTab>'+farminfotitle+str+'</TBODY></TABLE>';
   str="";//清空暂存所有土地信息的表格代码的变量,为了释放内存(不知道管不管用)。
   num=0;
   nnuser=0;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^获取所有好友农场信息 end^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//

 

 


//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 获取消息、留言、成果信息(可以查qq号) start $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$//
  function resultprocessResponse()
  {
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
       txtOutput.value =XMLHttpR.responseText;
       transResultInfo(XMLHttpR.responseText);
    }

  }

  function getResultInfo(uid)
  {
    var url="http://happyfarm.qzone.qq.com/api.php?mod=chat&act=getAllInfo";
    var data="uId="+uid+getkey();
    sendRequest("p",url, data,"result");
  }
   
function transResultInfo(myString)
{
  var ResultInfo=eval('(' + myString + ')');

  var str=""; 
  str+='<TABLE border=1><TBODY id=resultUsrTab><TR align=middle><TH colSpan=6 bgColor="#666666">用户信息</TH></TR><TR align=middle><TH>用户ID</TH><TH>等级</TH><TH>总经验</TH><TH>金币</TH><TH>主页</TH><TH>QQ</TH></TR><TR align=middle><TD>'+ResultInfo.user.uId+'</TD><TD>'+ResultInfo.user.uLevel+'</TD><TD>'+ResultInfo.user.uExp+'</TD><TD>'+ResultInfo.user.money+'</TD><TD><a target="_blank" tabindex="8" href="'+ResultInfo.user.homePage+'" id="label_forget_pwd">QQ空间</a></TD><TD>'+ResultInfo.user.homePage.split("user.qzone.qq.com//")[1]+'</TD></TR></TBODY></TABLE>';
 
 
  str+='</TBODY></TABLE><TABLE border=1><TBODY id=resultMsgTab><TR align=middle><TH colSpan=4 bgColor="#666666">消息列表</TH></TR><TR align=middle><TH>时间</TH><TH>UID</TH><TH>QQ</TH><TH>消息</TH></TR>';
 
  for(j=0;j<ResultInfo.log.length;j++)
  {
    str+='<TR><TD>'+toUnixTime(ResultInfo.log[j].time)+'</TD><TD>'+(ResultInfo.log[j].uid==null?"*":ResultInfo.log[j].uid)+'</TD><TD>'+(ResultInfo.log[j].uin==null?"*":ResultInfo.log[j].uin)+'</TD><TD>'+ResultInfo.log[j].msg+'</TD></TR>';
  }
 
  str+='</TBODY></TABLE><TABLE border=1><TBODY id=resultChatTab><TR align=middle><TH colSpan=4 bgColor="#666666">留言列表</TH></TR><TR align=middle><TH>时间</TH><TH>UID</TH><TH>昵称</TH><TH>留言</TH></TR>'; 
  for(j=0;j<ResultInfo.chat.length;j++)
  {
    str+='<TR><TD>'+toUnixTime(ResultInfo.chat[j].time)+'</TD><TD>'+ResultInfo.chat[j].fromId+'</TD><TD>'+ResultInfo.chat[j].fromName+'</TD><TD>'+ResultInfo.chat[j].msg+'</TD></TR>';
  }
 
  str+='</TBODY></TABLE><TABLE border=1><TBODY id=resultRstTab><TR align=middle><TH  colSpan=6 bgColor="#666666">成果列表</TH></TR><TR align=middle><TH>种子编号</TH><TH>名称</TH><TH>收获</TH><TH>偷取</TH></TR>'; 
  for(j=0;j<ResultInfo.repertory.length;j++)
  {
    str+='<TR align=right><TD>'+ResultInfo.repertory[j].cId+'</TD><TD>'+ResultInfo.repertory[j].cName+'</TD><TD>'+ResultInfo.repertory[j].harvestNumber+'</TD><TD>'+ResultInfo.repertory[j].scroungeNumber+'</TD></TR>';
  }
  document.getElementById('resultDiv').innerHTML =str+'</TBODY></TABLE>';
  str="";

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 获取消息、留言、成果信息(可以查qq号) end $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$//

 

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$-----------------------------偷菜 start--------------------------------$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$//
function stealprocessResponse(num)
{
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
        txtOutput.value =XMLHttpR.responseText;
        getStealResult(XMLHttpR.responseText,num);
    }
}
///*
stealuid=295734703;//当前正在偷的用户代号
stealplace=4;//土地标号,从0开始
stealtime=0;//成熟时间
//retrytimes=20;//重试次数
nextstealtime=50;//重试间隔时间(毫秒)
bftime=500;//提前时间(毫秒)
var stealtimer;
var stealnum=1;
function gogo()
{
  var abcd=window.setInterval("refresh()",1000);
  var bcde=window.setInterval("getStealAll()",300);
}
var faild=1;
//*/
function getStealAll()
{
  stealuid = document.getElementById("farmAllInfoTab2").rows[stealnum].cells[1].innerText*1;//农场主人编号,不是QQ
  stealplace = document.getElementById("farmAllInfoTab2").rows[stealnum].cells[3].innerText*1;//土地标号,从0开始
  stealtime = document.getElementById("farmAllInfoTab2").rows[stealnum].cells[15].innerText*1;//成熟时间
  //stealtimer=window.setInterval("getUsrSteal(stealuid,stealplace)",nextstealtime);
  //alert(stealuid);
  //alert(stealplace);
  //alert(stealtime);
 
  document.getElementById("farmAllInfoTab2").rows[stealnum].cells[17].innerHTML='<TD><FONT style="BACKGROUND-COLOR: #00ff00" color=#0000cc>进行</FONT></TD>';

  var outputs=document.getElementById("farmAllInfoTab2").rows[stealnum].cells[10].innerText*1;//产量
  var minleft=document.getElementById("farmAllInfoTab2").rows[stealnum].cells[11].innerText*1;//最小剩余量
  var nowleft=document.getElementById("farmAllInfoTab2").rows[stealnum].cells[12].innerText*1;//当前剩余量
 
  var c = new Date();
  var nowTime = Math.floor(c.getTime()/1000);
    if(nowTime*1000+bftime>stealtime*1000)//提前500ms处理
    {
      if(minleft<nowleft)//(最小剩余量<当前剩余量)-----成熟并且可以偷(排除了没成熟或所剩无几的)。
      {
        eval("iiii"+stealnum+"=window.setInterval/(function/(/)/{getUsrSteal/(stealuid/,stealplace/,"+stealnum+"/)/;/}/,"+nextstealtime+"/)/;");
        stealnum++;
      }
      else if(minleft==nowleft)//所剩无几的
      {
        document.getElementById("farmAllInfoTab2").rows[stealnum].cells[17].innerText="结束";
        document.getElementById("farmAllInfoTab2").rows[stealnum].cells[18].innerText="~";
        stealnum++;
      }
    } 
  
}

function getSteal()
{
  getUsrSteal(stealuid,stealplace);
}
//*/

function getUsrSteal(stealuid,stealplace,num)
{
 var userid=document.getElementById("userinfoTab").rows[1].cells[0].innerText
 //alert(stealuid+(stealuid==userid?"harvest":"scrounge"));
  var url="http://nc.qzone.qq.com/cgi-bin/cgi_farm_steal?mod=farmlandstatus&act=scrounge"; 
 if(stealuid==userid)
 {
    var url="http://happyfarm.qzone.qq.com/api.php?mod=farmlandstatus&act=harvest";
 }

 //alert(url);
 var data="place="+stealplace+"&ownerId="+stealuid+getkey(); 
 //alert(data);
 sendRequest("p",url,data,"steal",num);
 //stealnum++; 
}

function getStealResult(myString,num)
{
    var StealResult=eval('(' + myString + ')');
    if(StealResult.code==1)
    {
    //alert("成功");
    eval("clearInterval/(iiii"+num+"/)/;");

    var r2=StealResult.status.harvest;
    //alert(r2);
    document.getElementById("farmAllInfoTab2").rows[stealnum-1].cells[18].innerText="成功"+r2;
    document.getElementById("farmAllInfoTab2").rows[stealnum-1].cells[17].innerText="结束";
    //alert("偷了"+r2+"个");//偷的数量
    }
   
    if(StealResult.code==0)
    {
      //alert("失败");
      document.getElementById("farmAllInfoTab2").rows[stealnum-1].cells[18].innerText=StealResult.direction;
      //alert("失败原因:"+StealResult.direction);//失败原因:--做人不能贪得无厌!---获取农田信息失败--这块地没东西可摘的!--
      if(StealResult.direction=="获取农田信息失败")
      {
        //alert("失败重试");
      }
      else
      {
        if(StealResult.direction=="做人不能贪得无厌!"|StealResult.direction=="这块地没东西可摘的!")
        {
        //alert("失败退出");
          eval("clearInterval/(iiii"+num+"/)/;");
          document.getElementById("farmAllInfoTab2").rows[stealnum-1].cells[17].innerText="结束";
        }
      }
    }
}

function refresh()
{
  var c = new Date();
  var nowTime = Math.floor(c.getTime() / 1000);
  for(j=0;j<10;j++)
  {
    document.getElementById("farmAllInfoTab2").rows[j+stealnum].cells[17].innerText=transTime(document.getElementById("farmAllInfoTab2").rows[j+stealnum].cells[15].innerText-nowTime);
  }
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$------------------------------偷菜 end-----------------------------$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$//

//ttttttttttttttttttttttttttttttttttttttttttttttt  铲除 start tttttttttttttttttttttttttttttttttttttttttttttttttttttttt//
function scarifyprocessResponse()
{
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
        txtOutput.value =XMLHttpR.responseText;
    }
}

function getScarify(scarifyplace)
{
 var userid=document.getElementById("userinfoTab").rows[1].cells[0].innerText
  var url="http://happyfarm.qzone.qq.com/api.php?mod=farmlandstatus&act=scarify"; 
 var data="place="+scarifyplace+"&ownerId="+userid+getkey(); 
 //alert(data);
 sendRequest("p",url,data,"scarify");
}


//ttttttttttttttttttttttttttttttttttttttttttttttt  铲除 end tttttttttttttttttttttttttttttttttttttttttttttttttttttttt//

 

//eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 播种 start eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee//

function plantprocessResponse()
{
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
        txtOutput.value =XMLHttpR.responseText;
    }
}

function getPlanting(plantplace,seedcid)
{
  var url="http://happyfarm.qzone.qq.com/api.php?mod=farmlandstatus&act=planting"; 
 var data="place="+plantplace+"&cId="+seedcid+getkey(); 
 //alert(data);
 sendRequest("p",url,data,"plant");
}
//eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 播种 end eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee//

 

//nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 买种子 start nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn//

function buySeedprocessResponse()
{
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
        txtOutput.value =XMLHttpR.responseText;
    }
}

function getbuySeed(buyseedcid,buyseednum)
{
  var url="http://happyfarm.qzone.qq.com/api.php?mod=repertory&act=buySeed"; 
 var data="cId="+buyseedcid+"&number="+buyseednum+getkey(); 
 //alert(data);
 sendRequest("p",url,data,"buySeed");
}
//nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 买 种子 end nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn//


//dddddddddddddddddddddddddddddddddddddddddddd 卖出 start dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd//

function saleprocessResponse()
{
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
        txtOutput.value =XMLHttpR.responseText;
    }
}

function getsale(salecId,salenumber)
{
  var url="http://happyfarm.qzone.qq.com/api.php?mod=repertory&act=sale"; 
 var data="cId="+salecId+"&number="+salenumber+getkey(); 
 //alert(data);
 sendRequest("p",url,data,"sale");
}
//dddddddddddddddddddddddddddddddddddddddddddd 卖出 end dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd//


//wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww 锄草 start wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww//

function clearWeedprocessResponse()
{
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
        txtOutput.value =XMLHttpR.responseText;
    }
}

function getclearWeed(weedownerId,weedplace)
{
  var url="http://nc.qzone.qq.com/cgi-bin/cgi_farm_opt?mod=farmlandstatus&act=clearWeed"; 
 var data="ownerId="+weedownerId+"&place="+weedplace+getkey(); 
 //alert(data);
 sendRequest("p",url,data,"clearWeed");
}
//wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww 锄草 end wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww//


//oooooooooooooooooooooooooooooooooooooooooooooo 杀虫 start oooooooooooooooooooooooooooooooooooooooo//
function sprayingprocessResponse()
{
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
        txtOutput.value =XMLHttpR.responseText;
    }
}

function getspraying(sprayownerId,sprayplace)
{
  var url="http://nc.qzone.qq.com/cgi-bin/cgi_farm_opt?mod=farmlandstatus&act=spraying";
 var data="ownerId="+sprayownerId+"&place="+sprayplace+getkey(); 
 //alert(data);
 sendRequest("p",url,data,"spraying");
}
//oooooooooooooooooooooooooooooooooooooooooooooo 杀虫 end oooooooooooooooooooooooooooooooooooooooo//

 


//pppppppppppppppppppppppppppppppppppppppppppp 浇水 start pppppppppppppppppppppppppppppppppp//
function waterprocessResponse()
{
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
        txtOutput.value =XMLHttpR.responseText;
    }
}

function getwater(waterownerId,waterplace)
{
  var url="http://nc.qzone.qq.com/cgi-bin/cgi_farm_opt?mod=farmlandstatus&act=water";
 var data="ownerId="+waterownerId+"&place="+waterplace+getkey(); 
 //alert(data);
 sendRequest("p",url,data,"water");
}
//pppppppppppppppppppppppppppppppppppppppppppp 浇水 end pppppppppppppppppppppppppppppppppp//

 

//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 种杂草 start aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa//
function scatterprocessResponse()
{
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
        txtOutput.value =XMLHttpR.responseText;
    }
}

function getscatterSeed(scatterownerId,scatterplace)
{
  var url="http://nc.qzone.qq.com/cgi-bin/cgi_farm_opt?mod=farmlandstatus&act=scatterSeed";
 var data="ownerId="+scatterownerId+"&place="+scatterplace+getkey(); 
 //alert(data);
 sendRequest("p",url,data,"scatter");
}

//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 种杂草 end aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa//


//vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 放虫子 start vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv//
function pestprocessResponse()
{
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
        txtOutput.value =XMLHttpR.responseText;
    }
}

function getpest(pestownerId,pestplace)
{
  var url="http://nc.qzone.qq.com/cgi-bin/cgi_farm_opt?mod=farmlandstatus&act=pest";
 var data="ownerId="+pestownerId+"&place="+pestplace+getkey(); 
 //alert(data);
 sendRequest("p",url,data,"pest");
}

//vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 放虫子 end vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv//

 


//lllllllllllllllllllllllllllllllllllllllllllllll  新手任务 start lllllllllllllllllllllllllllllllllllllllllllll//
function taskprocessResponse()
{
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
        txtOutput.value =XMLHttpR.responseText;
    }
}

function gettaskaccept()
{
  var url="http://happyfarm.qzone.qq.com/api.php?mod=task&act=accept"; 
 var data=getkey(); 
 sendRequest("p",url,data,"clearWeed");
}

function gettaskupdate()
{
  var url="http://happyfarm.qzone.qq.com/api.php?mod=task&act=update"; 
 var data=getkey(); 
 sendRequest("p",url,data,"clearWeed");
}

//lllllllllllllllllllllllllllllllllllllllllllllll  新手任务 start lllllllllllllllllllllllllllllllllllllllllllll//

 


//sssssssssssssssssssssssssssssssssssssssssssssssss 获取仓库信息 start sssssssssssssssssssssssssssssssssssssssssssssssssssssssss//
function UserCropprocessResponse()
{
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
        txtOutput.value =XMLHttpR.responseText;
        transUserCrop(XMLHttpR.responseText);
    }
}
function getUserCrop()
{
  var url="http://happyfarm.qzone.qq.com/api.php?mod=repertory&act=getUserCrop"; 
 var data=getkey(); 
 sendRequest("p",url,data,"UserCrop");
}
function transUserCrop(myString)
{
  var UserCropInfo=eval('(' + myString + ')');
  var str="";
  var totalmoney=0;
  var totalnum=0;
  for(j=0;j<UserCropInfo.length;j++)
  {
  str+='<TR align=middle><TD>'+j+'</TD><TD>'+UserCropInfo[j].cId+'</TD><TD>'+UserCropInfo[j].cName+'</TD><TD>'+UserCropInfo[j].price+'</TD><TD>'+UserCropInfo[j].amount+'</TD><TD>'+(UserCropInfo[j].price*UserCropInfo[j].amount)+'</TD></TR>';
  totalnum+=UserCropInfo[j].amount;
  totalmoney+=UserCropInfo[j].price*UserCropInfo[j].amount;
  }
  str+='<TR align=middle><TD colSpan=4>总计</TD><TD>'+totalnum+'</TD><TD>'+totalmoney+'</TD></TR>';
  document.getElementById('usercropDiv').innerHTML='<TABLE border=1><TBODY id=usercropTab><TR align=middle><TH>序号</TH><TH>种子编号</TH><TH>名称</TH><TH>单价</TH><TH>数量</TH><TH>总价</TH></TR>'  + str + '</TBODY></TABLE>';

}
//ssssssssssssssssssssssssssssssssssssssssssssssssss 获取仓库信息 end sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss//


//YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY  获取已有种子、化肥 start YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY//
function UserSeedprocessResponse()
{
    if (XMLHttpR.readyState == 4 && XMLHttpR.status == 200)
    {
        txtOutput.value =XMLHttpR.responseText;
        transUserSeed(XMLHttpR.responseText);
    }
}
function getUserSeed()
{
  var url="http://happyfarm.qzone.qq.com/api.php?mod=repertory&act=getUserSeed"; 
 var data=getkey(); 
 sendRequest("p",url,data,"UserSeed");
}
function transUserSeed(myString)
{
  var UserSeedInfo=eval('(' + myString + ')');
  var str="";
  var str2="";

  for(j=0;j<UserSeedInfo.length;j++)
  {
    if(UserSeedInfo[j].type==1)
    {
    str+='<TR align=middle><TD>'+j+'</TD><TD>'+UserSeedInfo[j].cId+'</TD><TD>'+UserSeedInfo[j].cName+'</TD><TD>'+UserSeedInfo[j].amount+'</TD><TD>'+UserSeedInfo[j].lifecycle+'</TD><TD>'+UserSeedInfo[j].level+'</TD></TR>';
    }
    else if(UserSeedInfo[j].type==3)
    {
    str2+='<TR align=middle><TD>'+j+'</TD><TD>'+UserSeedInfo[j].tId+'</TD><TD>'+UserSeedInfo[j].tName+'</TD><TD>'+UserSeedInfo[j].amount+'</TD><TD>'+UserSeedInfo[j].depict+'</TD></TR>';
    }
   }

  document.getElementById('userseedDiv').innerHTML='<TABLE border=1><TBODY id=userseedTab><TR align=middle><TH>序号</TH><TH>种子编号</TH><TH>名称</TH><TH>数量</TH><TH>成熟时间</TH><TH>等级</TH></TR>'  + str + '</TBODY></TABLE>'+'<TABLE border=1><TBODY id=userhfTab><TR align=middle><TH>序号</TH><TH>编号</TH><TH>名称</TH><TH>数量</TH><TH>描述</TH></TR>'  + str2 + '</TBODY></TABLE>';

}

//YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 获取已有种子、化肥 end YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY//

 

 

//++++++++++++++++++++++++++++++++++++++++++++++++ 初始化 start +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
  function init()
  {
    getUserInfo();//获取个人信息
    getFriendList();//获取好友列表
    getSeedInfo();//获取种子信息列表
    seedlinkTab();//生成种子成熟时间索引表
    getAllFriendfarmAllInfo();//获取所有好友种子种植信息列表
    paixu("farmAllInfoTab","15","farmAllInfoDiv2","farmAllInfoTab2");//所有好友种子种植信息列表按成熟时间排序
  }

//++++++++++++++++++++++++++++++++++++++++++++++++ 初始化 end +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

 


  function getTabValue(tabName, row, cell) //取表格内容测试
  {
    s = document.getElementById(tabName).rows[row].cells[cell];
    alert(s.innerText);
    return s;
  }
 
 
 
</script>
 
 

<a target="_blank" tabindex="8" href="http://qzone.qq.com" id="label_forget_pwd">登录</a>
(必须首先透过空间登录农场才可以使用此外挂!)
<br>
<br>
<input type="button" value="初始化" onClick='init()'>
(获取个人信息、获取好友列表、获取种子信息列表、生成种子成熟时间索引表、获取所有好友种子种植信息列表、所有好友种子种植信息列表按成熟时间排序)
<br>
<br>
 
 
<input type="button" value="获取个人信息" onClick="getUserInfo()">
<div id="userinfoDiv">
<TABLE border=1 >
<TBODY id=userinfoTab>
</TBODY>
</TABLE>
</div>
<br>
 
 
<input type="button" value="获取仓库信息" onClick="getUserCrop()">
(需要“获取个人信息”)
<div id="usercropDiv">
<TABLE border=1 >
<TBODY id=usercropTab>
</TBODY>
</TABLE>
</div>
<br>

<input type="button" value="获取已购买种子、化肥" onClick="getUserSeed()">
(需要“获取个人信息”)
<div id="userseedDiv">
<TABLE border=1 >
<TBODY id=userseedTab>
</TBODY>
</TABLE>
</div>
<br>

 

<input type="button" value="获取好友列表" onClick="getFriendList()">
(需要“获取个人信息”)
<input type="button" value="取值" onClick='getTabValue("friendTab",1,1)'>
(测试表格取值用的)
<div id="friendListDiv">
  <TABLE border=1>
    <TBODY id=friendTab>
    </TBODY>
  </TABLE>
</div>


<br>
排序<br>
<button οnclick='paixu("friendTab","1","friendListDiv2","friendTab2");'>按ID</button>
<button οnclick='paixu("friendTab","2","friendListDiv2","friendTab2");'>按QQ</button>
<button οnclick='paixu("friendTab","5","friendListDiv2","friendTab2");'>按黄钻等级</button>
<button οnclick='paixu("friendTab","6","friendListDiv2","friendTab2");'>按经验</button>
<button οnclick='paixu("friendTab","7","friendListDiv2","friendTab2");'>按金币</button>
<input type="checkbox" id=friendListDiv2ck checked>升序
<div id="friendListDiv2">
<TABLE border=1>
<TBODY id=friendTab2>
</TBODY>
</TABLE>
</div>

 

 


<br>
<br>
<input type="button" value="获取种子信息列表" onClick="getSeedInfo()"> 
<div id="seedinfoDiv">
<TABLE border=1 >
<TBODY id=seedtable>
</TBODY>
</TABLE>
</div>


排序<br>
<button οnclick='paixu("seedtable","1","seedinfoDiv2","seedtable2");'>按ID</button>
<button οnclick='paixu("seedtable","3","seedinfoDiv2","seedtable2");'>按成熟时间</button>
<button οnclick='paixu("seedtable","4","seedinfoDiv2","seedtable2");'>按季</button>
<button οnclick='paixu("seedtable","5","seedinfoDiv2","seedtable2");'>按预计收入</button>
<button οnclick='paixu("seedtable","6","seedinfoDiv2","seedtable2");'>按预计产量</button>
<button οnclick='paixu("seedtable","7","seedinfoDiv2","seedtable2");'>按售价</button>
<button οnclick='paixu("seedtable","8","seedinfoDiv2","seedtable2");'>按种子价格</button>
<button οnclick='paixu("seedtable","9","seedinfoDiv2","seedtable2");'>按等级</button>
<button οnclick='paixu("seedtable","10","seedinfoDiv2","seedtable2");'>按经验/季</button>
<input type="checkbox" id=seedinfoDiv2ck >升序
<div id="seedinfoDiv2">
  <TABLE border=1><TBODY id=seedtable2></TBODY></TABLE>
</div>


<br>
<br>
<button οnclick='seedlinkTab()'>生成种子成熟时间索引表</button>
(需要"获取种子信息列表")
<br>
UID<input id="seeduid" value=""/>
<input type="button" value="获取种子种植信息列表" onClick='getFriendfarmAllInfo(seeduid.value)'> <br>
<input type="button" value="获取所有好友种子种植信息列表" onClick='getAllFriendfarmAllInfo()'>
(需要“获取个人信息”、“获取好友列表”、“获取种子信息列表”、“生成种子成熟时间索引表”、“获取种子信息列表”)
<div id="farmAllInfoDiv">
<TABLE border=1 >
<TBODY id=farmAllInfoTab>
</TBODY></TABLE>
</div>

<br>
排序<br>
<button οnclick='paixu("farmAllInfoTab","15","farmAllInfoDiv2","farmAllInfoTab2");'>按成熟时间</button>
<input type="checkbox" id=farmAllInfoDiv2ck >升序
<div id="farmAllInfoDiv2">
<TABLE border=1 >
<TBODY id=farmAllInfoTab2>
</TBODY></TABLE>
</div>

 

<br>
用户代号
<br>
UID<input id="resultuid" value=""/>
<input type="button" value="获取信息、留言、成果列表" onClick="getResultInfo(resultuid.value)"> 
<div id="resultDiv">
</div>


<br>
用户代号、土地标号(从0开始)
<br>
UID<input id="stealuserid" value=""/>
place<input id="stealuserplace" value=""/>
<input type="button" value="偷菜" onClick='getUsrSteal(stealuserid.value,stealuserplace.value)'>
<br>
<input type="button" value="偷所有" onClick='gogo()'>
<br>


<br>
place为土地标号(从0开始)、cid为种子编号、number为数量、ownerId为好友或自己的代号uid
<br>
place<input id="scarifyplace" value=""/>
<input type="button" value="铲除" onClick='getScarify(scarifyplace.value)'>
<br>
<br>
place<input id="plantplace" value=""/>
cid<input id="plantseedcid" value=""/>
<input type="button" value="播种" onClick='getPlanting(plantplace.value,plantseedcid.value)'>
<br>

<br>
cid<input id="buyseedcid" value=""/>
number<input id="buyseednum" value=""/>
<input type="button" value="买种子" onClick='getbuySeed(buyseedcid.value,buyseednum.value)'>
<br>


<br>
cid<input name="salecId" value=""/>
number<input name="salenumber" value=""/>
<input type="button" value="卖出" onClick='getsale(salecId.value,salenumber.value)'>
<br>

 


<br>
ownerId<input id="weedownerId" value=""/>
place<input id="weedplace" value=""/>
<input type="button" value="锄草" onClick='getclearWeed(weedownerId.value,weedplace.value)'>
<input type="button" value="杀虫" onClick='getspraying(weedownerId.value,weedplace.value)'>
<input type="button" value="浇水" onClick='getwater(weedownerId.value,weedplace.value)'>
<input type="button" value="种草" onClick='getscatterSeed(weedownerId.value,weedplace.value)'>
<input type="button" value="放虫" onClick='getpest(weedownerId.value,weedplace.value)'>
<br>

<br>
新手任务:首先点“接受”,然后点“完成”即可通过一关,总共12关,具体看服务器的返回信息
<br>
新手任务
<input type="button" value="接受" onClick='gettaskaccept()'>
<input type="button" value="完成" onClick='gettaskupdate()'>
<br>

<br>
排序后对应原来的标号<br>
<textarea id="paixuOutput" style="width:850px;border:1px solid #c5e2f2;overflow:visible;" rows="15" readonly></textarea>
<br>
<br>
<br>
服务器返回的原始数据<br>
<textarea id="txtOutput" style="width:850px;border:1px solid #c5e2f2;overflow:visible;" rows="15" ></textarea>
<input class="but" id="res" type="button" value="UTF-8 还原 中文 ↓" οnclick="txtresult.value=unescape(txtOutput.value.replace(///u/g,'%u'));" />
<input class="but" id="conv" type="button" value="中文 转换 UTF-8 ↑" οnclick='txtOutput.value=txtresult.value.replace(/[^/u0000-/u00FF]/g,function($0){return escape($0).replace(/(%u)(/w{4})/gi,">
<textarea id="txtresult" style="width:850px;border:1px solid #c5e2f2;overflow:visible;" rows="15"></textarea>

 

<br>
为防止时间太久需要重新登录,可没隔一段时间调用刷新农场
<br>
<input type="button" value="刷新农场" onClick='document.getElementById("happyfarm").src = "

http://happyfarm.qzone.qq.com/";'>
<iframe id="happyfarm" width="100%" height="670" frameborder="0" application="yes" scrolling="no" src='http://happyfarm.qzone.qq.com'></iframe>


作者:王安林。QQ:379184514。邮箱:w18514379@126.com。博客:http://blog.csdn.net/w184514379http://blog.csdn.net/lin379184514
<br>
特别声明:本作品仅做研究交流用,仅为大家提供一点思路,可任意修改和传播,不追究版权亦不承担任何责任,不回答提问,不再更新。
<br>
2009.12.10

 


以下为md5.js代码(来自网络)

 


/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */

 

/*
 * Configurable variables. You may need to tweak these to be compatible with
 * the server-side, but the defaults work in most cases.
 */
var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */

/*
 * These are the functions you'll usually want to call
 * They take string arguments and return either hex or base-64 encoded strings
 */
function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }

/*
 * Perform a simple self-test to see if the VM is working
 */
function md5_vm_test()
{
  return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}

/*
 * Calculate the MD5 of an array of little-endian words, and a bit length
 */
function core_md5(x, len)
{
  /* append padding */
  x[len >> 5] |= 0x80 << ((len) % 32);
  x[(((len + 64) >>> 9) << 4) + 14] = len;

  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;

    a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
    d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
    c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);
    b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
    a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
    d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);
    c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
    b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
    a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
    d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
    c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
    b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
    a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);
    d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
    c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
    b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);

    a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
    d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
    c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);
    b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
    a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
    d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);
    c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
    b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
    a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
    d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
    c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
    b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);
    a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
    d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
    c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);
    b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);

    a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
    d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
    c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);
    b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
    a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
    d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);
    c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
    b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
    a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);
    d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
    c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
    b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);
    a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
    d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
    c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);
    b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);

    a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
    d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);
    c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
    b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
    a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);
    d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
    c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
    b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
    a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
    d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
    c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
    b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);
    a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
    d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
    c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);
    b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
  }
  return Array(a, b, c, d);

}

/*
 * These functions implement the four basic operations the algorithm uses.
 */
function md5_cmn(q, a, b, x, s, t)
{
  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
  return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
  return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}

/*
 * Calculate the HMAC-MD5, of a key and some data
 */
function core_hmac_md5(key, data)
{
  var bkey = str2binl(key);
  if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);

  var ipad = Array(16), opad = Array(16);
  for(var i = 0; i < 16; i++)
  {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
  }

  var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
  return core_md5(opad.concat(hash), 512 + 128);
}

/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */
function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

/*
 * Bitwise rotate a 32-bit number to the left.
 */
function bit_rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
 * Convert a string to an array of little-endian words
 * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
 */
function str2binl(str)
{
  var bin = Array();
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
  return bin;
}

/*
 * Convert an array of little-endian words to a string
 */
function binl2str(bin)
{
  var str = "";
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < bin.length * 32; i += chrsz)
    str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
  return str;
}

/*
 * Convert an array of little-endian words to a hex string.
 */
function binl2hex(binarray)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++)
  {
    str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);
  }
  return str;
}

/*
 * Convert an array of little-endian words to a base-64 string
 */
function binl2b64(binarray)
{
  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i += 3)
  {
    var triplet = (((binarray[i   >> 2] >> 8 * ( i   %4)) & 0xFF) << 16)
                | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
                |  ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
    for(var j = 0; j < 4; j++)
    {
      if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
      else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
    }
  }
  return str;
}

 


其他资料请下载图片。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值