微件:Hydrogina/sandbox/map

来自PRTS
跳到导航 跳到搜索

显示

   <canvas id="scene" width="1000" height="600"></canvas>

<script type="text/javascript" src="https://code.createjs.com/1.0.0/easeljs.min.js"></script> <script>

   function AkMap(orimapData){this.orimapData=orimapData;this.oriwaves=null;this.n_x=n_x=orimapData.width;this.n_y=n_y=orimapData.height;this.x=0;this.y=0;this.tilesize=100;this.ntoxy=new Array(n_x*n_y);this.container_map=null;this.shape_background=null;this.roadmap=null;this.routes=null;this.tiles=null;this.init(orimapData)}AkMap.prototype.init=function(orimapData){this.tiles=new Array;var tiles=this.tiles;var n_x=this.n_x;var n_y=this.n_y;var orimap=orimapData.map;var oritiles=orimapData.tiles;for(var x=0;x<n_x;x++){tiles[x]=new Array;for(var y=0;y<n_y;y++){var tile=new Tile(x,y);oritilenum=orimap[y][x];oritile=oritiles[oritilenum];this.ntoxy[oritilenum]=[x,y];tile.n=oritilenum;tile.oritile=oritile;tiles[x][y]=tile}}};AkMap.prototype.n_xy=function(n){return this.ntoxy[n]};AkMap.prototype.xy_n=function(x,y){return this.tiles[x][y].n};AkMap.prototype.pos_actpos=function(pos){var actx=(pos[0]+.5)*this.tilesize;var acty=(pos[1]+.5)*this.tilesize;return[actx,acty]};AkMap.prototype.show=function(){n_x=this.n_x;n_y=this.n_y;for(var x=0;x<n_x;x++){for(var y=0;y<n_y;y++){var tile=this.tiles[x][y];console.log(tile.n);console.log(tile.oritile.tileKey)}}};AkMap.prototype.setContainer=function(){var container_map=this.container_map;var container_tiles=new createjs.Container;container_tiles.name="container_tiles";container_map.addChild(container_tiles);var container_paths=new createjs.Container;container_paths.name="container_paths";container_map.addChild(container_paths);var container_enemys=new createjs.Container;container_enemys.name="container_enemys";container_map.addChild(container_enemys)};AkMap.prototype.drawbackground=function(x,y,tilesize){this.x=x;this.y=y;this.tilesize=tilesize;var container_map=new createjs.Container;container_map.x=x;container_map.y=y;stage.addChild(container_map);var square=new createjs.Shape;square.graphics.beginFill("white").drawRect(0,0,tilesize*this.n_x,tilesize*this.n_y);container_map.addChild(square);this.shape_background=square;this.container_map=container_map};AkMap.prototype.drawtiles=function(){var n_x=this.n_x;var n_y=this.n_y;var tilesize=this.tilesize;for(var x=0;x<n_x;x++){for(var y=0;y<n_y;y++){var tile=this.tiles[x][y];type=tile.oritile.tileKey;color=getcolor(type);var actx=(x+.5)*tilesize;var acty=(y+.5)*tilesize;square=drawsquare(tilesize,color,actx,acty);square.ipos=[tile.i_x,tile.i_y];settileevent(square);this.container_map.getChildByName("container_tiles").addChild(square);tile.shape_tile=square}}};function showmap(nx,ny,map){rtn="";for(var y=0;y<ny;y++){for(var x=0;x<nx;x++){var i=map[x][y];rtn+=i+","}rtn+="\n"}console.log(rtn)}AkMap.prototype.construct_roadmap=function(){var n_x=this.n_x;var n_y=this.n_y;var passable_map=new Array(n_x);var num_map=new Array(n_x);for(let i=0;i<n_x;i++){passable_map[i]=new Array(n_y).fill(false);num_map[i]=new Array(n_y)}var N=0;for(var x=0;x<n_x;x++){for(var y=0;y<n_y;y++){var passableMask=this.tiles[x][y].oritile.passableMask;if(passableMask==3){passable_map[x][y]=true;N++}var num=this.orimapData.map[y][x];num_map[x][y]=num}}var links=[];for(var y=0;y<n_y;y++){for(var x=0;x<n_x;x++){var curr=num_map[x][y];var curr_passable=passable_map[x][y];if(curr_passable){if(y<n_y-1){var up=num_map[x][y+1];var up_passable=passable_map[x][y+1];if(up_passable){links.push([curr,up,1]);links.push([up,curr,1])}}if(x<n_x-1){var right=num_map[x+1][y];var right_passable=passable_map[x+1][y];if(right_passable){links.push([curr,right,1]);links.push([right,curr,1])}}}}}var N_all=n_x*n_y;this.roadmap=new RoadMap(passable_map,N_all,links);return[links,N_all]};AkMap.prototype.init_routes=function(oriroutes){this.routes=new Array;for(var i=0;i<oriroutes.length;i++){this.routes[i]=new Route(oriroutes[i],i)}};function Tile(i_x,i_y){this.i_x=i_x;this.i_y=i_y;this.n=0;this.oritile=null;this.shape_tile=null;this.floor=null;this.wall=null;this.placeitem=null;this.passable=false;this.buildable=false;this.enemys=null}function settileevent(tile){tile.on("click",TileOnclick);tile.on("dblclick",TileOndblclick)}function TileOnclick(evt){target=evt.currentTarget;console.log("ipos",target.ipos);var ptile=Map.tiles[target.ipos[0]][target.ipos[1]];console.log("n",ptile.n);return;var enemy=Testenemy;var roadmap=Map.roadmap;roadmap.start=Map.xy_n(enemy.i_pos.x,enemy.i_pos.y);roadmap.end=ptile.n;var path=findpath(roadmap.links,roadmap.N,roadmap.start,roadmap.end);if(path.length>1){drawpath(path,roadmap.path_shape);path.shift();enemy.setpath(path);enemy.status="walk"}else{console.log("can not walk")}}function TileOndblclick(evt){target=evt.currentTarget;return;console.log("dblclick");var roadmap=Map.roadmap;var ptile=Map.tiles[target.ipos[0]][target.ipos[1]]}

