int generic_find(char *arg, int bitvector, struct char_data * ch, struct char_data ** tar_ch, struct obj_data ** tar_obj) { int o; //int i, found; char name[256]; *tar_ch = NULL; *tar_obj = NULL; one_argument(arg, name); if (!*name) return (0); if (IS_SET(bitvector, FIND_CHAR_ROOM)) { /* Find person in room */ if ((*tar_ch = get_char_vis(ch, name, FIND_CHAR_ROOM))) { return (FIND_CHAR_ROOM); } } if (IS_SET(bitvector, FIND_CHAR_WORLD)) { if ((*tar_ch = get_char_vis(ch, name, FIND_CHAR_WORLD))) { return (FIND_CHAR_WORLD); } } if (IS_SET(bitvector, FIND_OBJ_EQUIP)) { if ((*tar_obj = get_object_in_equip_vis(ch, name, ch->equipment, &o))) { return (FIND_OBJ_INV); } } if (IS_SET(bitvector, FIND_OBJ_INV)) { if ((*tar_obj = get_obj_in_list_vis(ch, name, ch->carrying))) { return (FIND_OBJ_INV); } } if (IS_SET(bitvector, FIND_OBJ_ROOM)) { if ((*tar_obj = get_obj_in_list_vis(ch, name, world[ch->in_room].contents))) { return (FIND_OBJ_ROOM); } } if (IS_SET(bitvector, FIND_OBJ_WORLD)) { if ((*tar_obj = get_obj_vis(ch, name))) { return (FIND_OBJ_WORLD); } } return (0); }
struct char_data *get_char_vis(struct char_data * ch, char *name) { struct char_data *i; int j = 0, number; char tmpname[MAX_INPUT_LENGTH]; char *tmp = tmpname; /* check the room first */ if ((i = get_char_vis(ch, name, FIND_CHAR_ROOM)) != NULL) return i; strcpy(tmp, name); if (!(number = get_number(&tmp))) { number = 1; tmp = name; } for (i = character_list; i && (j <= number); i = i->next) if (isname(tmp, i->player.name) && CAN_SEE(ch, i)) if (++j == number) return i; return NULL; }
void do_tell (struct char_data *ch, char *argument, int cmd) { struct char_data *vict; char name[100], message[MAX_STRING_LENGTH], buf[MAX_STRING_LENGTH]; if (IS_SET (ch->specials.act, PLR_NOTELL)) { send_to_char ("Your message didn't get through!!\n\r", ch); return; } half_chop (argument, name, message); if (!*name || !*message) send_to_char ("Who do you wish to tell what??\n\r", ch); else if (!(vict = get_char_vis (ch, name))) send_to_char ("No-one by that name here..\n\r", ch); else if (ch == vict) send_to_char ("You try to tell yourself something.\n\r", ch); else if ((GET_POS (vict) == POSITION_SLEEPING) || IS_SET (vict->specials.act, PLR_NOTELL)) { act ("$E can't hear you.", FALSE, ch, 0, vict, TO_CHAR); } else { sprintf (buf, "%s tells you '%s'\n\r", (IS_NPC (ch) ? ch->player.short_descr : GET_NAME (ch)), message); send_to_char (buf, vict); send_to_char ("Ok.\n\r", ch); } }
void sub_write(char *arg, char_data *ch, byte find_invis, int targets) { char str[MAX_INPUT_LENGTH * 2]; char type[MAX_INPUT_LENGTH], name[MAX_INPUT_LENGTH]; char *tokens[MAX_INPUT_LENGTH], *s, *p; void *otokens[MAX_INPUT_LENGTH]; char_data *to; obj_data *obj; int i, tmp; int sleep = 1, deaf = 0; if (!arg) return; tokens[0] = str; for (i = 0, p = arg, s = str; *p;) { switch (*p) { case '~': case '@': case '^': case '&': case '*': /* get char_data, move to next token */ type[i] = *p; *s = '\0'; p = any_one_name(++p, name); // See comment below. //(char_data *)otokens[i] = find_invis ? get_char(name) : get_char_vis(ch, name, FIND_CHAR_ROOM); // I'm not sure why "otokens[i]" was cast to a char_data type. // Doing so caused GCC to complain, so I removed it. // Bran - '11 otokens[i] = find_invis ? get_char(name) : get_char_vis(ch, name, FIND_CHAR_ROOM); tokens[++i] = ++s; break; case '`': /* get obj_data, move to next token */ type[i] = *p; *s = '\0'; p = any_one_name(++p, name); //(obj_data *)otokens[i] = find_invis ? (obj = get_obj(name)) : otokens[i] = find_invis ? (obj = get_obj(name)) : ((obj = get_obj_in_list_vis(ch, name, world[IN_ROOM(ch)].contents)) ? obj : (obj = get_object_in_equip_vis(ch, name, ch->equipment, &tmp)) ? obj : (obj = get_obj_in_list_vis(ch, name, ch->carrying))); //if (find_invis) obj = get_obj_in_room(&world[IN_ROOM(ch)], name); //else if (!(obj = get_obj_in_list_vis(ch, name, world[IN_ROOM(ch)].contents))) ; //else if (!(obj = get_object_in_equip_vis(ch, name, &tmp, ch->equipment))); //else obj = get_obj_in_list_vis(ch, name, ch->carrying); //(obj_data *)otokens[i] = obj; // Once again I'm not sure why this was cast. // See comment above. otokens[i] = obj; tokens[++i] = ++s; break; case '\\': p++; *s++ = *p++; break; default: *s++ = *p++; } } *s = '\0'; tokens[++i] = NULL; if (IS_SET(targets, TO_CHAR) && SENDOK(ch)) sub_write_to_char(ch, tokens, otokens, type); if (IS_SET(targets, TO_ROOM)) for (to = world[ch->in_room].people; to; to = to->next_in_room) if (to != ch && SENDOK(to)) sub_write_to_char(to, tokens, otokens, type); }
int generic_find(char *arg, int bitvector, struct char_data *ch, struct char_data **tar_ch, struct obj_data **tar_obj) { static char *ignore[] = { "the", "in", "on", "at", "\n" }; int i; char name[256]; bool found; found = FALSE; /* Eliminate spaces and "ignore" words */ while (*arg && !found) { for(; *arg == ' '; arg++) ; for(i=0; (name[i] = *(arg+i)) && (name[i]!=' '); i++) ; name[i] = 0; arg+=i; if (search_block(name, ignore, TRUE) > -1) found = TRUE; } if (!name[0]) return(0); *tar_ch = 0; *tar_obj = 0; if (IS_SET(bitvector, FIND_CHAR_ROOM)) { /* Find person in room */ if (*tar_ch = get_char_room_vis(ch, name)) { return(FIND_CHAR_ROOM); } } if (IS_SET(bitvector, FIND_CHAR_WORLD)) { if (*tar_ch = get_char_vis(ch, name)) { return(FIND_CHAR_WORLD); } } if (IS_SET(bitvector, FIND_OBJ_EQUIP)) { for(found=FALSE, i=0; i<MAX_WEAR && !found; i++) if (ch->equipment[i] && str_cmp(name, ch->equipment[i]->name) == 0) { *tar_obj = ch->equipment[i]; found = TRUE; } if (found) { return(FIND_OBJ_EQUIP); } } if (IS_SET(bitvector, FIND_OBJ_INV)) { if (IS_SET(bitvector, FIND_OBJ_ROOM)) { if (*tar_obj = get_obj_vis_accessible(ch, name)) { return(FIND_OBJ_INV); } } else { if (*tar_obj = get_obj_in_list_vis(ch, name, ch->carrying)) { return(FIND_OBJ_INV); } } } if (IS_SET(bitvector, FIND_OBJ_ROOM)) { if (*tar_obj = get_obj_in_list_vis(ch, name, real_roomp(ch->in_room)->contents)) { return(FIND_OBJ_ROOM); } } if (IS_SET(bitvector, FIND_OBJ_WORLD)) { if (*tar_obj = get_obj_vis(ch, name)) { return(FIND_OBJ_WORLD); } } return(0); }