(图片不能用另存为下载,用属性查看链接,然后下载)
源代码下载:http://download.csdn.net/source/1889334
以下为html文件代码,即外挂主程序。
<script type="text/javascript">
/*
作者:王安林。QQ:379184514。邮箱:w18514379@126.com。博客:http://blog.csdn.net/w184514379或http://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 = "
<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/w184514379或http://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;
}
其他资料请下载图片。