Jak naprawiłem:
Zdefiniowałem 2 zmienną (arrka2) i zrobiłem pętlę na kolumny arrka. później dałem arrka2[cs] = arrka[c]; i jest okey.
###########################
Witam! Piszę sobie skrypt w NodeJS (w którym piszemy w JavaScript) i mam mianowicie taki problem iż przy zmianie pozycji x lub y w tablicy MapMobs zmienia również dane w tablicy MapMobsOrginal.
Sposób tworzenia tablicy MapMobsOrginal i MapMobs:
Kod
var i = Array();
for(c in MAPMOBS) {
if(i[MAPMOBS[c]['Map_ID']] == undefined) i[MAPMOBS[c]['Map_ID']] = 0;
if(MapMobs[MAPMOBS[c]['Map_ID']] == undefined) MapMobs[MAPMOBS[c]['Map_ID']] = {};
if(MapMobsOrginal[MAPMOBS[c]['Map_ID']] == undefined) MapMobsOrginal[MAPMOBS[c]['Map_ID']] = {};
//MapMobs - my array
//MAPMOBS - MySQL Array
var kn;
for(ka in Mobs) {
if(Mobs[ka]['Id'] == MAPMOBS[c]['Mob_ID']) {
kn = ka;
break;
}
}
var arrka = {
'0': i[MAPMOBS[c]['Map_ID']]+1, //Id
'1': 1, //Hp Mobs[kn]['Hp']
'2': MAPMOBS[c]['x'], //x
'3': MAPMOBS[c]['y'], //y
'4': Mobs[kn]['Name'], //Name
'5': Mobs[kn]['Level'], //Level
'6': Mobs[kn]['Hp'], //Max-Hp
'7': 'WALKING', //What he do
'8': MAPMOBS[c]['Mob_ID'], //Mob Id in General
'9': MAPMOBS[c]['Id'] //Mob Id in Game
};
//jak tu zmieniasz to pamiętaj o lini ok. 387 w nw_functions
MapMobs[MAPMOBS[c]['Map_ID']][i[MAPMOBS[c]['Map_ID']]] = arrka;
MapMobsOrginal[MAPMOBS[c]['Map_ID']][i[MAPMOBS[c]['Map_ID']]] = arrka;
i[MAPMOBS[c]['Map_ID']]++;
}
for(c in MAPMOBS) {
if(i[MAPMOBS[c]['Map_ID']] == undefined) i[MAPMOBS[c]['Map_ID']] = 0;
if(MapMobs[MAPMOBS[c]['Map_ID']] == undefined) MapMobs[MAPMOBS[c]['Map_ID']] = {};
if(MapMobsOrginal[MAPMOBS[c]['Map_ID']] == undefined) MapMobsOrginal[MAPMOBS[c]['Map_ID']] = {};
//MapMobs - my array
//MAPMOBS - MySQL Array
var kn;
for(ka in Mobs) {
if(Mobs[ka]['Id'] == MAPMOBS[c]['Mob_ID']) {
kn = ka;
break;
}
}
var arrka = {
'0': i[MAPMOBS[c]['Map_ID']]+1, //Id
'1': 1, //Hp Mobs[kn]['Hp']
'2': MAPMOBS[c]['x'], //x
'3': MAPMOBS[c]['y'], //y
'4': Mobs[kn]['Name'], //Name
'5': Mobs[kn]['Level'], //Level
'6': Mobs[kn]['Hp'], //Max-Hp
'7': 'WALKING', //What he do
'8': MAPMOBS[c]['Mob_ID'], //Mob Id in General
'9': MAPMOBS[c]['Id'] //Mob Id in Game
};
//jak tu zmieniasz to pamiętaj o lini ok. 387 w nw_functions
MapMobs[MAPMOBS[c]['Map_ID']][i[MAPMOBS[c]['Map_ID']]] = arrka;
MapMobsOrginal[MAPMOBS[c]['Map_ID']][i[MAPMOBS[c]['Map_ID']]] = arrka;
i[MAPMOBS[c]['Map_ID']]++;
}
To jak zmieniam x i y nie ma znaczenia ,ale wrzucę:
(stworek nie może się ruszyć więcej niż o 2 pola od miejsca w którym został utworzony (czyli max zmiana x o 2 i y o 2)
Kod
var MobsPosChange = setInterval(function() {
for(a in MapMobs) {
if(a == 0 || a == 2) continue;
//S- tam jakies moby. 20% szansy na ruch :
//Rozpier... tablicę:
var nox = MapMobs[a];
for(b in nox) {
var Mob = nox[b];
if(Mob[7] == 'WALKING') {
//console.log('Split for map: '+a+'\nMobKey: '+b+'\nMob Id: '+Mob[0]);
// if(rand(1,2) == 1) { //
//Okey lecim.
//Wybierz w jakim kierunku : 2 3
var directs=Array('',true,true,true,true); //żaden, góra, dół, lewo, prawo
var Mob2= MapMobsOrginal[a][b]; // 3 - y, 2 - x
if(parseInt(Mob[3]) == parseInt(Mob2[3])-2) directs[1]=false; //Nie moze isc do gory
if(parseInt(Mob[3]) == parseInt(Mob2[3])+2) directs[2]=false; //Nie moze isc do dolu
if(parseInt(Mob[2]) == parseInt(Mob2[2])-2) directs[3]=false; //Nie moze isc do lewo
if(parseInt(Mob[2]) == parseInt(Mob2[2])+2) directs[4]=false; //Nie moze isc do prawo
var i = 1;
console.log(directs);
console.log("Up: "+parseInt(Mob[3])+' == '+(parseInt(Mob2[3])-2));
console.log("Down: "+parseInt(Mob[3])+' == '+(parseInt(Mob2[3])+2));
console.log("Left: "+parseInt(Mob[2])+' == '+(parseInt(Mob2[2])-2));
console.log("Right: "+parseInt(Mob[2])+' == '+(parseInt(Mob2[2])+2));
console.log("############################");
for(i>0;i<=2;) {
var direct = rand(1,4);
if(direct == 1 && directs[1] == true) { MapMobs[a][b][3]--; break; } //Up
if(direct == 2 && directs[2] == true) { MapMobs[a][b][3]++; break; } //Down
if(direct == 3 && directs[3] == true) { MapMobs[a][b][2]--; break; } //Left
if(direct == 4 && directs[4] == true) { MapMobs[a][b][2]++; break; } //Right
}
// }
}
//Tu daj nową warto
console.log(MapMobsOrginal);
}
for(sendall in CLIENTS_MAP[a]) {
if(CLIENTS_MAP[a][sendall] != undefined) {
CLIENTS_MAP[a][sendall].emit('map', {'what': 'MobsOnMap', 'data': MapMobs[a]});
}
}
}
}, 10000); //TRUE - 10000
for(a in MapMobs) {
if(a == 0 || a == 2) continue;
//S- tam jakies moby. 20% szansy na ruch :
//Rozpier... tablicę:
var nox = MapMobs[a];
for(b in nox) {
var Mob = nox[b];
if(Mob[7] == 'WALKING') {
//console.log('Split for map: '+a+'\nMobKey: '+b+'\nMob Id: '+Mob[0]);
// if(rand(1,2) == 1) { //
//Okey lecim.
//Wybierz w jakim kierunku : 2 3
var directs=Array('',true,true,true,true); //żaden, góra, dół, lewo, prawo
var Mob2= MapMobsOrginal[a][b]; // 3 - y, 2 - x
if(parseInt(Mob[3]) == parseInt(Mob2[3])-2) directs[1]=false; //Nie moze isc do gory
if(parseInt(Mob[3]) == parseInt(Mob2[3])+2) directs[2]=false; //Nie moze isc do dolu
if(parseInt(Mob[2]) == parseInt(Mob2[2])-2) directs[3]=false; //Nie moze isc do lewo
if(parseInt(Mob[2]) == parseInt(Mob2[2])+2) directs[4]=false; //Nie moze isc do prawo
var i = 1;
console.log(directs);
console.log("Up: "+parseInt(Mob[3])+' == '+(parseInt(Mob2[3])-2));
console.log("Down: "+parseInt(Mob[3])+' == '+(parseInt(Mob2[3])+2));
console.log("Left: "+parseInt(Mob[2])+' == '+(parseInt(Mob2[2])-2));
console.log("Right: "+parseInt(Mob[2])+' == '+(parseInt(Mob2[2])+2));
console.log("############################");
for(i>0;i<=2;) {
var direct = rand(1,4);
if(direct == 1 && directs[1] == true) { MapMobs[a][b][3]--; break; } //Up
if(direct == 2 && directs[2] == true) { MapMobs[a][b][3]++; break; } //Down
if(direct == 3 && directs[3] == true) { MapMobs[a][b][2]--; break; } //Left
if(direct == 4 && directs[4] == true) { MapMobs[a][b][2]++; break; } //Right
}
// }
}
//Tu daj nową warto
console.log(MapMobsOrginal);
}
for(sendall in CLIENTS_MAP[a]) {
if(CLIENTS_MAP[a][sendall] != undefined) {
CLIENTS_MAP[a][sendall].emit('map', {'what': 'MobsOnMap', 'data': MapMobs[a]});
}
}
}
}, 10000); //TRUE - 10000
Jeśli ktoś czegoś nie rozumie to wytłumaczę

Wielkie dzięki za pomoc!
Jeszcze dorzucę jak wygląda to z poziomu konsoli:

tam gdzie mamy Up/Left/Right/Down:.... to po lewej jest jego aktualna koordynata x lub y ,a po prawej stronie jest wartość stała!