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, 47 insertions, 32 deletions
diff --git a/src/server_reqs.c b/src/server_reqs.c
index 167331d..fffdee1 100644
--- a/src/server_reqs.c
+++ b/src/server_reqs.c
@@ -157,42 +157,53 @@ static void req_send_desc(unsigned char *data, size_t datalen, struct child_data
room_id id = sender->room;
while(1)
{
- debugf("Iterating over object name...\n");
size_t n_objs;
- const struct multimap_list *iter= room_obj_iterate(id, &save, &n_objs);
+ const struct multimap_list *iter = room_obj_iterate(id, &save, &n_objs);
id = ROOM_NONE;
if(!iter)
break;
const char *name = iter->key;
struct object_t *obj = iter->val;
- if(!strcmp(name, obj->name))
+
+ debugf("*** ITERATING OVER OBJECT IN ROOM ***\n");
+ debugf("hidden: %d\n", obj->hidden);
+ debugf("compare: %s %s\n", obj->name, name);
+
+ buf[0] = '\0';
+
+ if(!obj->hidden)
{
- if(n_objs == 1)
+ if(!strcmp(name, obj->name))
{
- char *article = (is_vowel(name[0])?"an":"a");
- strlcat(buf, "There is ", sizeof(buf));
- if(obj->default_article)
+ if(n_objs == 1)
{
- strlcat(buf, article, sizeof(buf));
- strlcat(buf, " ", sizeof(buf));
+ char *article = (is_vowel(name[0])?"an":"a");
+ strlcat(buf, "There is ", sizeof(buf));
+ if(obj->default_article)
+ {
+ strlcat(buf, article, sizeof(buf));
+ strlcat(buf, " ", sizeof(buf));
+ }
+ strlcat(buf, name, sizeof(buf));
+ strlcat(buf, " here.\n", sizeof(buf));
+ }
+ else
+ {
+ strlcat(buf, "There are ", sizeof(buf));
+ char n[32];
+ snprintf(n, sizeof(n), "%lu ", n_objs);
+ strlcat(buf, n, sizeof(buf));
+ strlcat(buf, name, sizeof(buf));
+ strlcat(buf, "s here.\n", sizeof(buf));
}
- strlcat(buf, name, sizeof(buf));
- strlcat(buf, " here.\n", sizeof(buf));
- }
- else
- {
- strlcat(buf, "There are ", sizeof(buf));
- char n[32];
- snprintf(n, sizeof(n), "%lu ", n_objs);
- strlcat(buf, n, sizeof(buf));
- strlcat(buf, name, sizeof(buf));
- strlcat(buf, "s here.\n", sizeof(buf));
}
+
+ send_msg(sender, "%s", buf);
}
+ else
+ debugf("OBJECT IS HIDDEN\n");
}
-
- send_packet(sender, REQ_BCASTMSG, buf, strlen(buf));
}
static void req_send_roomname(unsigned char *data, size_t datalen, struct child_data *sender)
@@ -333,7 +344,7 @@ static void req_look_at(unsigned char *data, size_t datalen, struct child_data *
if(inv_list)
{
send_msg(sender, "In inventory:\n");
- idx = print_objlist(sender, inv_list, idx, n_objs);
+ print_objlist(sender, inv_list, idx, n_objs);
}
if(!room_list && !inv_list)
@@ -355,10 +366,12 @@ static void req_take(unsigned char *data, size_t datalen, struct child_data *sen
if(obj->class->hook_take && !obj->class->hook_take(obj, sender))
{
send_msg(sender, "You can't take that.\n");
- return;
+ iter = next;
+ continue;
}
userdb_add_obj(sender->user, obj);
+ room_obj_del_by_ptr(sender->room, obj);
send_msg(sender, "Taken.\n");
}
@@ -367,8 +380,6 @@ static void req_take(unsigned char *data, size_t datalen, struct child_data *sen
iter = next;
}
- room_obj_del(sender->room, (const char*)data);
-
server_save_state(false);
}
else
@@ -452,17 +463,21 @@ static void req_drop(unsigned char *data, size_t datalen, struct child_data *sen
while(iter)
{
+ const struct multimap_list *next = iter->next;
struct object_t *obj = iter->val;
- struct object_t *dup = obj_dup(obj);
- room_obj_add(sender->room, dup);
+ if(!obj->class->hook_drop || (obj->class->hook_drop && obj->class->hook_drop(obj, sender)))
+ {
+ send_msg(sender, "Dropped.\n");
+ room_obj_add(sender->room, obj_dup(obj));
+ userdb_del_obj_by_ptr(sender->user, obj);
+ }
+ else
+ send_msg(sender, "You cannot drop that.\n");
- send_msg(sender, "Dropped.\n");
- iter = iter->next;
+ iter = next;
}
- multimap_delete_all(user->objects, (const char*)data);
-
server_save_state(false);
}