</script> <script>

   function Enemy(){this.n=0;this.predelay=0;this.i_wave=0;this.pos=new Point(0,0);this.i_pos=new Point(0,0);this.shape=null;this.path_shape=null;this.speed=1;this.status="unready";this.currtarget=new Point(0,0);this.path=null;this.i_path=0;this.route=null;this.i_checkpoint=0;this.time_startstay=0}Enemy.prototype.moveto=function(tarpos){this.pos.set3(tarpos);this.i_pos.set(Math.round(tarpos.x),Math.round(tarpos.y));var actpos=Map.pos_actpos(tarpos.toArray());this.shape.x=actpos[0];this.shape.y=actpos[1]};Enemy.prototype.movetobyspeed=function(tarpos,speed){var currpos=this.pos;if(currpos.equal(tarpos)){return true}var dpos=tarpos.sub(currpos);var dmove=speed*DeltaTime/1e3;var arrive=false;if(dpos.getMod()<=dmove){arrive=true}currpos=currpos.add(dpos.getNormal().mulNum(dmove));this.moveto(currpos);return arrive};Enemy.prototype.init=function(shape,pos){this.shape=shape;this.shape.visible=false;this.pos.set3(pos);this.moveto(pos)};Enemy.prototype.runframe=function(){var enemy=this;if(enemy.status=="walk"){var arrive=enemy.movetobyspeed(enemy.currtarget,enemy.speed);if(arrive){enemy.moveto(enemy.currtarget);enemy.i_path++;if(enemy.i_path<enemy.path.length){enemy.currtarget.set2(Map.n_xy(enemy.path[enemy.i_path]))}else{this.i_checkpoint++;this.changestatus(this.i_checkpoint)}}}else if(enemy.status=="stay"||enemy.status=="transport"){if(this.time_startstay+this.time_stay<=RunTime){this.i_checkpoint++;this.changestatus(this.i_checkpoint)}}else if(enemy.status=="transport_end"){enemy.moveto(enemy.currtarget);console.log(this);this.i_checkpoint++;this.changestatus(this.i_checkpoint)}};Enemy.prototype.changestatus=function(i_checkpoint){var route=this.route;var checkpoint=null;if(i_checkpoint==route.checkpoints.length){this.status="walk";this.setpath(route.end_path)}else if(i_checkpoint>route.checkpoints.length){this.status="finish";this.showhide(false);EnemyControler.flags_wavefinish[this.i_wave]--}else{checkpoint=route.checkpoints[i_checkpoint];var type=checkpoint.type;switch(type){case 0:this.status="walk";this.setpath(checkpoint.path);break;case 1:this.status="stay";break;case 5:this.status="transport";console.log("transport",type);break;case 6:this.status="transport_end";this.currtarget.set3(checkpoint.pos);console.log("transport_end",type,this.currtarget);break;default:this.status="error";console.warn("error",type)}}console.log("changestatus",this.status);if(this.status=="walk"){drawpath(this.path,this.path_shape)}else if(this.status=="stay"||this.status=="transport"){this.time_startstay=RunTime;this.time_stay=checkpoint.time*1e3;console.log("time",checkpoint.time)}};Enemy.prototype.setpath=function(path){var enemy=this;enemy.path=path;enemy.i_path=0;enemy.currtarget.set2(Map.n_xy(enemy.path[0]))};Enemy.prototype.setroute=function(route){this.route=route;this.i_checkpoint=0;this.cal_route_path(route.start,0)};Enemy.prototype.cal_route_path=function(start,i_checkpoint){var route=this.route;if(route.oriroute==null){}var vir_currpos=new Point(0,0);vir_currpos.set3(start);var roadmap=Map.roadmap;for(var i=i_checkpoint;i<route.checkpoints.length;i++){var checkpoint=route.checkpoints[i];if(checkpoint.type==0){var roadmap_start=Map.xy_n(vir_currpos.x,vir_currpos.y);var roadmap_end=Map.xy_n(checkpoint.pos.x,checkpoint.pos.y);var path=findpath(roadmap.links,roadmap.N,roadmap_start,roadmap_end);checkpoint.path=path;vir_currpos.set3(checkpoint.pos)}if(checkpoint.type==6){vir_currpos.set3(checkpoint.pos)}}var roadmap_start=Map.xy_n(vir_currpos.x,vir_currpos.y);var roadmap_end=Map.xy_n(route.end.x,route.end.y);var path=findpath(roadmap.links,roadmap.N,roadmap_start,roadmap_end);this.route.end_path=path};Enemy.prototype.startaction=function(){this.showhide(true);this.changestatus(0)};Enemy.prototype.showhide=function(show){if(show){this.shape.visible=true;this.path_shape.visible=true}else{this.shape.visible=false;this.path_shape.visible=false}};

