#include "h/mud.h" // Revamped pet code is going here. void do_petdescribe(CHAR_DATA *ch, char *argument) { CHAR_DATA *pet; bool found; found = FALSE; if(!xIS_SET(ch->act, PLR_BOUGHT_PET)) { send_to_char("You don't have a pet.\r\n", ch); return; } for(pet = first_char; pet; pet = pet->next) { if(IS_NPC(pet) && pet->in_room && ch == pet->master) { found = TRUE; break; } } if(!ch->desc) { bug("%s", "do_description: no descriptor"); return; } switch (ch->substate) { default: bug("%s", "do_description: illegal substate"); return; case SUB_RESTRICTED: send_to_char("You cannot use this command from within another command.\r\n", ch); return; case SUB_NONE: ch->substate = SUB_PERSONAL_DESC; ch->dest_buf = ch; start_editing(ch, pet->description); return; case SUB_PERSONAL_DESC: if(VLD_STR(pet->description)) STRFREE(pet->description); pet->description = copy_buffer(ch); stop_editing(ch); return; } } void do_beckon(CHAR_DATA *ch, char *argument) { CHAR_DATA *mob; bool found; set_pager_color(AT_PLAIN, ch); if(IS_NPC(ch)) return; found = FALSE; for(mob = first_char; mob; mob = mob->next) { if(IS_NPC(mob) && mob->in_room && ch == mob->master) { found = TRUE; act(AT_CYAN, "$n beckons for $N to come to $s side.", ch, NULL, mob, TO_ROOM); act(AT_CYAN, "You beckon for $N to come to your side.", ch, NULL, mob, TO_CHAR); ch_printf(ch, "\r\n%s suddenly comes to you.\r\n", capitalize(mob->short_descr)); if(xIS_SET(mob->affected_by, AFF_GRAZE)) xREMOVE_BIT(mob->affected_by, AFF_GRAZE); char_from_room(mob); char_to_room(mob, ch->in_room); } } if(xIS_SET(ch->act, PLR_BATTLE)) send_to_char("!!SOUND(sound/beckon.wav)\r\n", ch); if(!found) send_to_char("You do not have a pet to beckon.\r\n", ch); } void do_graze(CHAR_DATA *ch, char *argument) { CHAR_DATA *mob; bool found; set_pager_color(AT_PLAIN, ch); AFFECT_DATA af; if(IS_NPC(ch)) return; found = FALSE; for(mob = first_char; mob; mob = mob->next) { if(IS_NPC(mob) && mob->in_room && ch == mob->master) { if(xIS_SET(mob->affected_by, AFF_GRAZE)) { xREMOVE_BIT(mob->affected_by, AFF_GRAZE); act(AT_CYAN, "$n motions for $N to stop grazing and attend.", ch, NULL, mob, TO_ROOM); act(AT_CYAN, "You motion for $N to stop grazing and attend you.", ch, NULL, mob, TO_CHAR); return; } found = TRUE; if(ch->position == POS_MOUNTED) do_dismount(ch, (char *)""); act(AT_CYAN, "$n lets $N go free to graze for food.", ch, NULL, mob, TO_ROOM); act(AT_CYAN, "You let $N go free to graze for food.", ch, NULL, mob, TO_CHAR); xSET_BIT(mob->affected_by, AFF_GRAZE); } } if(!found) send_to_char("You do not have a pet to graze.\r\n", ch); } void do_distract(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; AFFECT_DATA af; bool found; CHAR_DATA *mob; found = FALSE; if(!ch->fighting) { send_to_char("Distract what, you're not even fighting.\r\n", ch); return; } for(mob = first_char; mob; mob = mob->next) { if(IS_NPC(mob) && mob->in_room && ch == mob->master) { found = TRUE; break; } } if(!found) { send_to_char("You do not have a pet.\r\n", ch); return; } if(xIS_SET(mob->act, ACT_MOUNTABLE)) { send_to_char("The pet cannot be a mountable pet, only summoned creatures can use this command.\r\n", ch); return; } if(!mob->fighting || !(victim = who_fighting(mob))) { send_to_char("He is not even fighting yet.\r\n", ch); } if(IS_SET(ch->in_room->room_flags, ROOM_SAFE)) { send_to_char("You cannot do that skill here.\r\n", ch); return; } stop_fighting(victim, TRUE); set_fighting(victim, mob); start_hating(victim, mob); mob->hate_level = ch->hate_level + 2; WAIT_STATE(ch, 12); act(AT_LBLUE, "You signal at $N to start distracting your opponent!", ch, NULL, mob, TO_CHAR); act(AT_LBLUE, "$n signals at $N to start distracting $s opponent.", ch, NULL, mob, TO_NOTVICT); act(AT_CYAN, "\r\n$N stops fighting momentarily\r\n$N growls at $n, and attacks $m!", mob, NULL, victim, TO_NOTVICT); }