aboutsummaryrefslogtreecommitdiff
path: root/src/server_reqs.c
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2016-03-29 11:47:35 -0400
committerFranklin Wei <git@fwei.tk>2016-03-29 11:47:35 -0400
commit8426162eb0a463118e77e3fe32b96552565584a1 (patch)
tree0ca533cd57581fbc71f26e2d5bf0fe108ee9ba95 /src/server_reqs.c
parent2687778cf7c099e47de410d62d26d874f4dcebba (diff)
downloadnetcosm-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.c30
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));
}