</script> <script>

   function EnemyControl(){this.enemys=null;this.i_wave=0;this.flags_wavefinish=null;this.times_wavestart=null}EnemyControl.prototype.init=function(routes){oriwaves=Map.oriwaves;this.enemys=new Array;this.flags_wavefinish=new Array(oriwaves.length);this.times_wavestart=new Array(oriwaves.length);for(let i=0;i<this.flags_wavefinish.length;i++){this.flags_wavefinish[i]=0;this.times_wavestart[i]=0}var i_enemy=0;var i_act=0;for(let i=0;i<oriwaves.length;i++){console.log("wave",i,"-----------------------");const oriwave=oriwaves[i];var fragments=oriwave.fragments;var wave_currtime=0;for(let j=0;j<fragments.length;j++){console.log("fragment",j,"-------------");const fragment=fragments[j];console.log("-",fragment.preDelay);var actions=fragment.actions;var fragment_starttime=wave_currtime;for(let k=0;k<actions.length;k++){const action=actions[k];var key=action.key;var count=action.count;var actionType=action.actionType;var preDelay=action.preDelay;var interval=action.interval;var routeIndex=action.routeIndex;if(actionType==0){console.log(i_act,i_enemy,key,count,actionType);console.log("--",preDelay,interval);console.log("routeIndex",routeIndex);route=routes[routeIndex];for(let cnt=0;cnt<count;cnt++){var tdelay=fragment_starttime+action.preDelay+fragment.preDelay+cnt*action.interval;wave_currtime=Math.max(wave_currtime,tdelay);var enemy=this.setenemy(route);enemy.predelay=tdelay;enemy.n=i_enemy;enemy.i_wave=i;i_enemy+=1;this.flags_wavefinish[i]+=1}i_act++}else{for(let cnt=0;cnt<count;cnt++){var tdelay=fragment_starttime+action.preDelay+fragment.preDelay+cnt*action.interval;wave_currtime=Math.max(wave_currtime,tdelay)}}}}}console.log("end","--------------------------------------")};EnemyControl.prototype.setenemy=function(route){var path_shape=new createjs.Shape;Map.container_map.getChildByName("container_paths").addChild(path_shape);var enemy_shape=drawcircle(Map.tilesize*.8,createjs.Graphics.getRGB(255,0,0),0,0);Map.container_map.getChildByName("container_enemys").addChild(enemy_shape);var enemy=new Enemy;enemy.speed=2.6;enemy.path_shape=path_shape;enemy.path_shape.visible=false;enemy.setroute(route);enemy.init(enemy_shape,enemy.route.start);this.enemys.push(enemy);return enemy};EnemyControl.prototype.runframe=function(){for(var i=0;i<this.enemys.length;i++){var enemy=this.enemys[i];enemy.runframe()}};var TextShowTime=null;EnemyControl.prototype.init2=function(){TextShowTime=document.getElementById("time");console.log("flags_wavefinish",this.flags_wavefinish);for(var i=0;i<this.enemys.length;i++){var enemy=this.enemys[i];console.log(enemy.i_wave,enemy.n,enemy.predelay)}};EnemyControl.prototype.startaction=function(){for(var i=0;i<this.enemys.length;i++){var enemy=this.enemys[i];if(enemy.i_wave==this.i_wave){if(enemy.status=="unready"&&enemy.predelay*1e3+this.times_wavestart[this.i_wave]<=RunTime){enemy.startaction()}}}if(this.i_wave<this.flags_wavefinish.length&&this.flags_wavefinish[this.i_wave]<=0){this.i_wave++;this.times_wavestart[this.i_wave]=RunTime}TextShowTime.innerText="time: "+String((RunTime/1e3).toFixed(1))+"\nwave: "+String(this.i_wave)+"\nwave remain: "+String(this.flags_wavefinish[this.i_wave])};

