--- deliantra/server/server/move.c 2006/02/22 18:03:22 1.1.1.2 +++ deliantra/server/server/move.c 2006/02/03 07:25:25 1.2 @@ -31,6 +31,8 @@ #include #endif +extern int same_party (partylist *a, partylist *b); + /* * move_object() tries to move object op in the direction "dir". * If it fails (something blocks the passage), it returns 0, @@ -125,9 +127,9 @@ * on edge of map, +=x, +=y doesn't make correct coordinates. */ for(tmp = op; tmp != NULL; tmp = tmp->more) { - tmp->x += freearr_x[dir]; - tmp->y += freearr_y[dir]; - tmp->map = get_map_from_coord(tmp->map, &tmp->x, &tmp->y); + tmp->x = newx + tmp->arch->clone.x; + tmp->y = newy + tmp->arch->clone.y; + tmp->map = m; } /* insert_ob_in_map will deal with any tiling issues */ @@ -139,21 +141,6 @@ op->contr->socket.update_look=1; op->contr->socket.look_position=0; } - else if (op->type == TRANSPORT) { - object *pl; - - for (pl=op->inv; pl; pl=pl->below) { - if (pl->type == PLAYER) { - pl->contr->do_los=1; - pl->map = op->map; - pl->x = op->x; - pl->y = op->y; - esrv_map_scroll(&pl->contr->socket, freearr_x[dir],freearr_y[dir]); - pl->contr->socket.update_look=1; - pl->contr->socket.look_position=0; - } - } - } return 1; /* this shouldn't be reached */ } @@ -412,7 +399,14 @@ /* player change place with his pets or summoned creature */ /* TODO: allow multi arch pushing. Can't be very difficult */ - if (who->more == NULL && owner == pusher) { + if (who->more == NULL + && + ( + (owner && owner->contr && pusher->contr + && same_party (owner->contr->party, pusher->contr->party)) + || owner == pusher + ) + ) { int temp; mapstruct *m;