## Code: by Ranka
## MUD : telnet carlnet.ee 4242
## Mail: rainer_roomet@hotmail.com (also MSN)
## Idea: From MUME (telnet mume.pvv.org 23)
## Credits: No need ANY credit
## Code Tested: About 2 years
## Snippet Installation Tested: Nope
## Example:
## Conditions: Player named as 'Baldors' died and Corpse is same room
## as I am.
> scalp corpse
You attempt to scalp the corpse of Baldors.
You get the scalp of Baldors from corpse.
> inventory
the scalp of Baldors
## It's good for PK MUDs. Some players start collectict scalps and it was great
## to get all.scalp sack, if you see about 100 scalps received from PK!
## Also you can do different quests - you have to bring atleast 10 player scalps
## to Orkish Shaman then he will give you some great Quest Items.
# Open: fight.c
# Find: void make_corpse( CHAR_DATA *ch )
# Find the following code:
# else /* player corpses */
# {
# corpse = create_object(get_obj_index(OBJ_VNUM_CORPSE_PC));
# Add after that:
corpse->raceowner = str_dup(pc_race_table[ch->race].name);
# Close: fight.c
# Open: recycle.c
# Find: void free_obj(OBJ_DATA *obj)
# Find: free_string( obj->name );
# Add after that:
free_string( obj->raceowner );
# Close: recycle.c
# Open : act_obj.c
# Add the following to somewherE:
void do_scalp( CHAR_DATA *ch, char *argument )
{
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
char *name;
char *name2;
OBJ_DATA *corpse;
OBJ_DATA *scalp;
OBJ_DATA *corpse2;
one_argument( argument, arg );
if (arg[0] == '\0')
{
send_to_char( "Scalp what corpse?\n\r", ch );
return;
}
corpse = get_obj_list(ch, arg, ch->in_room->contents);
if ( corpse == NULL )
{
send_to_char( "You can't find it.\n\r", ch );
return;
}
if ( corpse->item_type == ITEM_CORPSE_NPC)
{
send_to_char("Scalping mobiles?! Huh! What's that?\n\r", ch);
return;
}
if ( corpse->item_type == ITEM_CORPSE_SCALPED)
{
send_to_char("Cannot scalp that.\n\r",ch);
return;
}
if ( corpse->item_type == ITEM_CORPSE_PC )
{
if (corpse->contains)
{
send_to_char("You can't scalp unlooted corpses!\n\r",ch);
return;
}
}
scalp = create_object(get_obj_index(OBJ_VNUM_SCALP));
corpse2 = create_object(get_obj_index(OBJ_VNUM_SCALPED_CORPSE));
act("You attempt to scalp $p.", ch, corpse, NULL, TO_CHAR);
act("$n attempts to scalp $p.", ch, corpse, NULL, TO_ROOM);
name = corpse->owner;
name2 = corpse->raceowner;
/* name for scalped corpses */
sprintf( buf, corpse2->short_descr, name2 );
free_string( corpse->short_descr );
corpse->short_descr = str_dup( buf );
sprintf( buf, corpse2->description, name2 );
free_string( corpse2->description );
corpse2->description = str_dup( buf );
/* name for scalps */
sprintf( buf, scalp->name, name );
free_string( scalp->name );
scalp->name = str_dup( buf );
sprintf( buf, scalp->short_descr, name );
free_string( scalp->short_descr );
scalp->short_descr = str_dup( buf );
act("You get $p from corpse.", ch, scalp, NULL, TO_CHAR);
act("$n takes $p from corpse.",ch, scalp, NULL, TO_ROOM);
extract_obj(corpse);
obj_to_room(corpse2, ch->in_room);
corpse2->timer = 20;
obj_to_char(scalp, ch);
return;
}
# Close: act_obj.c
# Open: interp.c and interp.h
# Make: command named as do_scalp
# close interp.c and interp.h
# Make two new objects, for example:
Area: [0] Limbo
Last Editor: [Ranka]
Vnum: [ 26]
Name: [scalp %s]
Short desc: [the scalp of %s]
Long desc: [The bloody scalp of is lying here.]
Material: [undefined]
Type: [food]
Food hours [v0]: [0]
Full hours [v1]: [0]
Poisoned [v2]: [Yes]
Wear flags: [take onbelt]
Extra flags: [none]
Condition: [0%]
Weight: [0]
Cost: [0 copper (0 copper pennies)]
Allowed: [Unlimited]
Area: [0] Limbo
Last Editor: [None]
Vnum: [ 27]
Name: [corpse]
Short desc: [the scalped corpse of %s]
Long desc: [The scalped corpse of %s is lying here.]
Material: [undefined]
Type: [scalped_corpse]
Wear flags: [take]
Extra flags: [nopurge]
Condition: [25%]
Weight: [124]
Cost: [0 copper (0 copper pennies)]
Allowed: [Unlimited]
#Now open the merc.h
#And define these two objects:
#define OBJ_VNUM_SCALP 26 // OBJ SCALP VNUM!
#define OBJ_VNUM_SCALPED_CORPSE 27 // OBJ SCALPED CORPSE VNUM!
# Close the files
# Make Clean, ReCompile, ReRun. Slay some tesplayer, type 'SCALP CORPSE'
# And check!
# You have to received object named as: "the scalp of <YourTestCharacterName>