So here is the almost finished version. What I did was create a mob with the same name as the object, and have it cast on the victim wand style, so there is no word uttering spam.
Code:
SPECIAL(spectral)
{ struct obj_data *find_obj_by_vnum(int vnum);
struct obj_data *obj;
obj = ch->equipment[WEAR_NECK_1];
struct char_data *vict = FIGHTING(ch);
int num;
struct char_data *mob;
int being_worn = (TRUE);
if (obj) {if (obj_index[obj->item_number].vnum == 34707) {being_worn = (TRUE);}}
if (cmd || GET_POS(ch) != POS_FIGHTING || !FIGHTING(ch) || !being_worn)
return (FALSE);
switch (rand_number(0, 3)) {
mob = read_mobile(num, REAL);
case 0:
act("\r\n\t[f330]$p begins to \t[F555]pulse\tn and \t[F550]vibrate\tn!!!\tn\r\n",TRUE,ch,obj,0,TO_CHAR);
act("\r\n$p begins to \t[F555]pulse\tn and \t[F550]vibrate\tn!!!!!\r\n",TRUE,ch,obj,0,TO_ROOM);
num = 3657;
mob = read_mobile(num, REAL);
char_to_room(mob, IN_ROOM(ch));
set_fighting(mob, vict);
call_magic(mob, vict, NULL, 26, 30, CAST_WAND);
call_magic(mob, vict, NULL, 26, 30, CAST_WAND);
call_magic(mob, vict, NULL, 26, 30, CAST_WAND);
extract_char(mob);
return (TRUE);
break;
case 1:
act("\r\n\t[f330]$p begins to \t[F555]pulse\tn and \t[F550]vibrate\tn!!!\tn\r\n",TRUE,ch,obj,0,TO_CHAR);
act("\r\n$p begins to \t[F555]pulse\tn and \t[F550]vibrate\tn!!!!!\r\n",TRUE,ch,obj,0,TO_ROOM);
num = 3657;
mob = read_mobile(num, REAL);
char_to_room(mob, IN_ROOM(ch));
set_fighting(mob, vict);
call_magic(mob, vict, NULL, 26, 30, CAST_WAND);
call_magic(mob, vict, NULL, 26, 30, CAST_WAND);
call_magic(mob, ch, NULL, 28, 30, CAST_WAND);
extract_char(mob);
return (TRUE);
break;
case 2:
act("\r\n\t[f330]$p begins to \t[F555]pulse\tn and \t[F550]vibrate\tn!!!\tn\r\n",TRUE,ch,obj,0,TO_CHAR);
act("\r\n$p begins to \t[F555]pulse\tn and \t[F550]vibrate\tn!!!!!\r\n",TRUE,ch,obj,0,TO_ROOM);
num = 3657;
mob = read_mobile(num, REAL);
char_to_room(mob, IN_ROOM(ch));
set_fighting(mob, vict);
call_magic(mob, vict, NULL, 26, 30, CAST_WAND);
call_magic(mob, vict, NULL, 26, 30, CAST_WAND);
call_magic(mob, vict, NULL, 26, 30, CAST_WAND);
call_magic(mob, ch, NULL, 28, 30, CAST_WAND);
call_magic(mob, ch, NULL, 28, 30, CAST_WAND);
extract_char(mob);
return (TRUE);
break;
case 3:
act("\r\n\t[f330]$p begins to \t[F555]pulse\tn and \t[F550]vibrate\tn!!!\tn\r\n",TRUE,ch,obj,0,TO_CHAR);
act("\r\n$p begins to \t[F555]pulse\tn and \t[F550]vibrate\tn!!!!!\r\n",TRUE,ch,obj,0,TO_ROOM);
num = 3657;
mob = read_mobile(num, REAL);
char_to_room(mob, IN_ROOM(ch));
set_fighting(mob, vict);
call_magic(mob, vict, NULL, 26, 30, CAST_WAND);
call_magic(mob, vict, NULL, 26, 30, CAST_WAND);
call_magic(mob, vict, NULL, 26, 30, CAST_WAND);
call_magic(mob, vict, NULL, 26, 30, CAST_WAND);
call_magic(mob, ch, NULL, 28, 30, CAST_WAND);
call_magic(mob, ch, NULL, 28, 30, CAST_WAND);
call_magic(mob, ch, NULL, 28, 30, CAST_WAND);
extract_char(mob);
return (TRUE);
break;
default: return (FALSE);}
}