aboutsummaryrefslogtreecommitdiff
path: root/src/server_reqs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/server_reqs.c')
-rw-r--r--src/server_reqs.c79
1 files changed, 63 insertions, 16 deletions
diff --git a/src/server_reqs.c b/src/server_reqs.c
index 0c4c710..689c2be 100644
--- a/src/server_reqs.c
+++ b/src/server_reqs.c
@@ -272,6 +272,51 @@ static void req_look_at(unsigned char *data, size_t datalen, struct child_data *
}
}
+static void req_take(unsigned char *data, size_t datalen, struct child_data *sender)
+{
+ (void) datalen;
+ struct object_t *obj = room_obj_get(sender->room, (const char*)data);
+ if(obj)
+ {
+ struct object_t *dup = obj_dup(obj);
+ hash_insert(userdb_lookup(sender->user)->objects,
+ dup->name, dup);
+
+ room_obj_del(sender->room, (const char*)data);
+
+ world_save(WORLDFILE);
+ }
+ else
+ {
+ const char *msg = "I don't know what that is.\n";
+ send_packet(sender, REQ_BCASTMSG, (void*)msg, strlen(msg));
+ }
+}
+
+static void req_inventory(unsigned char *data, size_t datalen, struct child_data *sender)
+{
+ (void) datalen;
+ (void) data;
+
+ void *ptr = userdb_lookup(sender->user)->objects, *save;
+ char buf[MSG_MAX] = "You currently have:\n";
+
+ send_packet(sender, REQ_BCASTMSG, (void*)buf, strlen(buf));
+
+ while(1)
+ {
+ struct object_t *obj = hash_iterate(ptr, &save, NULL);
+ if(!obj)
+ break;
+ ptr = NULL;
+ int len = snprintf(buf, sizeof(buf), "A %s\n", obj->name);
+ send_packet(sender, REQ_BCASTMSG, (void*)buf, len);
+ }
+ const char *msg = "Nothing!\n";
+ if(ptr)
+ send_packet(sender, REQ_BCASTMSG, (void*)msg, strlen(msg));
+}
+
static const struct child_request {
unsigned char code;
@@ -286,22 +331,24 @@ static const struct child_request {
void (*finalize)(unsigned char *data, size_t len, struct child_data *sender);
} requests[] = {
- { REQ_NOP, false, CHILD_NONE, NULL, NULL, },
- { REQ_BCASTMSG, true, CHILD_ALL, req_pass_msg, NULL, },
- { REQ_LISTCLIENTS, false, CHILD_ALL, req_send_clientinfo, req_send_geninfo, },
- { REQ_CHANGESTATE, true, CHILD_SENDER, req_change_state, NULL, },
- { REQ_CHANGEUSER, true, CHILD_SENDER, req_change_user, NULL, },
- { REQ_KICK, true, CHILD_ALL, req_kick_client, NULL, },
- { REQ_WAIT, false, CHILD_NONE, NULL, req_wait, },
- { REQ_GETROOMDESC, false, CHILD_NONE, NULL, req_send_desc, },
- { REQ_GETROOMNAME, false, CHILD_NONE, NULL, req_send_roomname, },
- { REQ_SETROOM, true, CHILD_NONE, NULL, req_set_room, },
- { REQ_MOVE, true, CHILD_NONE, NULL, req_move_room, },
- { REQ_GETUSERDATA, true, CHILD_NONE, NULL, req_send_user, },
- { REQ_DELUSERDATA, true, CHILD_NONE, NULL, req_del_user, },
- { REQ_ADDUSERDATA, true, CHILD_NONE, NULL, req_add_user, },
- { REQ_KICKALL, true, CHILD_ALL_BUT_SENDER, req_kick_always, NULL, },
- { REQ_LOOKAT, true, CHILD_NONE, NULL, req_look_at, },
+ { REQ_NOP, false, CHILD_NONE, NULL, NULL, },
+ { REQ_BCASTMSG, true, CHILD_ALL, req_pass_msg, NULL, },
+ { REQ_LISTCLIENTS, false, CHILD_ALL, req_send_clientinfo, req_send_geninfo, },
+ { REQ_CHANGESTATE, true, CHILD_SENDER, req_change_state, NULL, },
+ { REQ_CHANGEUSER, true, CHILD_SENDER, req_change_user, NULL, },
+ { REQ_KICK, true, CHILD_ALL, req_kick_client, NULL, },
+ { REQ_WAIT, false, CHILD_NONE, NULL, req_wait, },
+ { REQ_GETROOMDESC, false, CHILD_NONE, NULL, req_send_desc, },
+ { REQ_GETROOMNAME, false, CHILD_NONE, NULL, req_send_roomname, },
+ { REQ_SETROOM, true, CHILD_NONE, NULL, req_set_room, },
+ { REQ_MOVE, true, CHILD_NONE, NULL, req_move_room, },
+ { REQ_GETUSERDATA, true, CHILD_NONE, NULL, req_send_user, },
+ { REQ_DELUSERDATA, true, CHILD_NONE, NULL, req_del_user, },
+ { REQ_ADDUSERDATA, true, CHILD_NONE, NULL, req_add_user, },
+ { REQ_KICKALL, true, CHILD_ALL_BUT_SENDER, req_kick_always, NULL, },
+ { REQ_LOOKAT, true, CHILD_NONE, NULL, req_look_at, },
+ { REQ_TAKE, true, CHILD_NONE, NULL, req_take },
+ { REQ_PRINTINVENTORY, false, CHILD_NONE, NULL, req_inventory },
//{ REQ_ROOMMSG, true, CHILD_ALL, req_send_room_msg, NULL, },
};