![]() |
Js小程序:开心餐厅布局程序(可以超过限制多摆炉子,重叠炉子、餐台、桌子、椅子,回收地板、墙纸等功能
JS小程序:开心餐厅布局程序(可以超过限制多摆炉子,重叠炉子、餐台、桌子、椅子,回收地板、墙纸等功能
http://hi.baidu.com/134931/blog/ite...42925807c6.html 在大家的强烈鞭策下,我终于抽了点时间,把前面写的两个小程序组合起来,可以不安装任何软件的情况下,直接用浏览器打开下面的脚本,实现多摆炉子等 功能。 程序的使用方法:粘贴下面的HTML代码到记事本,另存为HTML文件(例如ABC.HTML),登录开心网之后(一定先登录),在那个浏览器 窗口选择打开刚才保存的HTML文件既可使用(有时侯鼠标双击打开就不灵了)。首先只看到获取verify的按钮,点了之后浏览器向开心网发送打开餐厅主 页的请求,稍等一会就会显示verify代码,同时显示可以进一步操作的按钮,这时候应该点“刷新布局”,稍等一会就能看见你的餐厅里面摆放好的物品(注 意坐标方向有一点变化)。现在可以进行两类操作,一是点物品可以移动或者回收物品,移动或者回收后原来的物品消失,新地方或者仓库的变化却要“刷新”后才 显示出来。另外一个功能是点击空白摆放炉子,比如你仓库里面买好了20个炉子,你可以依次点不同的地方,布局好以后点“摆放”按钮,系统就去摆放炉子,等 几秒后就可以“刷新布局”查看战果,进一步到开心网去做菜,看看多出的炉子、草坪上的炉子是不是一样可以用。 超过限制多摆炉子的说明:首先要在开心网餐厅页面,把现有的炉子上的菜扔了或者收了、清洗干净、收到仓库,然后进入商店购买炉子直到达到限制, 然后再次把新买的炉子收回仓库,如此反复可以购买许多炉子到仓库,但是能摆出来的炉子仍然是有限的。现在在开心网页面少摆放一两个炉子(不留是无法多摆 的),比如你可以摆六个炉子就只摆四个或者五个,就在开心网的这个页面,选择浏览器打开文件,浏览你用记事本保存在本机的脚本文件,获取verify、刷 新布局之后就可以在空白处摆放炉子,摆放10个左右,然后点“摆放”按钮,过10秒就可以查看你的效果了。 特别提示:能多摆放的炉子数量,与机器的性能、网络的速度有关,所以你在点“摆放”按钮之前,请关闭与开心网无关的程序窗口,特别是关闭迅雷、 快车、QQ旋风等下载软件,可以用任务管理器看一下CPU的繁忙情况,机器基本上平静的时侯点“摆放”按钮,那样成功的可能行最高。但是经过我的测试(我 的系统和网络都很差),运气好的时侯可以多摆10个,运气不好的时侯只多摆放了两三个,这个能超标的数量,全靠你的PC系统在点“摆放”那一瞬间的并发能 力,一般浏览器可能只有这个水平,如果需要超标更多的数量,可能只有你自己用DELPHI或者C++编写多线程程序,原理和下面的代码是一样的--瞬间并 发。 类似的办法可以摆放其它物品,比如餐台,方法是刷新一下仓库,点一下仓库里面的物品,然后清空摆放设置,重新选择摆放的位置,最后点“摆放”按 钮完成。 提醒一下,我以前刷的炉子今天被开心网没收了,不过我又用这个程序给另外一个朋 友刷了几个,说明程序还能工作。但是如果使用本程序产生了什么后果,比如被开心网进行什么处罚,请自行承担!我的经验是不要超过16个炉子,把摆放成功多的炉子收回仓库,只保留16个炉子做菜就比较安全。 常见问题:你的浏览器可能不支持本地JS,运行后弹出的警告要选择允许被禁用的功能。如果无法获取verify,那说明我的AJAX代码可能并 不适合你的浏览器版本,你需要自行学习如何修改AJAX那几行。我的系统是WINXP的,我只使用的IE6,如果其它系统下出现了问题,请自行分析原因, 一般都是多窗口浏览器是否同步COOKIE的问题,还有就是浏览器对JS的语法要求不同的问题。 完整的程序代码如下: <style type=text/css>.href {cursor:hand;color:blue;} textarea,input {font-size:9pt;}</style> <script type=text/javascript> //全局变量 var verify=''; var cid=''; var uid=''; var gid=256; function $(id){return document.getElementById(id);} function createXmlDom(){ var xmlVersions = new Array("MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0","MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument", "Microsoft.XmlDom"); for (var i=0; i<xmlVersions.length; i++){ try {var oXmlDom = new ActiveXObject(xmlVersions[i]); return oXmlDom;} catch (e) {}//alert(e.message); } throw new Error("当前系统未安装 MSXML!"); } function getNode(doc, xpath){ var retval = ""; var value = doc.selectSingleNode(xpath); if (value) retval = value.text; return retval; } var XmlDom=createXmlDom(); var xmlHttpReady=1; var xmlHttp=null; function handleStateChange(){ var url=$('addr_line').value; var now=new Date(); now=now.getTime(); if (xmlHttp.readyState==4){ if (xmlHttp.status==200){ var s_header=xmlHttp.getAllResponseHeaders(); var s_body=xmlHttp.responseText; $("text_msg").value+='\n====RESULT HEADER======\n'+s_header+'\n=====RESULT TEXT=======\n'+s_body; //更新verify if (s_body.match(/verify=([0-9a-z_]+)\&/)){ verify=RegExp.$1; $('var_verify').innerHTML=verify; if (verify.match(/^(\d+)_/)) uid=RegExp.$1; $('opt1').style.display=''; } //分地址进行处理 if (url.indexOf('http://www.kaixin001.com/cafe/api_getconf.php')==0){show_decor(s_body);} else if (url.indexOf('http://www.kaixin001.com/cafe/api_mygranary.php')==0){show_granary(s_body);} } else $("text_msg").value+='\n\n错误代码:'+xmlHttp.status; xmlHttpReady=1; xmlHttp=null; } } function http_request(m,u,d){ if (xmlHttpReady==0) return; xmlHttpReady=0; $("addr_line").value=u; $("text_msg").value=m+' '+d+'\n'; if (window.ActiveXObject) xmlHttp=new ActiveXObject('Microsoft.XMLHTTP'); else if (window.XMLHttpRequest) xmlHttp=new XMLHttpRequest(); else {alert('浏览器不支持');return;} xmlHttp.onreadystatechange=handleStateChange; xmlHttp.open(m,u); if (d=='') xmlHttp.send(null); else xmlHttp.send(d); } </script> <input type=text id=addr_line style='width:100%'> <textarea id=text_msg style='width:100%;height:300'></textarea> <div>verify=<span id=var_verify></span><a class=href onclick="http_request('GET','http://www.kaixin001.com/!cafe /index.php','');">获取</a></div> <table><tr valign=top> <td><div id=show_tab></div> <td> <a id=opt1 style='display:none' class=href onclick='if (verify=="") alert("请先获取verify"); else http_request("GET","http://www.kaixin001.com/cafe/api_g...uid="+uid,"");'> 刷新布局</a><br> <div id=opt21 style='display:none'> 说明:<br> 一、点击物品可以<select id=func1><option value=1>移动<option value=2>回收</select>物品。<br> 二、点击空白处批量摆放<span id=gname>白色堡垒灶台</span>(点仓库具体物品改变):<br> <span id=putstove_show></span> <a class=href onclick="putstove_clear();">清除</a> <a class=href onclick="putstove_exec();">摆放</a><br> </div> <div id=result_div style='display:none'></div> </table> <table><tr valign=top> <td id=show_granary> <td><a id=opt22 style='display:none' class=href onclick='if (cid=="") alert("请先刷新布局"); else http_request("GET","http://www.kaixin001.com/cafe/api_m....random(),"");'> 刷新仓库</a><br> </table> <script language=javascript> function show_decor(s){ XmlDom.loadXML(s); cid=getNode(XmlDom,'/data/cafe/cafeid'); $('opt21').style.display=''; $('opt22').style.display=''; var items=XmlDom.selectNodes('/data/decor/item'); var decor=new Array(); var i,j,x,y,tkey; for (i=1;i<=20;i++) {decor[i]=new Array();for (j=1;j<=20;j++) decor[i][j]=' ';} for (i=1;i<=items.length;i++){ x=parseInt(getNode(XmlDom,'/data/decor/item['+i+']/x')); y=parseInt(getNode(XmlDom,'/data/decor/item['+i+']/y')); oid=parseInt(getNode(XmlDom,'/data/decor/item['+i+']/orderid')); tkey=getNode(XmlDom,'/data/decor/item['+i+']/tkey'); if (tkey=='window') tkey='窗'; else if (tkey=='door') tkey='门'; else if (tkey=='chair') tkey='椅'; else if (tkey=='table') tkey='桌'; else if (tkey=='counter') tkey='柜'; else if (tkey=='stove') tkey='炉'; else if (tkey=='wall') tkey='墙'; else if (tkey=='floor') tkey='地'; decor[x][y]+='<a class=href onclick="do_move('+x+','+y+','+oid+');this.innerHTML=\'\';">'+tkey+'</a>'; } s='<table border=1 cellspacing=0>'; for (i=0;i<=20;i++) {s+='<tr><td>'+(i==0?'x\\y':i);if (i==0) for (j=1;j<=20;j++) s+='<td>'+j;else for (j=1;j<=20;j++) s+='<td onclick="putstove('+i+','+j+');">'+decor[i][j];} s+='</table>'; $('show_tab').innerHTML=s; } function show_granary(s){ XmlDom.loadXML(s); var items=XmlDom.selectNodes('/data/goods/item'); var i,s='',id,name; for (i=1;i<=items.length;i++){ id=getNode(XmlDom,'/data/goods/item['+i+']/id'); name=getNode(XmlDom,'/data/goods/item['+i+']/name'); s+=' <a class=href style="white-space:pre" onclick="gid='+id+';$(\'gname\').innerHTML=\''+name+'\';">'+name+'('+getNode(XmlDom,'/data/goods/item['+i+']/num')+')</a>'; } $('show_granary').innerHTML=s; } function do_move(x,y,oid){ var url; if ($('func1').value==1) { x=prompt('移动的新位置x',x);if (!x) return false; y=prompt('移动的新位置y',y);if (!y) return false; url='http://www.kaixin001.com/cafe/api_savegoods.php?verify='+verify+'&cafeid='+cid+'&orderid='+oid+'&direct=1&x='+x+'&y='+y; } else if ($('func1').value==2) url='http://www.kaixin001.com/cafe/api_goods2granary.php?verify='+verify+'&cafeid='+cid+'&orderid='+oid+'&r='+Math.random(); if (url) http_request('GET',url,''); return false; } var putstove_html=''; function putstove(i,j){putstove_html+='<img src="http://www.kaixin001.com/cafe/api_g...').innerHTML+=' ('+i+','+j+')';} function putstove_clear(){putstove_html='';$('putstove_show').innerHTML='';} function putstove_exec(){$('result_div').innerHTML=putstove_html;alert('请求发出完毕,你可 以刷新布局看看。');} </script> <a href=http://hi.baidu.com/134931/blog/item/2e011923f3155142925807c6.html& gt;本程序最新版本</a> 最后说一句,我写这样的程序,主要是希望激发大家学习计算机编程语言的兴趣,特别是JAVASCRIPT,很简单,很容易学, 而且最关键的是很容易编写出非常有用的程序。以上代码,仅仅是个演示,和专业的外挂相比,相差很远。 |
所有的时间均为北京时间。 现在的时间是 03:43 PM. |