diff options
Diffstat (limited to 'src/game.cpp')
-rw-r--r-- | src/game.cpp | 84 |
1 files changed, 79 insertions, 5 deletions
diff --git a/src/game.cpp b/src/game.cpp index 3d7fa64f..c3157aab 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -24,6 +24,7 @@ #include "main.h" #include "map.h" #include "being.h" +#include "floor_item.h" #include "log.h" #include "gui/chat.h" #include "gui/gui.h" @@ -242,7 +243,54 @@ void do_input() { state = EXIT; } - + + if (keysym.sym == SDLK_g) + { + // Get the item code + + int id = 0; + id = find_floor_item_by_cor(player_node->x, player_node->y); + if (id != 0) + { + WFIFOW(0) = net_w_value(0x009f); + WFIFOL(2) = net_l_value(id); + WFIFOSET(6); + } + else { + switch (player_node->direction) { + case NORTH: + id = find_floor_item_by_cor(player_node->x, player_node->y-1); + break; + case SOUTH: + id = find_floor_item_by_cor(player_node->x, player_node->y+1); + break; + case WEST: + id = find_floor_item_by_cor(player_node->x-1, player_node->y); + break; + case EAST: + id = find_floor_item_by_cor(player_node->x+1, player_node->y); + break; + case NW: + id = find_floor_item_by_cor(player_node->x-1, player_node->y-1); + break; + case NE: + id = find_floor_item_by_cor(player_node->x+1, player_node->y-1); + break; + case SW: + id = find_floor_item_by_cor(player_node->x-1, player_node->y+1); + break; + case SE: + id = find_floor_item_by_cor(player_node->x+1, player_node->y+1); + break; + default: + break; + } + WFIFOW(0) = net_w_value(0x009f); + WFIFOL(2) = net_l_value(id); + WFIFOSET(6); + } + } + if (keysym.sym == SDLK_f) { if (keysym.mod & KMOD_CTRL) @@ -406,6 +454,7 @@ void do_parse() { char *temp; char direction; Being *being = NULL; + FloorItem *floorItem = NULL; int len, n_items; // We need at least 2 bytes to identify a packet @@ -989,13 +1038,38 @@ void do_parse() { case 0x010c: chatBox->chat_log("MVP player", BY_SERVER); break; + // Item is found + case 0x009d: + floorItem = new FloorItem(); + floorItem->id = net_w_value(RFIFOW(6)); + floorItem->x = net_w_value(RFIFOW(9)); + floorItem->y = net_w_value(RFIFOW(11)); + floorItem->subx = net_b_value(RFIFOB(15)); + floorItem->suby = net_b_value(RFIFOB(16)); + floorItem->int_id = net_l_value(RFIFOL(2)); + add_floor_item(floorItem); + break; // Item drop case 0x009e: - WFIFOW(0) = net_w_value(0x009f); - WFIFOL(2) = net_l_value(RFIFOL(2)); - WFIFOSET(6); - // To be fixed or you will pick up again what you drop + floorItem = new FloorItem(); + floorItem->id = net_w_value(RFIFOW(6)); + floorItem->x = net_w_value(RFIFOW(9)); + floorItem->y = net_w_value(RFIFOW(11)); + floorItem->subx = net_b_value(RFIFOB(13)); + floorItem->suby = net_b_value(RFIFOB(14)); + floorItem->int_id = net_l_value(RFIFOL(2)); + add_floor_item(floorItem); break; + // Item disappearing + case 0x00a1: + floorItem = find_floor_item_by_id(net_l_value(RFIFOL(2))); + if (floorItem != NULL) { + remove_floor_item(net_l_value(RFIFOL(2))); + } + else { + remove_floor_item(net_l_value(RFIFOL(2))); + } + break; // Next button in NPC dialog case 0x00b5: strcpy(npc_button, "Next"); |