mirror of
https://github.com/Shadowss/TravianZ.git
synced 2026-06-28 00:24:23 +00:00
Fix the map moving bug which will cause map hanging.
Please read for detail README in the #6 entry.
This commit is contained in:
@@ -14,6 +14,12 @@ My changes notes:
|
||||
VM5051:1 Uncaught SyntaxError: Unexpected token )
|
||||
jd.onreadystatechange @ unx.js?0ac36:170
|
||||
This error arises when moving to the border of the map.
|
||||
6. Fix the map loop moving bug:
|
||||
Symptom: For map not set to size 400x400, on the map page,
|
||||
when moving on and on in one direction, cross the map border(loop) two times,
|
||||
the moving function will be crashed(freeze, you can't move any more).
|
||||
I found out that unx.js handle a static map size(400x400).
|
||||
So I fixed this with a m_c.world_max variable from mapview.tpl and changed the unx.js accordingly.
|
||||
|
||||
Note for the original code:
|
||||
The last commit 4372c40 from Shadowss/TravianZ is on Jul 6 2016, with note:
|
||||
|
||||
@@ -256,6 +256,7 @@ if (isset($neutralarray[0])) {
|
||||
m_c.ad = [<?php echo '['.$map_js;?>];
|
||||
m_c.z = {"x":<?php echo $x ?>,"y":<?php echo $y ?>};
|
||||
m_c.size = 7;
|
||||
m_c.world_max = <?php echo WORLD_MAX; /*TienTN: add a value to handle in unx.js instead of hardcoding*/ ?>;
|
||||
var mdim = {"x":7,"y":7,"rad":3}
|
||||
var mmode = 0;
|
||||
function init_local(){map_init();}
|
||||
|
||||
@@ -193,16 +193,60 @@ else
|
||||
{url+='&'+param;}
|
||||
}
|
||||
document.location.href=url;}
|
||||
var rd={'index':0,'dir':0,'size':null,'fields':[],'cindex':0,'usealternate':false}
|
||||
;var m_c=rd;var sd;var td;var ud;var vd;var wd;var xd;var yd;var zd;var $d;var _d=false;var ae;var be;var ce;var de=[];de[38]=1;de[39]=2;de[40]=3;de[37]=4;var ee={}
|
||||
;var fe;var ge;function map_init(){sd=false;td=false;ud=false;vd=false;xd=0;wd=0;fe=he('karte2');ie(['i','a','t']);if(null==m_c.az){throw'm_c.az muss seitenspezifisch initialisiert werden.';}
|
||||
for(var p in m_c.az){document.getElementById('ma_'+p).onclick=je;}
|
||||
var ke=['mcx','mcy','x','y','map_infobox'];for(var i=0;i<ke.length;i++){ee[ke[i]]=document.getElementById(ke[i]);}
|
||||
ke=['mcx','mcy'];for(var i=0;i<ke.length;i++){ee[ke[i]].onfocus=function(){vd=true;}
|
||||
;ee[ke[i]].onblur=function(){vd=false;}
|
||||
;}
|
||||
var rd={'index':0,'dir':0,'size':null,'fields':[],'cindex':0,'usealternate':false};
|
||||
var m_c=rd;
|
||||
var sd;
|
||||
var td;
|
||||
var ud;
|
||||
var vd;
|
||||
var wd;
|
||||
var xd;
|
||||
var yd;
|
||||
var zd;
|
||||
var $d;
|
||||
var _d=false;
|
||||
var ae;
|
||||
var be;
|
||||
var ce;
|
||||
var de=[];
|
||||
de[38]=1;
|
||||
de[39]=2;
|
||||
de[40]=3;
|
||||
de[37]=4;
|
||||
var ee={};
|
||||
var fe;
|
||||
var ge;
|
||||
function map_init(){
|
||||
sd=false;
|
||||
td=false;
|
||||
ud=false;
|
||||
vd=false;
|
||||
xd=0;
|
||||
wd=0;
|
||||
fe=he('karte2');
|
||||
ie(['i','a','t']);
|
||||
if(null==m_c.az){
|
||||
throw'm_c.az muss seitenspezifisch initialisiert werden.';
|
||||
}
|
||||
for(var p in m_c.az){
|
||||
document.getElementById('ma_'+p).onclick=je;
|
||||
}
|
||||
var ke=['mcx','mcy','x','y','map_infobox'];
|
||||
for(var i=0;i<ke.length;i++){
|
||||
ee[ke[i]]=document.getElementById(ke[i]);
|
||||
}
|
||||
ke=['mcx','mcy'];
|
||||
for(var i=0;i<ke.length;i++){
|
||||
ee[ke[i]].onfocus=function(){vd=true;};
|
||||
ee[ke[i]].onblur=function(){vd=false;};
|
||||
}
|
||||
|
||||
ee.ibox_cells=[];ee.ibox_cells[0]=ee.map_infobox.firstChild.firstChild.lastChild;for(var i=1;i<=3;i++){ee.ibox_cells[i]=ee.map_infobox.firstChild.nextSibling.childNodes[i-1].lastChild}
|
||||
ee.ibox_cells=[];
|
||||
ee.ibox_cells[0]=ee.map_infobox.firstChild.firstChild.lastChild;
|
||||
for(var i=1;i<=3;i++)
|
||||
{
|
||||
ee.ibox_cells[i]=ee.map_infobox.firstChild.nextSibling.childNodes[i-1].lastChild;
|
||||
}
|
||||
document.onkeyup=le;
|
||||
document.onkeydown=me;
|
||||
document.onkeypress=ne;
|
||||
@@ -241,7 +285,11 @@ function ef(ff,gf){return((ff-1)*10)+gf
|
||||
}
|
||||
function hf(jf){ee.x.firstChild.nodeValue=jf.x;ee.y.firstChild.nodeValue=jf.y;}
|
||||
function kf(jf){ee.mcx.value=jf.x;ee.mcy.value=jf.y;l=$$('div.cropfinder_icon a').set('href','cropfinder.php?x='+jf.x+'&y='+jf.y);}
|
||||
function lf(x,y){return(400+x)+(400-y)*801+1;}
|
||||
function lf(x,y){
|
||||
var world_max = m_c.world_max;
|
||||
var world_max_double = (world_max * 2)+1;
|
||||
return(world_max+x)+(world_max-y)*world_max_double+1;
|
||||
}
|
||||
function ve(){if(mmode){zd=window.open(this.href,"map","top=100,left=25,width=1007,height=585");zd.focus();}
|
||||
else{xe(true);fd('ajax.php?f=kp&z='+lf(m_c.z.x,m_c.z.y),function(mf){xe(false);ae=document.getElementsByTagName('body')[0];be=document.getElementsByTagName('html')[0];ae.parentNode.removeChild(ae);ce=document.createElement('body');ce.innerHTML=mf.lm;ce.style.backgroundColor='#ffffff';be.appendChild(ce);m_c=[];for(var qd in mf.dat.m_c){m_c[qd]=mf.dat.m_c[qd];}
|
||||
m_c.fields=[];mdim=mf.dat.mdim;mmode=mf.dat.mmode;map_init();}
|
||||
@@ -256,49 +304,190 @@ be.removeChild(ce);be.appendChild(ae);map_init();var of;var area;for(var i=0;i<m
|
||||
}
|
||||
hf(m_c.z);kf(m_c.z);}
|
||||
return false;}
|
||||
function je(){var qf=1*this.id.substring(4,5);var rf=1*(this.id.substring(5,7)=='p7'?mdim.x:1);map_scroll(qf,rf);return false;}
|
||||
|
||||
//this function is executed on map direction icon clicking
|
||||
//ma_n1, ma_n2, ma_n3, ma_n4
|
||||
// document.getElementById('ma_'+p).onclick=je;
|
||||
function je(){
|
||||
var qf=1*this.id.substring(4,5);
|
||||
var rf=1*(this.id.substring(5,7)=='p7'?mdim.x:1);
|
||||
// console.log(this.id + "--" + qf+"-"+rf);
|
||||
map_scroll(qf,rf);
|
||||
return false;
|
||||
}
|
||||
function sf(z){var x=z.x-mdim.rad;var y=z.y-mdim.rad;var tf=z.x+mdim.rad;var uf=z.y+mdim.rad;return{'x':x,'y':y,'xx':tf,'yy':uf}
|
||||
;}
|
||||
function vf(qf,rf,wf){if(wf==null){wf=0;}
|
||||
if(m_c.size==null){throw'Globale Variable m_c.size muss auf den Wert von $travian[map_prefetch_rows]) gesetzt werden.';}
|
||||
var xf,yf;if(null===rf||1===rf){yf=m_c.size-1;}
|
||||
else if(mdim.x==rf){xf=mdim.x;yf=-(mdim.x-1);}
|
||||
else{throw'Parameter steps muss 1 oder Breite der Karte in Feldern sein.';}
|
||||
var x,y,tf,uf,z;var z=m_c.z;switch(qf){case 1:x=z.x+mdim.rad;y=z.y+mdim.rad+wf;tf=z.x-mdim.rad;uf=y+yf;break;case 2:x=z.x+mdim.rad+wf;y=z.y-mdim.rad;tf=x+yf;uf=z.y+mdim.rad;break;case 3:x=z.x+mdim.rad;y=z.y-mdim.rad-wf;tf=z.x-mdim.rad;uf=y-yf;break;case 4:x=z.x-mdim.rad-wf;y=z.y-mdim.rad;tf=x-yf;uf=z.y+mdim.rad;break;}
|
||||
return{'x':x,'y':y,'xx':tf,'yy':uf}
|
||||
;}
|
||||
function zf($f){if($f>400){$f-=801;}
|
||||
if($f<-400){$f+=801;}
|
||||
return $f;}
|
||||
function _f($f){if($f>400){$f=400;}
|
||||
if($f<-400){$f=-400;}
|
||||
return $f;}
|
||||
function ag(qf,rf){var z={}
|
||||
;z.x=m_c.z.x*1;z.y=m_c.z.y*1;switch(qf){case 1:z.y+=rf;break;case 2:z.x+=rf;break;case 3:z.y-=rf;break;case 4:z.x-=rf;break;}
|
||||
m_c.z.x=zf(z.x);m_c.z.y=zf(z.y);}
|
||||
function vf(qf,rf,wf){
|
||||
if(wf==null){wf=0;}
|
||||
if(m_c.size==null){
|
||||
throw'Globale Variable m_c.size muss auf den Wert von $travian[map_prefetch_rows]) gesetzt werden.';
|
||||
}
|
||||
var xf,yf;
|
||||
if(null===rf||1===rf){
|
||||
yf=m_c.size-1;
|
||||
}
|
||||
else if(mdim.x==rf){
|
||||
xf=mdim.x;yf=-(mdim.x-1);
|
||||
}
|
||||
else{
|
||||
throw'Parameter steps muss 1 oder Breite der Karte in Feldern sein.';
|
||||
}
|
||||
var x,y,tf,uf,z;var z=m_c.z;
|
||||
switch(qf){
|
||||
case 1:
|
||||
x=z.x+mdim.rad;y=z.y+mdim.rad+wf;
|
||||
tf=z.x-mdim.rad;uf=y+yf;
|
||||
break;
|
||||
case 2:
|
||||
x=z.x+mdim.rad+wf;y=z.y-mdim.rad;
|
||||
tf=x+yf;uf=z.y+mdim.rad;
|
||||
break;
|
||||
case 3:
|
||||
x=z.x+mdim.rad;y=z.y-mdim.rad-wf;
|
||||
tf=z.x-mdim.rad;
|
||||
uf=y-yf;
|
||||
break;
|
||||
case 4:
|
||||
x=z.x-mdim.rad-wf;
|
||||
y=z.y-mdim.rad;
|
||||
tf=x-yf;
|
||||
uf=z.y+mdim.rad;
|
||||
break;
|
||||
}
|
||||
return{'x':x,'y':y,'xx':tf,'yy':uf};
|
||||
}
|
||||
|
||||
function zf($f){
|
||||
var world_max = m_c.world_max;
|
||||
var world_max_double = (world_max * 2) + 1;
|
||||
if($f>world_max){
|
||||
$f-=world_max_double;
|
||||
}
|
||||
if($f<-world_max){
|
||||
$f+=world_max_double;
|
||||
}
|
||||
return $f;
|
||||
}
|
||||
|
||||
function _f($f){
|
||||
if($f>m_c.world_max){
|
||||
$f=m_c.world_max;
|
||||
}
|
||||
if($f<-m_c.world_max){
|
||||
$f=-m_c.world_max;
|
||||
}
|
||||
return $f;
|
||||
}
|
||||
|
||||
//tientn: m_c is the object hold all global variables
|
||||
function ag(qf,rf){
|
||||
var z={};
|
||||
z.x=m_c.z.x*1;
|
||||
z.y=m_c.z.y*1;
|
||||
switch(qf){
|
||||
case 1:
|
||||
z.y+=rf;
|
||||
break;
|
||||
case 2:
|
||||
z.x+=rf;
|
||||
break;
|
||||
case 3:
|
||||
z.y-=rf;
|
||||
break;
|
||||
case 4:
|
||||
z.x-=rf;
|
||||
break;
|
||||
}
|
||||
m_c.z.x=zf(z.x);
|
||||
m_c.z.y=zf(z.y);
|
||||
}
|
||||
function bg(cg){return'ajax.php?f=k7&x='+cg.x+'&y='+cg.y+'&xx='+cg.xx+'&yy='+cg.yy;}
|
||||
function map_scroll(qf,rf,dg){var cg,eg;if(sd){return false;}
|
||||
if(fg()){if(td){return false;}
|
||||
sd=true;gg();m_c.usealternate=false;m_c.cindex=0;if(dg!==undefined){m_c.z.x=_f(dg.x);m_c.z.y=_f(dg.y);cg=sf(m_c.z);}
|
||||
else{ag(qf,rf);cg=vf(qf,rf);}
|
||||
hg=bg(cg);fd(hg,ig);}
|
||||
else{if(jg()){if(td){return false;}
|
||||
td=true;ag(qf,rf);cg=vf(qf,rf,2);hg=bg(cg);fd(hg,ig);}
|
||||
else if(kg()){ag(qf,rf);lg();gg();}
|
||||
else{ag(qf,rf);}
|
||||
mg(qf,rf);}
|
||||
function ig(ng){var og;if(jg()){og=pg(m_c.cindex);m_c.usealternate=false;td=false;}
|
||||
else{og=m_c.cindex;}
|
||||
m_c.fields[og]=ng;if(fg()){if(dg!==undefined){mg(0,0,m_c.z);qg('x');qg('y');}
|
||||
else{mg(qf,rf);qg(qf);}
|
||||
sd=false;}
|
||||
}
|
||||
function jg(){return m_c.usealternate;}
|
||||
function fg(){return(qf!=m_c.dir||rf==mdim.x||(rf==1&&rf!=m_c.steps)||dg!==undefined);}
|
||||
function kg(){return(m_c.index==m_c.size);}
|
||||
}
|
||||
|
||||
function map_scroll(qf,rf,dg) {
|
||||
var cg,eg;
|
||||
if(sd){
|
||||
return false;
|
||||
}
|
||||
if(fg()){
|
||||
if(td){
|
||||
return false;
|
||||
}
|
||||
sd=true;
|
||||
gg();
|
||||
m_c.usealternate=false;
|
||||
m_c.cindex=0;
|
||||
if(dg!==undefined){
|
||||
m_c.z.x=_f(dg.x);
|
||||
m_c.z.y=_f(dg.y);
|
||||
cg=sf(m_c.z);
|
||||
}
|
||||
else{
|
||||
ag(qf,rf);
|
||||
cg=vf(qf,rf);
|
||||
}
|
||||
hg=bg(cg);
|
||||
fd(hg,ig);
|
||||
}
|
||||
else{
|
||||
if(jg()){
|
||||
if(td){
|
||||
return false;
|
||||
}
|
||||
td=true;
|
||||
ag(qf,rf);
|
||||
cg=vf(qf,rf,2);
|
||||
hg=bg(cg);
|
||||
fd(hg,ig);
|
||||
}
|
||||
else if(kg()){
|
||||
ag(qf,rf);
|
||||
lg();
|
||||
gg();
|
||||
}
|
||||
else{
|
||||
ag(qf,rf);
|
||||
}
|
||||
mg(qf,rf);
|
||||
}
|
||||
function ig(ng){
|
||||
var og;
|
||||
if(jg()){
|
||||
og=pg(m_c.cindex);
|
||||
m_c.usealternate=false;
|
||||
td=false;
|
||||
}
|
||||
else{
|
||||
og=m_c.cindex;
|
||||
}
|
||||
m_c.fields[og]=ng;
|
||||
if(fg()){
|
||||
if(dg!==undefined){
|
||||
mg(0,0,m_c.z);
|
||||
qg('x');
|
||||
qg('y');
|
||||
}
|
||||
else{
|
||||
mg(qf,rf);
|
||||
qg(qf);
|
||||
}
|
||||
sd=false;
|
||||
}
|
||||
}
|
||||
function jg(){
|
||||
return m_c.usealternate;
|
||||
}
|
||||
function fg(){
|
||||
return(qf!=m_c.dir||rf==mdim.x||(rf==1&&rf!=m_c.steps)||dg!==undefined);
|
||||
}
|
||||
function kg(){
|
||||
return(m_c.index==m_c.size);
|
||||
}
|
||||
} //end of map_scroll
|
||||
|
||||
function rg(qf,rf){m_c.dir=qf;m_c.steps=rf;}
|
||||
function gg(){m_c.index=0;}
|
||||
function gg(){
|
||||
m_c.index=0;
|
||||
}
|
||||
function sg(){m_c.index++;if(m_c.index==m_c.size-2){m_c.usealternate=true;}
|
||||
}
|
||||
function lg(){m_c.cindex=pg(m_c.cindex);}
|
||||
@@ -323,11 +512,25 @@ area.details.normal_field=area.details.name===undefined&&area.details.typ==0;are
|
||||
;area.details.classic_oasis=area.details.querystring==='';}
|
||||
function df(dh){switch(dh){case 1:return[3,3,3,9];case 2:return[3,4,5,6];case 3:return[4,4,4,6];case 4:return[4,5,3,6];case 5:return[5,3,4,6];case 6:return[1,1,1,15];case 7:return[4,4,3,7];case 8:return[3,4,4,7];case 9:return[4,3,4,7];case 10:return[3,5,4,6];case 11:return[4,3,5,6];case 12:return[5,4,3,6];default:return false;}
|
||||
}
|
||||
function oe(){var x=parseInt(this.xp.value);var y=parseInt(this.yp.value);if(!isNaN(x)&&!isNaN(y)){map_scroll(0,0,{'x':x,'y':y}
|
||||
);}
|
||||
return false;}
|
||||
function ne(e){if(vd){return true;}
|
||||
var qd=(window.event)?event.keyCode:e.keyCode;var qf=eh(qd);if(qf!=0){return false;}
|
||||
//document.map_coords.onsubmit=oe;
|
||||
function oe(){
|
||||
var x=parseInt(this.xp.value);
|
||||
var y=parseInt(this.yp.value);
|
||||
if(!isNaN(x)&&!isNaN(y)){
|
||||
map_scroll(0,0,{'x':x,'y':y});
|
||||
}
|
||||
return false;
|
||||
}
|
||||
//document.onkeypress=ne;
|
||||
function ne(e){
|
||||
if(vd){
|
||||
return true;
|
||||
}
|
||||
var qd=(window.event)?event.keyCode:e.keyCode;
|
||||
var qf=eh(qd);
|
||||
if(qf!=0){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
function qe(){_d=true;hf(this.details);$e(this.details);fh(this);ge=this;}
|
||||
function fh(area){if(!area.details.fresh.href){if(area.details.classic_oasis){area.removeAttribute('href');area.style.cursor='default';}
|
||||
@@ -361,14 +564,31 @@ function vg(qf){for(var i=0;i<mdim.x;i++){for(var j=1;j<mdim.x;j++){switch(qf){c
|
||||
}
|
||||
}
|
||||
}
|
||||
function eh(qd){if(de[qd]!==undefined){return de[qd];}
|
||||
return 0;}
|
||||
function le(e){if(vd){return true;}
|
||||
var qd=((window.event)?event.keyCode:e.keyCode);if(16==qd){ud=false;}
|
||||
var qf=eh(qd);if(qf==wd&&wd!=0){wd=0;kf(m_c.z);ph();}
|
||||
function eh(qd){
|
||||
if(de[qd]!==undefined){
|
||||
return de[qd];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
function m_r(qf,qh){if(wd==qf&&qh==xd){window.setTimeout(function(){m_r(qf,qh)}
|
||||
,100);map_scroll(qf,1);}
|
||||
//document.onkeyup=le;
|
||||
function le(e){
|
||||
if(vd){
|
||||
return true;
|
||||
}
|
||||
var qd=((window.event)?event.keyCode:e.keyCode);
|
||||
if(16==qd){
|
||||
ud=false;
|
||||
}
|
||||
var qf=eh(qd);
|
||||
if(qf==wd&&wd!=0){
|
||||
wd=0;kf(m_c.z);ph();
|
||||
}
|
||||
}
|
||||
function m_r(qf,qh){
|
||||
if(wd==qf&&qh==xd){
|
||||
window.setTimeout(function(){m_r(qf,qh)},100);
|
||||
map_scroll(qf,1);
|
||||
}
|
||||
}
|
||||
function qg(rh){var jb;switch(rh){case 2:case 4:case'x':jb='x';break;case 1:case 3:case'y':jb='y';break;}
|
||||
var sh='m'+jb;var th;var uh;var vh=0;var wh=0;for(var i=0;i<mdim.x;i++){if(jb=='x'){vh=i;}
|
||||
@@ -376,12 +596,26 @@ else{wh=i;}
|
||||
if(ee[sh][i]){th=pe(vh,wh,'a').details[jb];ee[sh][i].firstChild.nodeValue=th;}
|
||||
}
|
||||
}
|
||||
function me(e){if(vd){return true;}
|
||||
var qd=(window.event)?event.keyCode:e.keyCode;if(qd==16){ud=true;}
|
||||
var qf=eh(qd);if(qf!=0&&qf!=wd){var rf=(ud?mdim.x:1);map_scroll(qf,rf);var qh=new Date().getTime();if(rf==1){window.setTimeout(function(){m_r(qf,qh)}
|
||||
,500);}
|
||||
xd=qh;wd=qf;ph();}
|
||||
if(qf!=0){return false;}
|
||||
//document.onkeydown=me;
|
||||
function me(e){
|
||||
if(vd){
|
||||
return true;
|
||||
}
|
||||
var qd=(window.event)?event.keyCode:e.keyCode;if(qd==16){ud=true;}
|
||||
var qf=eh(qd);
|
||||
if(qf!=0&&qf!=wd){
|
||||
var rf=(ud?mdim.x:1);
|
||||
map_scroll(qf,rf);
|
||||
var qh=new Date().getTime();
|
||||
if(rf==1){
|
||||
window.setTimeout(function(){m_r(qf,qh)},500);
|
||||
}
|
||||
xd=qh;wd=qf;
|
||||
ph();
|
||||
}
|
||||
if(qf!=0){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
function ph(){window.setTimeout(function(){if(_d){$e(ge.details);}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user