… | |
… | |
838 | * Tero.Haatanen@lut.fi ] |
838 | * Tero.Haatanen@lut.fi ] |
839 | */ |
839 | */ |
840 | static void |
840 | static void |
841 | look_at (player *pl, int dx, int dy) |
841 | look_at (player *pl, int dx, int dy) |
842 | { |
842 | { |
|
|
843 | dynbuf_text buf; |
843 | object *ob = pl->ob; |
844 | object *ob = pl->ob; |
844 | |
845 | |
845 | maptile *m = pl->observe->map; |
846 | mapxy pos (pl->observe); |
846 | sint16 x = pl->observe->x + dx; |
847 | pos.move (dx, dy); |
847 | sint16 y = pl->observe->y + dy; |
|
|
848 | |
848 | |
849 | if (!m) |
849 | if (pos.normalise ()) |
850 | return; |
|
|
851 | |
|
|
852 | if (!xy_normalise (m, x, y)) |
|
|
853 | { |
|
|
854 | new_draw_info (NDI_UNIQUE, 0, ob, "You see nothing there."); |
|
|
855 | return; |
|
|
856 | } |
|
|
857 | |
|
|
858 | int flag = 0; |
|
|
859 | |
|
|
860 | for (object *tmp = m->at (x, y).top; tmp; tmp = tmp->below) |
850 | for (object *tmp = pos->top; tmp; tmp = tmp->below) |
861 | { |
851 | { |
862 | if (tmp->invisible && !QUERY_FLAG (ob, FLAG_WIZ)) |
852 | if (tmp->invisible && !QUERY_FLAG (ob, FLAG_WIZ)) |
863 | continue; |
853 | continue; |
864 | |
854 | |
865 | if (!flag) |
|
|
866 | { |
|
|
867 | if (dx || dy) |
|
|
868 | new_draw_info (NDI_UNIQUE, 0, ob, "There you see:"); |
|
|
869 | else |
|
|
870 | new_draw_info (NDI_UNIQUE, 0, ob, "You see:"); |
|
|
871 | |
|
|
872 | flag = 1; |
|
|
873 | } |
|
|
874 | |
|
|
875 | if (QUERY_FLAG (ob, FLAG_WIZ)) |
855 | if (QUERY_FLAG (ob, FLAG_WIZ)) |
876 | new_draw_info_format (NDI_UNIQUE, 0, ob, "- %s (%d).", query_name (tmp), tmp->count); |
856 | buf.printf ("- %s (%d).\n", query_name (tmp), tmp->count); |
877 | else |
857 | else |
878 | new_draw_info_format (NDI_UNIQUE, 0, ob, "- %s.", query_name (tmp)); |
858 | buf.printf ("- %s.\n", query_name (tmp)); |
879 | |
859 | |
880 | if (((tmp->inv != NULL || (tmp->head && tmp->head->inv)) && |
860 | object *head = tmp->head_ (); |
881 | (tmp->type != CONTAINER && tmp->type != FLESH)) || QUERY_FLAG (ob, FLAG_WIZ)) |
|
|
882 | inventory (ob, tmp->head == NULL ? tmp : tmp->head); |
|
|
883 | |
861 | |
|
|
862 | if (head->inv) |
|
|
863 | if ((head->type != CONTAINER && head->type != FLESH) |
|
|
864 | || QUERY_FLAG (ob, FLAG_WIZ)) |
|
|
865 | buf << head->query_inventory (ob, " "); |
|
|
866 | |
884 | if (QUERY_FLAG (tmp, FLAG_IS_FLOOR) && !QUERY_FLAG (ob, FLAG_WIZ)) /* don't continue under the floor */ |
867 | if (QUERY_FLAG (tmp, FLAG_IS_FLOOR) && !QUERY_FLAG (ob, FLAG_WIZ)) /* don't continue under the floor */ |
885 | break; |
868 | break; |
886 | } |
869 | } |
887 | |
870 | |
888 | if (!flag) |
871 | if (buf.empty ()) |
889 | { |
872 | pl->failmsg ("You see nothing there."); |
890 | if (dx || dy) |
|
|
891 | new_draw_info (NDI_UNIQUE, 0, ob, "You see nothing there."); |
|
|
892 | else |
873 | else |
893 | new_draw_info (NDI_UNIQUE, 0, ob, "You see nothing."); |
874 | pl->infobox (MSG_CHANNEL ("lookat"), buf); |
894 | } |
|
|
895 | } |
875 | } |
896 | |
876 | |
897 | /** Client wants to look at some object. Lets do so. */ |
877 | /** Client wants to look at some object. Lets do so. */ |
898 | void |
878 | void |
899 | LookAt (char *buf, int len, player *pl) |
879 | LookAt (char *buf, int len, player *pl) |