</script> <script>

   function getcolor(type){var color="";switch(type){case"tile_start":color="rgb(212,15,28)";break;case"tile_end":color="rgb(96,190,255)";break;case"tile_forbidden":color="rgb(57,76,84)";break;case"tile_road":color="rgb(215,215,232)";break;case"tile_yinyang_road":color="rgb(227,208,169)";break;case"tile_yinyang_wall":color="darkgrey";break;case"tile_wall":color="rgb(135,135,127)";break;case"tile_yinyang_switch":color="rgb(198,15,73)";break;case"tile_floor":color="green";color="rgb(109,111,128)";break;default:console.warn("unknown tile type:",type);color="white"}return color}function drawsquare(size,color,x,y){var square=new createjs.Shape;square.graphics.beginFill(color).drawRect(-size/2,-size/2,size,size);square.x=x;square.y=y;return square}function drawcircle(size,color,x,y){var g=new createjs.Graphics;g.setStrokeStyle(1);g.beginStroke(createjs.Graphics.getRGB(0,0,0));g.beginFill(color);g.drawCircle(0,0,size/2);var s=new createjs.Shape(g);s.x=x;s.y=y;return s}

</script> <script>

   function RoadMap(passable_map,N,links){this.passable_map=passable_map;this.N=N;this.links=links;this.start=0;this.end=0;this.path_shape=null}function getpri(f,t){if(f==t+1){return 3}else if(f==t-1){return 0}else if(f>t){return 2}else{return 1}}var findpath=function(times,N,K,target){const graph=new Array(N);for(let i=0;i<N;i++)graph[i]=new Set;for(let[u,v,w]of times){graph[u].add([v,w])}const dist=new Array(N).fill(Infinity);dist[K]=0;const used=new Array(N).fill(false);const queue=[];queue.push(K);used[K]=true;const forwards=new Array(N);forwards[K]=K;while(queue.length){const curr=queue.shift();used[curr]=false;for(let[next,w]of graph[curr]){if(dist[next]>dist[curr]+w){forwards[next]=curr;dist[next]=dist[curr]+w;if(!used[next]){used[next]=true;queue.push(next)}}else if(dist[next]==dist[curr]+w){var pri_curr=getpri(curr,next);var pri_forward=getpri(forwards[next],next);if(pri_curr>pri_forward){forwards[next]=curr;dist[next]=dist[curr]+w;if(!used[next]){used[next]=true;queue.push(next)}}}}}path=[];let dis=0;dis=dist[target];if(dis===Infinity){dis=-1}else{curr=target;while(curr!=K){path.unshift(curr);curr=forwards[curr]}path.unshift(K)}return path};function drawpath(path,path_shape){var graphics=path_shape.graphics;graphics.clear();if(path.length==0){return}graphics.beginStroke("rgba(0, 0, 255, 0.5)");graphics.setStrokeStyle(5);var xy=Map.ntoxy[path[0]];var tilesize=Map.tilesize;var actx=(xy[0]+.5)*tilesize;var acty=(xy[1]+.5)*tilesize;graphics.moveTo(actx,acty);for(var i=0;i<path.length;i++){xy=Map.ntoxy[path[i]];actx=(xy[0]+.5)*tilesize;acty=(xy[1]+.5)*tilesize;graphics.lineTo(actx,acty)}graphics.endStroke()}

