rendered paste bodyvoid playerrequestsmove(int pid, int loc)
{
if(!canplayermove(pid))
{
//TODO: Siust paketa zaidejuij, kad tipo BEEP
return;
}
int ballx = playerlocx(pid);
int bally = playerlocy(pid);
int ballx_new;
int bally_new;
//I kuria puse eina zaidejas?
if (loc == 1) //LEFT
{
ballx_new = (ballx - 1);
bally_new = bally;
}
else if (loc == 2) //UP
{
ballx_new = ballx;
bally_new = (bally - 1);
}
else if (loc == 3) //RIGHT
{
ballx_new = (ballx + 1);
bally_new = bally;
}
else
{
ballx_new = ballx;
bally_new = (bally + 1);
}
//Jei sekanciam taske nieko ner, tadu iskart judam nieko toliau netikrindami
if ((ballx_new < 1) || (ballx_new > 16) || (bally_new < 1) || (bally_new > 16) || (playerbyloc(ballx_new,bally_new)))
{
//TODO: Siunciam paketa, kad niekur neini (BEEP)
return;
}
else if (getobjbyloc(ballx_new,bally_new))
{
unsigned int obj = getobjbyid(getobjbyloc(ballx_new,bally_new));
if ((obj >= unmovable_min) && (obj <= unmovable_max) || (obj >= padid_min) && (obj <= padid_max))
{
//TODO: Siunciam paketa, kad niekur neini (BEEP)
return;
}
else if ((boxid_min >= obj) && (boxid_max <= obj)) //jeigu kitas objektas, tada reiks kruvos checku, kaip stumdos, kur pasistums ir pan
{
if (player_cant_move_boxes[(pid - 20)])
{
//TODO: Siunciam paketa, kad niekur neini (BEEP)
return;
}
unsigned int nextpos;
unsigned int obj_new;
switch(loc)
{
case 1: //##!LEFT!##
nextpos = (ballx_new - 1);
obj_new = getobjbyid(getobjbyloc(nextpos,bally));
if ((obj_new >= unmovable_min) && (obj_new <= unmovable_min) || (obj_new >= boxid_min) && (obj_new >= boxid_max) || (playerbyloc(nextpos,bally_new)))
{
//TODO: Siunciam paketa, kad niekur neini (BEEP)
return;
}
else if (isdeathpoint(nextpos,bally))
{
changeobjtype(getobjbyloc(ballx_new,bally_new),32);
playermove(pid,ballx_new,bally_new);
moveobj(ballx_new,bally_new,nextpos,bally);
//Broadcastint
//TODO: Paleist timeri, kuris istrintu tai po time_to_remove_dead_box sekundziu
//timers uz time_to_remove_dead_box s. deleteobj(getobjbyloc(ballx_new,bally_new))
return;
}
else if ((obj_new >= padid_min) && (obj_new <= padid_max))
{
//jei niekas nestovi ant pado, tadu deze ivaroma ten, ir priskaiciujami taskai ar tai efektas
if (playerbyloc(nextpos,bally))
{
//TODO: Siunciam paketa, kad niekur neini (BEEP)
return;
}
else if (player_pad_locked[(pid - 20)])
{
//TODO: Siunciam paketa, kad niekur neini (BEEP)
return;
}
//Gaunam pid, kuriam priklauso pad'as, ant kurio uzvedama deze
unsigned pid2 = (obj_new - 10);
playeraddscore(pid2,generatescore(obj));
//TODO: Broadcastinam paketa apie tai
deleteobj(getobjbyloc(ballx_new,bally_new));
playermove(pid,ballx_new,bally_new);
}
else
{
playermove(pid,ballx_new,bally_new);
moveobj(ballx_new,bally_new,nextpos,bally);
//Broadcastint
}
break;
case 2: //##!UP!##
nextpos = (bally_new - 1);
obj_new = getobjbyid(getobjbyloc(ballx,nextpos));
if ((obj_new >= unmovable_min) && (obj_new <= unmovable_min) || (obj_new >= boxid_min) && (obj_new >= boxid_max) || (playerbyloc(nextpos,bally_new)))
{
//TODO: Siunciam paketa, kad niekur neini (BEEP)
return;
}
else if (isdeathpoint(ballx,nextpos))
{
changeobjtype(getobjbyloc(ballx_new,bally_new),32);
playermove(pid,ballx_new,bally_new);
moveobj(ballx_new,bally_new,nextpos,bally);
//Broadcastint
//TODO: Paleist timeri, kuris istrintu tai po time_to_remove_dead_box sekundziu
//timers uz time_to_remove_dead_box s. deleteobj(getobjbyloc(ballx_new,bally_new))
return;
}
else if ((obj_new >= padid_min) && (obj_new <= padid_max))
{
//jei niekas nestovi ant pado, tadu deze ivaroma ten, ir priskaiciujami taskai ar tai efektas
if (playerbyloc(nextpos,bally))
{
//TODO: Siunciam paketa, kad niekur neini (BEEP)
return;
}
else if (player_pad_locked[(pid - 20)])
{
//TODO: Siunciam paketa, kad niekur neini (BEEP)
return;
}
//Gaunam pid, kuriam priklauso pad'as, ant kurio uzvedama deze
unsigned pid2 = (obj_new - 10);
playeraddscore(pid2,generatescore(obj));
//TODO: Broadcastinam paketa apie tai
deleteobj(getobjbyloc(ballx_new,bally_new));
playermove(pid,ballx_new,bally_new);
}
else
{
playermove(pid,ballx_new,bally_new);
moveobj(ballx_new,bally_new,nextpos,bally);
//Broadcastint
}
break;
case 3://##!RIGHT!##
nextpos = (ballx_new + 1);
obj_new = getobjbyid(getobjbyloc(nextpos,bally));
if ((obj_new >= unmovable_min) && (obj_new <= unmovable_min) || (obj_new >= boxid_min) && (obj_new >= boxid_max) || (playerbyloc(nextpos,bally_new)))
{
//TODO: Siunciam paketa, kad niekur neini (BEEP)
return;
}
else if (isdeathpoint(nextpos,bally))
{
changeobjtype(getobjbyloc(ballx_new,bally_new),32);
playermove(pid,ballx_new,bally_new);
moveobj(ballx_new,bally_new,nextpos,bally);
//Broadcastint
//TODO: Paleist timeri, kuris istrintu tai po time_to_remove_dead_box sekundziu
//timers uz time_to_remove_dead_box s. deleteobj(getobjbyloc(ballx_new,bally_new))
return;
}
else if ((obj_new >= padid_min) && (obj_new <= padid_max))
{
//jei niekas nestovi ant pado, tadu deze ivaroma ten, ir priskaiciujami taskai ar tai efektas
if (playerbyloc(nextpos,bally))
{
//TODO: Siunciam paketa, kad niekur neini (BEEP)
return;
}
else if (player_pad_locked[(pid - 20)])
{
//TODO: Siunciam paketa, kad niekur neini (BEEP)
return;
}
//Gaunam pid, kuriam priklauso pad'as, ant kurio uzvedama deze
unsigned pid2 = (obj_new - 10);
playeraddscore(pid2,generatescore(obj));
//TODO: Broadcastinam paketa apie tai
deleteobj(getobjbyloc(ballx_new,bally_new));
playermove(pid,ballx_new,bally_new);
}
else
{
playermove(pid,ballx_new,bally_new);
moveobj(ballx_new,bally_new,nextpos,bally);
//Broadcastint
}
break;
case 4://##!DOWN!##
nextpos = (bally_new + 1);
obj_new = getobjbyid(getobjbyloc(ballx,nextpos));
if ((obj_new >= unmovable_min) && (obj_new <= unmovable_min) || (obj_new >= boxid_min) && (obj_new >= boxid_max) || (playerbyloc(nextpos,bally_new)))
{
//TODO: Siunciam paketa, kad niekur neini (BEEP)
return;
}
else if (isdeathpoint(ballx,nextpos))
{
changeobjtype(getobjbyloc(ballx_new,bally_new),32);
playermove(pid,ballx_new,bally_new);
moveobj(ballx_new,bally_new,nextpos,bally);
//Broadcastint
//TODO: Paleist timeri, kuris istrintu tai po time_to_remove_dead_box sekundziu
//timers uz time_to_remove_dead_box s. deleteobj(getobjbyloc(ballx_new,bally_new))
return;
}
else if ((obj_new >= padid_min) && (obj_new <= padid_max))
{
//jei niekas nestovi ant pado, tadu deze ivaroma ten, ir priskaiciujami taskai ar tai efektas
if (playerbyloc(nextpos,bally))
{
//TODO: Siunciam paketa, kad niekur neini (BEEP)
return;
}
else if (player_pad_locked[(pid - 20)])
{
//TODO: Siunciam paketa, kad niekur neini (BEEP)
return;
}
//Gaunam pid, kuriam priklauso pad'as, ant kurio uzvedama deze
unsigned pid2 = (obj_new - 10);
playeraddscore(pid2,generatescore(obj));
//TODO: Broadcastinam paketa apie tai
deleteobj(getobjbyloc(ballx_new,bally_new));
playermove(pid,ballx_new,bally_new);
}
else
{
playermove(pid,ballx_new,bally_new);
moveobj(ballx_new,bally_new,nextpos,bally);
//Broadcastint
}
break;
}
}
else
cout << "Bandoma pajudint nezinoma objekta: " << obj;
}
else {
//TODO: Kelias laisvas, siunciam paketa, kad zaidejas pajudejo, ir pastumiam ji i nauja vieta
playermove(pid,ballx_new,bally_new);
}
//1 - left; 2 up; 3 - right; 4 - down
}