几何尺寸与公差论坛

 找回密码
 注册
查看: 1800|回复: 0

Js小程序:开心餐厅布局程序(可以超过限制多摆炉子,重叠炉子、餐台、桌子、椅子,

[复制链接]
发表于 2010-4-11 18:20:26 | 显示全部楼层 |阅读模式
JS小程序:开心餐厅布局程序(可以超过限制多摆炉子,重叠炉子、餐台、桌子、椅子,回收地板、墙纸等功能
http://hi.baidu.com/134931/blog/ ... 155142925807c6.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); 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_getconf.php?verify="+verify+"&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_mygranary.php?verify="+verify+"&page=0&&type=&cafeid="+cid+"&r="+Math.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=new Array();for (j=1;j<=20;j++)  decor[j]='&nbsp;';}
  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[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_granary2cafe.php?verify='+verify+'&cafeid='+cid+'&id='+gid+'&type=10&x='+i+'&y='+j+'&direct=1&orderid=&r=0.'+Math.random()+'">';$('putstove_show').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,很简单,很容易学, 而且最关键的是很容易编写出非常有用的程序。以上代码,仅仅是个演示,和专业的外挂相比,相差很远。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|几何尺寸与公差论坛

GMT+8, 2024-5-5 18:26 , Processed in 0.037532 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表