</script> <script>

   var Point=function(x,y){this.x=x;this.y=y};Point.prototype={copy:function(){return new Point(this.x,this.y)},equal:function(v){if(this.x==v.x&&this.y==v.y)return true;else return false},set3:function(v){this.x=v.x;this.y=v.y},set2:function(pos){this.x=pos[0];this.y=pos[1]},set:function(x,y){this.x=x;this.y=y},toArray:function(){return[this.x,this.y]},add:function(v){return new Point(this.x+v.x,this.y+v.y)},sub:function(v){return new Point(this.x-v.x,this.y-v.y)},getMod:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},mulNum:function(num){return new Point(this.x*num,this.y*num)},getNegative:function(){return new Point(-this.x,-this.y)},dotMul:function(v){return this.x*v.x+this.y*v.y},crossMul:function(v){return this.x*v.y-this.y*v.x},getAngle:function(v){return Math.acos(this.dotMul(v)/(this.getMod()*v.getMod()))*180/Math.PI},getRadian:function(v){var m1=this.getMod(),m2=v.getMod();if(m1==0||m2==0){return 0}return Math.acos(this.dotMul(v)/(m1*m2))},distance:function(v){return Math.sqrt((this.x-v.x)*(this.x-v.x)+(this.y-v.y)*(this.y-v.y))},distance2:function(v){return(this.x-v.x)*(this.x-v.x)+(this.y-v.y)*(this.y-v.y)},getNormal:function(){var mod=this.getMod();return new Point(this.x/mod,this.y/mod)},getNormal2:function(){return new Point(this.y/Math.sqrt(this.x*this.x+this.y*this.y),-this.x/Math.sqrt(this.x*this.x+this.y*this.y))},reflex:function(v){var normal=v.getNormal();return this.sub(normal.mulNum(2*this.dotMul(normal)))},mirror:function(v){return this.reflex(v).getNegative()},isZero:function(){if(this.x==0&&this.y==0)return true;else return false},isIn:function(t,b,q){var r1=this.sub(t),r2=this.sub(b);if(r1.x>=0&&r1.y>=0&&r2.x<=0&&r2.y<=0){if(q){var c=t.add(b).mulNum(.5);return this.getQ(c)}else{return-1}}else{return false}},getQ:function(pc){var r=this.sub(pc);if(r.x>=0&&r.y>=0){return 4}else if(r.x<0&&r.y>=0){return 3}else if(r.x<0&&r.y<0){return 2}else if(r.x>=0&&r.y<0){return 1}},rotate:function(eg1){var eg=eg1/180*Math.PI.toFixed(2);return new Point(this.x*Math.cos(eg)-this.y*Math.sin(eg),this.x*Math.sin(eg)+this.y*Math.cos(eg))},toString:function(){return this.x+":"+this.y}};

</script> <script>

   function Route(oriroute,n){this.oriroute=oriroute;this.n=n;this.start=null;this.end=null;this.end_path=null;this.checkpoints=null;if(oriroute==null){return}this.start=new Point(oriroute.startPosition.col,Map.n_y-1-oriroute.startPosition.row);this.end=new Point(oriroute.endPosition.col,Map.n_y-1-oriroute.endPosition.row);this.checkpoints=new Array;for(var i=0;i<oriroute.checkpoints.length;i++){this.checkpoints[i]=new Checkpoint(oriroute.checkpoints[i],i)}}function Checkpoint(oricheckpoint,n){this.oricheckpoint=oricheckpoint;this.n=n;this.type=oricheckpoint.type;this.time=oricheckpoint.time;this.pos=new Point(oricheckpoint.position.col,Map.n_y-1-oricheckpoint.position.row);this.path=null}

