diff options
| author | Franklin Wei <git@fwei.tk> | 2016-03-29 11:47:35 -0400 |
|---|---|---|
| committer | Franklin Wei <git@fwei.tk> | 2016-03-29 11:47:35 -0400 |
| commit | 8426162eb0a463118e77e3fe32b96552565584a1 (patch) | |
| tree | 0ca533cd57581fbc71f26e2d5bf0fe108ee9ba95 /src/server_reqs.c | |
| parent | 2687778cf7c099e47de410d62d26d874f4dcebba (diff) | |
| download | netcosm-8426162eb0a463118e77e3fe32b96552565584a1.zip netcosm-8426162eb0a463118e77e3fe32b96552565584a1.tar.gz netcosm-8426162eb0a463118e77e3fe32b96552565584a1.tar.bz2 netcosm-8426162eb0a463118e77e3fe32b96552565584a1.tar.xz | |
add things
Diffstat (limited to 'src/server_reqs.c')
| -rw-r--r-- | src/server_reqs.c | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/src/server_reqs.c b/src/server_reqs.c index 4a147ae..eadae9f 100644 --- a/src/server_reqs.c +++ b/src/server_reqs.c @@ -150,7 +150,7 @@ static void req_send_desc(unsigned char *data, size_t datalen, struct child_data send_packet(sender, REQ_BCASTMSG, (void*)room->data.desc, strlen(room->data.desc)); send_packet(sender, REQ_PRINTNEWLINE, NULL, 0); - + /* list objects */ char buf[MSG_MAX]; buf[0] = 0; @@ -230,20 +230,32 @@ static void req_set_room(unsigned char *data, size_t datalen, struct child_data static void req_move_room(unsigned char *data, size_t datalen, struct child_data *sender) { (void) data; (void) datalen; (void) sender; + + int status = 0; + enum direction_t dir = *((enum direction_t*)data); struct room_t *current = room_get(sender->room); - room_user_del(sender->room, sender); - - /* TODO: checking */ + /* TODO: bounds checking on `dir' */ room_id new = current->adjacent[dir]; - int status = 0; - if(new != ROOM_NONE) + struct room_t *new_room = room_get(new); + + if((!new_room->data.hook_enter || + (new_room->data.hook_enter && new_room->data.hook_enter(new, sender))) && + (!current->data.hook_leave || + (current->data.hook_leave && current->data.hook_leave(sender->room, sender)))) { - child_set_room(sender, new); - status = 1; + room_user_del(sender->room, sender); + + if(new != ROOM_NONE) + { + + child_set_room(sender, new); + status = 1; + } + else + send_msg(sender, "You cannot go that way.\n"); } - send_packet(sender, REQ_MOVE, &status, sizeof(status)); } |