CODE: Corpse Looting.

From: Fionn Colvin (fcolvin@metz.une.edu.au)
Date: 05/09/96


Hello,
      After receiving lots of info an this topic I have added some code 
which does the trick. It means that only the players whose corpse it is 
can loot the corpse. It also means that fido's dont eat player corpses. 
The only change is that now when a player want to get stuff from his/her 
corpse he/she has to type [get all pcorpse] rather than [get all corpse].


In fight.c find make_corpse, than add and change the following between
the ----------'s:

  corpse->in_room = NOWHERE;

----------------------------
  if (IS_NPC(ch))
    corpse->name = str_dup("corpse");
  else
    corpse->name = str_dup("pcorpse");
----------------------------

  sprintf(buf2, "The corpse of %s is lying here.", GET_NAME(ch));
  corpse->description = str_dup(buf2);

-----------------------------
  corpse->short_description = str_dup(GET_NAME(ch));
-----------------------------

  GET_OBJ_TYPE(corpse) = ITEM_CONTAINER;
  GET_OBJ_WEAR(corpse) = ITEM_WEAR_TAKE;
  GET_OBJ_EXTRA(corpse) = ITEM_NODONATE;
  GET_OBJ_VAL(corpse, 0) = 0;	/* You can't store stuff in a corpse */

-----------------------------
  if (IS_NPC(ch))
    GET_OBJ_VAL(corpse, 3) = 1;	/* corpse identifier */
  else
    GET_OBJ_VAL(corpse, 3) = 0;	/* corpse identifier */
  GET_OBJ_WEIGHT(corpse) = 100000;
-----------------------------

  GET_OBJ_RENT(corpse) = 100000;


Then in act.item.c add and change the following in do_get, again between
the -----------'s

  } else {
    cont_dotmode = find_all_dots(arg2);
    if (cont_dotmode == FIND_INDIV) {
      mode = generic_find(arg2, FIND_OBJ_INV | FIND_OBJ_ROOM, ch, &tmp_char, &cont);
      if (!cont) {
	sprintf(buf, "You don't have %s %s.\r\n", AN(arg2), arg2);
	send_to_char(buf, ch);
      } else if (GET_OBJ_TYPE(cont) != ITEM_CONTAINER)
	act("$p is not a container.", FALSE, ch, cont, 0, TO_CHAR);

----------------------------------------
      else if ((isname(cont->name, "pcorpse")) && (!isname(cont->short_description, GET_NAME(ch)))) {
        send_to_char("You can only loot your own corpse!\r\n", ch);
        return;
      } else
----------------------------------------

	get_from_container(ch, cont, arg1, mode);
    } else {
      if (cont_dotmode == FIND_ALLDOT && !*arg2) {
	send_to_char("Get from all of what?\r\n", ch);
	return;
      }



This archive was generated by hypermail 2b30 : 12/18/00 PST