</script> <script>

   function WaveScheduler(){this.i_wave=0;this.i_fragment=0;this.oriwaves=null;this.waves=null;this.unreadyenemys=null}function Wave(){this.preDelay=0;this.postDelay=0;this.maxTimeWaitingForNextWave=0;this.starttime=0;this.blockcount=0;this.waves=new Array}WaveScheduler.prototype.init=function(oriwaves){var wavescheduler=this;this.oriwaves=oriwaves;this.waves=new Array;this.unreadyenemys=new Array;var i_enemy=0;var i_act=0;for(let i=0;i<oriwaves.length;i++){console.log("wave",i,"-----------------------");const oriwave=oriwaves[i];var fragments=oriwave.fragments;var wave_sc=new Wave;wavescheduler.waves.push(wave_sc);for(let j=0;j<fragments.length;j++){console.log("fragment",j,"-------------");const fragment=fragments[j];console.log("-",fragment.preDelay);var actions=fragment.actions;var fragment_sc=new Wave;wave_sc.waves.push(fragment_sc);for(let k=0;k<actions.length;k++){const action=actions[k];var key=action.key;var count=action.count;var actionType=action.actionType;var preDelay=action.preDelay;var interval=action.interval;var routeIndex=action.routeIndex;if(actionType==0){i_enemy+=count;console.log(i_act,i_enemy,key,count,actionType);console.log("--",preDelay,interval);i_act++;console.log("routeIndex",routeIndex);route=routes[routeIndex];this.setenemy(route)}}}}};function printwaves(oriwaves){var i_enemy=0;var i_act=0;for(let i=0;i<oriwaves.length;i++){console.log("wave",i,"-----------------------");const oriwave=oriwaves[i];var fragments=oriwave.fragments;for(let j=0;j<fragments.length;j++){console.log("fragment",j,"-------------");const fragment=fragments[j];console.log("-",fragment.preDelay);var actions=fragment.actions;for(let k=0;k<actions.length;k++){const action=actions[k];var key=action.key;var count=action.count;var actionType=action.actionType;var preDelay=action.preDelay;var interval=action.interval;if(true){i_enemy+=count;console.log(i_act,i_enemy,key,count,actionType);console.log("--",preDelay,interval);i_act++}}}}console.log("end","--------------------------------------")}

</script> <script>

   var canvas,ctx;var stage;var Map;var DeltaTime=50;var RunTime=0;function init(){console.log("init()");canvas=document.getElementById("scene");ctx=canvas.getContext("2d");stage=new createjs.Stage(canvas);createjs.Touch.enable(stage);stage.mouseMoveOutside=true;stage.enableMouseOver();startup();createjs.Ticker.framerate=60;createjs.Ticker.addEventListener("tick",update)}var EnemyControler;function startup(){var orimapData=oriaklevel.mapData;var oriroutes=oriaklevel.routes;var oriwaves=oriaklevel.waves;Map=new AkMap(orimapData);Map.drawbackground(100,0,60);Map.setContainer();Map.drawtiles();Map.construct_roadmap();Map.init_routes(oriroutes);Map.oriwaves=oriwaves;EnemyControler=new EnemyControl;EnemyControler.init(Map.routes);EnemyControler.init2();EnemyControler.startaction()}function update(event){DeltaTime=event.delta;RunTime+=DeltaTime;EnemyControler.startaction();EnemyControler.runframe();stage.update()}function handlerImageLoad(event){var bitmap=new createjs.Bitmap(event.target);console.log(bitmap.getBounds());var height=bitmap.getBounds().height;var width=bitmap.getBounds().width;var ts=Map.tilesize;bitmap.scaleX=ts/width;bitmap.scaleY=ts/height;bitmap.regX=height/2;bitmap.regY=width/2;bitmap.x=ts*(2+.5);bitmap.y=ts*(2+.5);Map.container_map.addChild(bitmap);console.log(bitmap.getBounds());console.log(bitmap)}
   </script>

<script> var oriaklevel=; init(); </script>