void 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 }