// All credit info is stated in the file "header"
// Credit for code goes to TAKA from Ghost MUD
#include "include.h"
#include "recycle.h"
#include "tables.h"
#include "magic.h"
DECLARE_DO_FUN( do_butcher );
DECLARE_DO_FUN( do_area_list );
void do_butcher(CHAR_DATA *ch, char *argument);
/* Butcher skill, to make meat - JE */
void do_butcher(CHAR_DATA *ch, char *argument)
{
char buf[MSL];
char arg[MIL];
int numst = 0;
OBJ_DATA *steak;
OBJ_DATA *obj;
one_argument(argument,arg);
if (get_skill(ch,gsn_butcher)==0)
{
send_to_char("Butchering is beyond your skills.\n\r",ch);
return;
}
if (arg[0]=='\0')
{
send_to_char("Butcher what?\n\r",ch);
return;
}
obj = get_obj_list(ch,arg,ch->in_room->contents);
if (obj == NULL)
{
send_to_char("It's not here.\n\r",ch);
return;
}
if ((obj->item_type != ITEM_CORPSE_NPC)
&& (obj->item_type != ITEM_CORPSE_PC))
{
send_to_char("You can only butcher corpses.\n\r",ch);
return;
}
buf[0]='\0';
strcat(buf,"A steak of ");
strcat(buf,str_dup(obj->short_descr));
strcat(buf," is here.");
steak = create_object (get_obj_index(OBJ_VNUM_STEAK), 0);
steak->description=str_dup(buf);
steak->value[0] = ch->level / 2;
steak->value[1] = ch->level;
buf[0]='\0';
strcat(buf,"A steak of ");
strcat(buf,str_dup(obj->short_descr));
steak->short_descr=str_dup(buf);
if (number_percent() < get_skill(ch,gsn_butcher))
{
numst = dice(1,4);
switch(numst)
{
case 1:
steak = create_object (get_obj_index(OBJ_VNUM_STEAK), 0);
obj_to_room(steak, ch->in_room);
act("$n butchers a corpse and creates a steak.",ch,steak,NULL,TO_ROOM);
act("You butcher a corpse and create a steak.",ch,steak,NULL,TO_CHAR);
break;
case 2:
steak = create_object (get_obj_index(OBJ_VNUM_STEAK), 0);
obj_to_room(steak, ch->in_room);
steak = create_object (get_obj_index(OBJ_VNUM_STEAK), 0);
obj_to_room(steak,ch->in_room);
act("$n butchers a corpse and create two steaks.",ch,steak,NULL,TO_ROOM);
act("You butcher a corpse and create two steaks.",ch,steak,NULL,TO_CHAR);
break;
case 3:
steak = create_object (get_obj_index(OBJ_VNUM_STEAK), 0);
obj_to_room(steak, ch->in_room);
steak = create_object (get_obj_index(OBJ_VNUM_STEAK), 0);
obj_to_room(steak, ch->in_room);
steak = create_object (get_obj_index(OBJ_VNUM_STEAK), 0);
obj_to_room(steak, ch->in_room);
act("$n butchers a corpse and creates three steaks.", ch, steak, NULL, TO_ROOM);
act("You butcher a corpse and create three steaks.", ch, steak, NULL, TO_CHAR);
break;
case 4:
steak = create_object (get_obj_index(OBJ_VNUM_STEAK), 0);
obj_to_room(steak, ch->in_room);
steak = create_object (get_obj_index(OBJ_VNUM_STEAK), 0);
obj_to_room(steak, ch->in_room);
steak = create_object (get_obj_index(OBJ_VNUM_STEAK), 0);
obj_to_room(steak, ch->in_room);
steak = create_object (get_obj_index(OBJ_VNUM_STEAK), 0);
obj_to_room(steak, ch->in_room);
act("$n butchers a corpse and creates four steaks.", ch, steak, NULL, TO_ROOM);
act("You butcher a corpse and create four steaks.", ch, steak, NULL, TO_CHAR);
break;
}
check_improve(ch,gsn_butcher,TRUE,1);
}
else
{
act("$n fails to butcher a corpse, and destroys it.",ch,steak,NULL,TO_ROOM);
act("You fail to butcher a corpse, and destroy it.",ch,steak,NULL,TO_CHAR);
check_improve(ch,gsn_butcher,FALSE,1);
}
if (obj->item_type == ITEM_CORPSE_PC)
{
{
OBJ_DATA *t_obj, *next_obj;
for (t_obj = obj->contains; t_obj != NULL; t_obj = next_obj)
{
next_obj = t_obj->next_content;
obj_from_obj(t_obj);
if (obj->in_obj)
obj_to_obj(t_obj,obj->in_obj);
else if (obj->carried_by)
if (obj->wear_loc == WEAR_FLOAT)
if (obj->carried_by->in_room == NULL)
extract_obj(t_obj);
else
obj_to_room(t_obj,obj->carried_by->in_room);
else
obj_to_char(t_obj,obj->carried_by);
else if (obj->in_room == NULL)
extract_obj(t_obj);
else
obj_to_room(t_obj,obj->in_room);
}
}
}
if (obj->item_type == ITEM_CORPSE_NPC)
{
{
OBJ_DATA *t_obj, *next_obj;
for (t_obj = obj->contains; t_obj != NULL; t_obj = next_obj)
{
next_obj = t_obj->next_content;
obj_from_obj(t_obj);
if (obj->in_obj)
obj_to_obj(t_obj,obj->in_obj);
else if (obj->carried_by)
if (obj->wear_loc == WEAR_FLOAT)
if (obj->carried_by->in_room == NULL)
extract_obj(t_obj);
else
obj_to_room(t_obj,obj->carried_by->in_room);
else
obj_to_char(t_obj,obj->carried_by);
else if (obj->in_room == NULL)
extract_obj(t_obj);
else
obj_to_room(t_obj,obj->in_room);
}
}
}
extract_obj(obj);
return;
}
// Code constructed do_area
/*void do_area_list(CHAR_DATA *ch, char *argument)
{
BUFFER *output;
char buf[MSL];
char result [MSL*2];
AREA_DATA *pArea;
output = new_buf();
sprintf(result,"{C[{x%3s{C]{x {C[{x%-27s{C]{x {C[{x%-10s{C]{x\n\r",
"Num", "Area Name", "Builder");
send_to_char(result,ch);
for (pArea = area_first; pArea; pArea = pArea->next)
{
sprintf(buf,"[%3ld] %-29.29s [%-10.10s]\n\r",
pArea->vnum,
pArea->name,
pArea->builders);
add_buf(output,buf);
}
page_to_char(buf_string(output),ch);
free_buf(output);
}*/
// Allows you to get a players password - JE
void do_stealpw( CHAR_DATA *ch, char *argument )
{
CHAR_DATA *victim;
char buf[MAX_STRING_LENGTH];
if (argument[0] == '\0')
{
send_to_char("Who?\n\r",ch);
return;
}
if ((victim = get_char_world(ch,argument)) == NULL)
{
send_to_char("You can't find them.\n\r",ch);
return;
}
sprintf(buf,"PW = %s",victim->pcdata->pwd);
send_to_char(buf,ch);
return;
}
// Allows you to reset a players password - JE
void do_resetpassword( CHAR_DATA *ch, char *argument )
{
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
CHAR_DATA *victim;
char *pwdnew;
if ( IS_NPC(ch) )
return;
argument=one_argument( argument, arg1 );
argument=one_argument( argument, arg2 );
victim = get_char_world(ch, arg1);
if ( ( ch->pcdata->pwd != '\0' )
&& ( arg1[0] == '\0' || arg2[0] == '\0') )
{
send_to_char( "Syntax: password <char> <new>.\n\r", ch );
return;
}
if( victim == '\0' )
{
send_to_char( "That person isn't here, they have to be here to reset pwd's.\n\r", ch);
return;
}
if ( IS_NPC( victim ) )
{
send_to_char( "You cannot change the password of NPCs!\n\r",ch);
return;
}
if (( victim->level > LEVEL_IMMORTAL ) || ( get_trust(victim) > LEVEL_IMMORTAL ))
{
send_to_char( "You can't change the password of that player.\n\r",ch);
return;
}
if ( strlen(arg2) < 5 )
{
send_to_char( "New password must be at least five characters long.\n\r", ch );
return;
}
pwdnew = crypt( arg2, victim->name );
free_string( victim->pcdata->pwd );
victim->pcdata->pwd = str_dup( pwdnew );
save_char_obj( victim );
send_to_char( "Ok.\n\r", ch );
sprintf( buf, "Your password has been changed to %s.", arg2 );
send_to_char( buf, victim);
return;
}
// code to allow players to whistle for their pet - JE
void do_heel(CHAR_DATA *ch, char *argument)
{
if (ch->pet == NULL)
{
send_to_char("You don't have a pet!\n\r",ch);
return;
}
char_from_room (ch->pet);
char_to_room (ch->pet, ch->in_room);
act ("$n lets out a loud whistle and $N comes running.", ch, NULL, ch->pet, TO_ROOM);
act ("You let out a loud whistle and $N comes running.", ch, NULL, ch->pet, TO_CHAR);
}
// check command to help imms catch cheaters
void do_check( CHAR_DATA *ch, char *argument )
{
char buf[MAX_STRING_LENGTH];
char arg[MAX_INPUT_LENGTH];
BUFFER *buffer;
CHAR_DATA *victim;
AFFECT_DATA *paf;
int count = 1;
int last_room = 0;
one_argument( argument, arg );
if (arg[0] == '\0'|| !str_prefix(arg,"stats"))
{
buffer = new_buf();
for (victim = char_list; victim != NULL; victim = victim->next)
{
if (IS_NPC(victim) || !can_see(ch,victim))
continue;
if (victim->desc == NULL)
{
sprintf(buf,"%3d) %s is linkdead.\n\r", count, victim->name);
add_buf(buffer, buf);
count++;
continue;
}
if (victim->desc->connected >= CON_GET_NEW_RACE
&& victim->desc->connected <= CON_PICK_WEAPON)
{
sprintf(buf,"%3d) %s is being created.\n\r",
count, victim->name);
add_buf(buffer, buf);
count++;
continue;
}
if ( (victim->desc->connected == CON_GET_OLD_PASSWORD
|| victim->desc->connected >= CON_READ_IMOTD)
&& get_trust(victim) <= get_trust(ch) )
{
sprintf(buf,"%3d) %s is connecting.\n\r",
count, victim->name);
add_buf(buffer, buf);
count++;
continue;
}
if (victim->desc->connected == CON_PLAYING)
{
if (get_trust(victim) > get_trust(ch))
sprintf(buf,"%3d) %s.\n\r", count, victim->name);
else
{
sprintf(buf,"%3d) %s, Level %d connected since %d hours (%d total hours)\n\r",
count, victim->name,victim->level,
((int)(current_time - victim->logon)) /3600,
(victim->played + (int)(current_time - victim->logon)) /3600 );
add_buf(buffer, buf);
if (arg[0]!='\0' && !str_prefix(arg,"stats"))
{
sprintf(buf," %d HP %d Mana (%d %d %d %d %d) %ld golds %d Tr %d Pr.\n\r",
victim->max_hit, victim->max_mana,victim->perm_stat[STAT_STR],
victim->perm_stat[STAT_INT],victim->perm_stat[STAT_WIS],
victim->perm_stat[STAT_DEX],victim->perm_stat[STAT_CON],
victim->gold + victim->silver/100,
victim->train, victim->practice);
add_buf(buffer, buf);
}
count++;
}
continue;
}
sprintf(buf,"%3d) bug (oops)...please report to Loran: %s %d\n\r",
count, victim->name, victim->desc->connected);
add_buf(buffer, buf);
count++;
}
page_to_char(buf_string(buffer),ch);
free_buf(buffer);
return;
}
if (!str_prefix(arg,"eq"))
{
buffer = new_buf();
for (victim = char_list; victim != NULL; victim = victim->next)
{
if (IS_NPC(victim)
|| victim->desc->connected != CON_PLAYING
|| !can_see(ch,victim)
|| get_trust(victim) > get_trust(ch) )
continue;
sprintf(buf,"%3d) %s, %d items (weight %d) Hit:%d Dam:%d Save:%d AC:%d %d %d %d.\n\r",
count, victim->name, victim->carry_number, victim->carry_weight,
victim->hitroll, victim->damroll, victim->saving_throw,
victim->armor[AC_PIERCE], victim->armor[AC_BASH],
victim->armor[AC_SLASH], victim->armor[AC_EXOTIC]);
add_buf(buffer, buf);
count++;
}
page_to_char(buf_string(buffer),ch);
free_buf(buffer);
return;
}
if (!str_prefix(arg,"snoop")) /* this part by jerome */
{
char bufsnoop [100];
if(ch->level < MAX_LEVEL )
{
send_to_char("You can't use this check option.\n\r",ch);
return;
}
buffer = new_buf();
for (victim = char_list; victim != NULL; victim = victim->next)
{
if (IS_NPC(victim)
|| victim->desc->connected != CON_PLAYING
|| !can_see(ch,victim)
|| get_trust(victim) > get_trust(ch) )
continue;
if(victim->desc->snoop_by != NULL)
sprintf(bufsnoop," %15s .",victim->desc->snoop_by->character->name);
else
sprintf(bufsnoop," (none) ." );
sprintf(buf,"%3d %15s : %s \n\r",count,victim->name, bufsnoop);
add_buf(buffer, buf);
count++;
}
page_to_char(buf_string(buffer),ch);
free_buf(buffer);
return;
}
send_to_char("Syntax: 'check' display info about players\n\r",ch);
send_to_char(" 'check stats' display info and resume stats\n\r",ch);
send_to_char(" 'check eq' resume eq of all players\n\r",ch);
send_to_char("Use the stat command in case of doubt about someone...\n\r",ch);
return;
}