/* * action.cpp * Contains the routines necessary to achieve action commands. * ____ _ * | _ \ ___ __ _| |_ __ ___ ___ * | |_) / _ \/ _` | | '_ ` _ \/ __| * | _ < __/ (_| | | | | | | \__ \ * |_| \_\___|\__,_|_|_| |_| |_|___/ * * Permission to use, modify and distribute is granted via the * Creative Commons - Attribution - Non Commercial - Share Alike 3.0 License * http://creativecommons.org/licenses/by-nc-sa/3.0/ * * Copyright (C) 2007-2009 Jason Mitchell, Randi Mitchell * Contributions by Tim Callahan, Jonathan Hseu * Based on Mordor (C) Brooke Paul, Brett J. Vickers, John P. Freeman * */ #include "mud.h" //#include "structs.h" //#include "mextern.h" #include "commands.h" bool actionShow(Player* pTarget, Creature* creature) { return(pTarget && !pTarget->isGagging(creature->name) && !pTarget->flagIsSet(P_UNCONSCIOUS)); } // prototype for actionFail int actionFail(Creature* player, bstring action, bstring second = "m"); #define ACTION_SHOW // update for oroom #define OUT(a,b) sock->print(a); \ broadcast(sock, room, b, creature); #define OUT_HISHER(a,b) sock->print(a); \ broadcast(sock, room, b, creature, creature->hisHer()); #define OUT_HESHE(a,b) sock->print(a); \ broadcast(sock, room, b, creature, creature->heShe()); #define OUT4(a,b,c) creature->print((a), target); \ if(actionShow(pTarget, creature)) \ {pTarget->print((b), creature);} \ broadcast(sock, target->getSock(), room, (c), creature, target); \ target->hooks.execute("onSocialInteraction", creature); #define OUT_HIMHER(a,b) sock->print(a); \ broadcast(sock, room, b, creature, creature->himHer()); //********************************************************************* // orderPet //********************************************************************* int orderPet(Player* player, cmd* cmnd) { Monster *pet = player->getPet(); int x=0; if(!pet) { player->print("You don't have a pet to command.\n"); return(0); } if(!player->inSameRoom(pet)) { player->print("%M can't hear you.\n", pet); return(0); } if(cmnd->num < 2) { player->print("Tell %N to do what?\n", pet); return(0); } // the player is done with their cmnd, let the pet use it cmnd->myCommand = 0; for(; x<cmnd->num-1; x++) strcpy(cmnd->str[x], cmnd->str[x+1]); cmnd->num--; strcpy(cmnd->str[cmnd->num], ""); // chop the "pet " off strcpy(cmnd->fullstr, getFullstrText(cmnd->fullstr, 1).c_str()); cmdProcess(player, cmnd, true); return(0); } //********************************************************************* // plyAction //********************************************************************* // this function is a wrapper - it allows us to put some action // commands in the player command array, all while still using the // same action function to do our work. int plyAction(Player* player, cmd* cmnd) { return(action(player, cmnd)); } //********************************************************************* // action //********************************************************************* int action(Creature* creature, cmd* cmnd) { BaseRoom* room = creature->getRoom(); ctag *cp=0; Player *player=0, *pTarget=0; Monster *monster=0; Creature* target=0; Object *object=0; Exit *exit=0; int n=0, num=0, num1=0, num2=0; char temp[12]; bstring str = ""; ASSERTLOG( creature ); ASSERTLOG( cmnd ); // some actions are creature-only; we will need this variable to use them player = creature->getPlayer(); monster = creature->getMonster(); Socket* sock = NULL; if(player) sock = player->getSock(); if(!creature->ableToDoCommand(cmnd)) return(0); str = cmnd->myCommand->getName(); if(player) { creature->clearFlag(P_AFK); if(str != "sleep") player->unhide(); // if they have a pet, they use orderPet instead if(str == "pet" && player->getPet()) return(orderPet(player, cmnd)); } if(cmnd->num == 2) { target = room->findCreature(creature, cmnd->str[1], cmnd->val[1], true, true); if(target) pTarget = target->getPlayer(); if( (!target || target == creature) && str != "point" && str != "show" && str != "mark" ) { creature->print("That is not here.\n"); return(player ? 0 : 1); } } // will this social wake anyone up? if(pTarget && pTarget->flagIsSet(P_SLEEPING)) { if( str == "shake" || str == "anvil" || str == "knee" || str == "pounce" || str == "tickle" || str == "kic" || str == "tackle" || str == "poke" || str == "copulate" || str == "dance" || str == "cstr" || str == "suck" || str == "hammer" || str == "slap" || str == "dirt" || str == "grab" || str == "shove" || str == "high5" || str == "thank" || str == "punch" || str == "lick" || str == "choke" || str == "zip" || str == "bhand" || str == "beg" || str == "fondle" || str == "grope" || str == "pants" || str == "noogie" || str == "nudge" || str == "pinch" || str == "pummel" || str == "trip" || str == "pester" || str == "ruffle" || str == "slobber" || str == "smack" || str == "spank" || str == "squeeze" || str == "swat" || str == "thwack" || str == "tip" || str == "tug" || str == "whip" || str == "drool" || str == "congrats" || str == "bonk" || str == "defenestrate" || str == "whine" || str == "sneeze" || str == "pan" || str == "squeeze" || str == "wedgy" || str == "bitchslap" || str == "hump" ) { pTarget->wake("You awaken suddenly!"); } else if( str == "smootch" || str == "french" || str == "rub" || str == "massage" || str == "peck" || str == "nibble" || str == "hug" || str == "comfort" ) { pTarget->wake("You wake up."); } } // noisy socials if( str == "stomp" || str == "hail" || str == "bark" || str == "rage" || str == "ahem" || str == "roar" || str == "scream" || str == "spaz" || str == "squeal" || str == "tantrum" || str == "wail" || str == "yodel" || str == "crow" || str == "cornholio" ) { room->wake("You awaken suddenly!", true); } if(str == "relax") { OUT("You breath deeply.\n", "%M takes a deep breath and sighs comfortably."); } else if(str == "stab") { if(pTarget && player && creature->isDm() ) { OUT4("You stab %N in the eye. OUCH!\n", "%M stabs you in the eye.\n", "%M stabs %N in the eye."); pTarget->addEffect("blindness", 120, 1, true, player); } else { if(player && ( !player->ready[WIELD-1] || player->ready[WIELD-1]->getWeaponCategory() != "piercing" )) { creature->print("You must be wielding a piercing weapon in order to stab yourself.\n"); } else { OUT_HIMHER("You stab yourself in the eye. OUCH!\n", "%M stabs %sself in the eye."); if( mrand(1,100) <= 50 && !creature->isEffected("blindness") ) { creature->addEffect("blindness", creature->strength.getCur(), 1, true, player); } } } } else if(str == "vangogh") { if( player && ( !player->ready[WIELD-1] || !(player->ready[WIELD-1]->getWeaponCategory() == "slashing" || player->ready[WIELD-1]->getWeaponCategory() == "chopping") ) ) { creature->print("You must be wielding a slashing or chopping weapon in order to cut yourself.\n"); } else { if(!creature->checkAttackTimer()) return(0); creature->updateAttackTimer(); OUT_HISHER("You slice your ear!\n", "%M slices %s ear."); // don't let them die from it n = mrand(1,4); if(creature->hp.getCur() - n > 0) { creature->hp.decrease(n); creature->printColor("You take ^R%d^x damage.\n", n); broadcastGroup(false, creature, "%M slices %sself for *CC:DAMAGE*%d^x damage, %s%s\n", creature, creature->himHer(), n, creature->heShe(), creature->getStatusStr()); } } } else if(str == "smoke") { OUT("You take a puff.\n", "%M puffs on a pipe."); } else if(str == "puke") { OUT("You blow chunks.\n", "%M vomits on the ground."); } else if(str == "hump") { if(target) { OUT4("You hump %N's leg.\n", "%M humps your leg.\n", "%M humps %N's leg."); } else { actionFail(creature, "hump"); } } else if(str == "burp") { OUT("You belch loudly.\n", "%M belches rudely."); } else if(str == "ponder") { OUT("You ponder the situation.\n", "%M ponders the situation."); } else if(str == "think") { OUT("You think carefully.\n", "%M thinks carefully."); } else if(str == "ack") { OUT("You ack.\n", "%M acks."); } else if(str == "nervous") { OUT("You titter nervously.\n", "%M titters nervously."); } else if(str == "sleep") { if(player) { if(creature->flagIsSet(P_SLEEPING)) { sock->print("You are already asleep.\n"); return(0); } if(creature->flagIsSet(P_UNCONSCIOUS)) { sock->print("You are already unconscious.\n"); return(0); } if(creature->isUndead()) { // vampire undead MAY sleep at night if(creature->isEffected("vampirism")) { if(!room->vampCanSleep(creature->getSock())) return(0); } else { sock->print("The undead do not sleep.\n"); return(0); } } if(creature->flagIsSet(P_MISTED)) { sock->print("You can't do that while misted.\n"); return(0); } if(room->isCombat()) { sock->print("There is too much commotion to sleep.\n"); return(0); } if(creature->hp.getCur() >= creature->hp.getMax() && creature->mp.getCur() >= creature->mp.getMax()) { sock->print("You aren't tired at the moment.\n"); return(0); } player->setFlag(P_SLEEPING); player->setFlag(P_UNCONSCIOUS); player->clearFlag(P_SITTING); } sock->print("You take a nap.\n"); if(player && player->flagIsSet(P_HIDDEN)) broadcast(isCt, sock, room, "*DM* %M takes a nap.", creature); else broadcast(sock, room, "%M takes a nap.", creature); } else if(str == "wake") { if(target) { if(!pTarget || !pTarget->flagIsSet(P_SLEEPING)) { sock->print("%M isn't sleeping.", target); } else { OUT4("You wake %N up.\n", "%M wakes you up.\n", "%M wakes %N up."); target->wake(); } } else { if(player) { if(!player->flagIsSet(P_SLEEPING)) { sock->print("You aren't sleeping!\n"); return(0); } player->wake(); } OUT("You wake up.\n", "%M wakes up."); } } else if(str == "masturbate" || str == "mas") { OUT("You masturbate to orgasm.\n", "%M masturbates to orgasm."); if( player && mrand(1,100) <= 5 && !player->isEffected("blindness") ) { player->addEffect("blindness", 300 - player->constitution.getCur(), 1, true, player); } } else if(str == "chest") { if(target) { sock->print("You beat your fists to your chest in praise of %N.\n", target); target->print("%M beats %s fists to %s chest in praise of you.\n", creature, creature->hisHer(), creature->hisHer()); broadcast(sock, target->getSock(), room, "%M beats %s fists to %s chest in praise of %N.", creature, creature->hisHer(), creature->hisHer(), target); target->hooks.execute("onSocialInteraction", creature); } else { sock->print("You beat your fists to your chest in celebration.\n"); broadcast(sock, room, "%M beats %s fists to %s chest in celebration.", creature, creature->hisHer(), creature->hisHer()); } } else if(str == "shake") { if(target) { OUT4("You shake %N's hand.\n", "%M shakes your hand.\n", "%M shakes %N's hand."); } else { OUT_HISHER("You shake your head.\n", "%M shakes %s head."); } } else if(str == "anvil") { if(target) { OUT4("You drop an anvil on %N's head.\n", "%M drops an anvil on your head!\n", "%M drops an anvil on %N's head."); } else actionFail(creature, "drop an anvil on"); } else if(str == "knee") { if(target) { OUT4("You knee %N in the crotch.\n", "%M painfully knees you in the crotch.\n", "%M painfully knees %N."); } else actionFail(creature, str); } else if(str == "pounce") { if(target) { OUT4("You pounce on %N.\n", "%M pounces on you.\n", "%M pounces on %N."); } else actionFail(creature, "pounce on"); } else if(str == "tickle") { if(target) { OUT4("You tickle %N mercilessly.\n", "%M tickles you mercilessly.\n", "%M tickles %N mercilessly."); } else actionFail(creature, str); } else if(str == "kic") { if(target) { OUT4("You kick %N.\n", "%M kicks you.\n", "%M kicks %N."); } else actionFail(creature, "kick"); } else if(str == "tackle") { if(target) { OUT4("You tackle %N to the ground.\n", "%M tackles you to the ground.\n", "%M tackles %N to the ground."); } else actionFail(creature, str); } else if(str == "frustrate") { OUT_HISHER("You pull your hair out.\n", "%M pulls %s hair out in frustration."); } else if(str == "livejournal") { OUT_HISHER("You sell your soul to capitalism.\n", "%M sells %s soul to capitalism."); } else if(str == "tap") { OUT_HISHER("You tap your foot impatiently.\n", "%M taps %s foot impatiently."); } else if(str == "cheer") { if(target) { OUT4("You cheer for %N.\n", "%M cheers for you.\n", "%M cheers for %N."); } else { OUT("You cheer.\n", "%M yells like a cheerleader."); } } else if(str == "poke") { if(target) { OUT4("You poke %N.\n", "%M pokes you.\n", "%M pokes %N."); } else { OUT("You poke everyone.\n", "%M pokes you."); } } else if(str == "ogle") { if(target) { OUT4("You ogle %N with carnal intent.\n", "%M ogles you salaciously.\n", "%M ogles %N salaciously."); } else actionFail(creature, str); } else if(str == "fart") { if(target) { OUT4("You fart on %N.\n", "%M farts on you.\n", "%M farts on %N."); } else { OUT("You fart.\n", "%M breaks wind."); } } else if(str == "bfart" && player && !strcmp(creature->name, "Bane")) { if(pTarget) { OUT4("You fart on %N.\n", "%M farts on you.\n", "%M farts on %N."); OUT4("You knocked %N unconscious!\n", "%M's fart reeks so much you are knocked unconscious!\n", "%M's fart knocks %N unconscious!"); pTarget->knockUnconscious(30); } else { OUT("You let rip a nasty one.\n", "%M lets out a deadly fart."); sock->print("You knock everyone in the room unconscious!\n"); cp = room->first_ply; while(cp) { if( cp->crt != player && !cp->crt->flagIsSet(P_DM_INVIS) && !cp->crt->isUnconscious() && !cp->crt->isDm() && !cp->crt->inCombat() ) { cp->crt->print("%M's fart knocks you unconscious!\n", creature); cp->crt->knockUnconscious(30); broadcast(sock, cp->crt->getSock(), room, "%M falls to the ground unconscious.", cp->crt); } cp = cp->next_tag; } } } else if(str == "spit") { if(target) { OUT4("You spit on %N.\n", "%M spits on you.\n", "%M spits on %N."); } else { OUT("You spit.\n", "%M spits."); } } else if(str == "tag") { if(target) { if(target->isStaff() && !creature->isDm()) { sock->print("Staff doesn't play tag with mortals.\n"); return(0); } target->wake("You awaken suddenly!"); sock->print("You tag %N. %s's now it!\n", target, target->upHeShe()); target->print("%M tags you. You're now it!\n", creature); broadcast(sock, target->getSock(), room, "%M just tagged %N! %s's it!", creature, target, target->upHeShe()); target->hooks.execute("onSocialInteraction", creature); } else { sock->print("You feel like playing tag.\n"); broadcast(sock, room, "%M is in the mood to play tag.", creature); } } else if(str == "expose") { if(target) { OUT4("You expose yourself in front of %N.\n", "%M gets naked in front of you.\n", "%M gets naked in front of %N."); } else { OUT_HIMHER("You expose yourself.\n", "%M exposes %sself."); } } else if(str == "wink") { if(target) { OUT4("You wink at %N.\n", "%M winks at you.\n", "%M winks at %N."); } else { OUT("You wink.\n", "%M winks."); } } else if(str == "wave") { if(target) { OUT4("You wave to %N.\n", "%M waves to you.\n", "%M waves to %N."); } else { OUT("You wave happily.\n", "%M waves happily."); } } else if(str == "dream" && player) { if(!player->flagIsSet(P_SLEEPING)) { player->print("You aren't sleeping!\n"); } else { OUT("You dream of pleasant things.\n", "%M has pleasant dreams."); } } else if(str == "rollover" && player) { if(!player->flagIsSet(P_SLEEPING)) { player->print("You aren't sleeping!\n"); } else { OUT_HISHER("You roll over in your sleep.\n", "%M rolls over in %s sleep."); } } else if(str == "cackle") { OUT("You cackle gleefully.\n", "%M cackles out loud with glee."); } else if(str == "chuckle") { OUT("You chuckle.\n", "%M chuckles."); } else if(str == "woot") { OUT("You jump and woot loudly.\n", "%M jumps and yells, \"Can I get a WOOT! WOOT!\"."); } else if(str == "sigh") { OUT("You sigh sadly.\n", "%M lets out a long, sad sigh."); } else if(str == "bounce") { OUT_HESHE("You bounce around wildly!\n", "%M is so excited, %s can hardly keep still!"); } else if(str == "shrug") { OUT("You shrug your shoulders.\n", "%M shrugs helplessly."); } else if(str == "twiddle") { OUT_HISHER("You twiddle your thumbs.\n", "%M twiddles %s thumbs."); } else if(str == "yawn") { OUT("You yawn loudly.\n", "%M yawns out loud."); } else if(str == "hum") { if(mrand(0,10) || player->getClass() == BARD || player->isStaff()) { OUT("You hum a little tune.\n", "%M hums a little tune."); } else { OUT("You hum off-key.\n", "%M hums off-key."); } } else if(str == "snap") { OUT_HISHER("You snap your fingers.\n", "%M snaps %s fingers."); } else if(str == "jump" || str == "j") { OUT("You jump for joy.\n", "%M jumps for joy."); } else if(str == "skip") { OUT("You skip like a girl.\n", "%M skips like a girl."); } else if(str == "cry") { OUT("You burst into tears.\n", "%M bursts into tears."); } else if(str == "bleed") { OUT("You bleed profusely.\n", "%M bleeds profusely."); } else if(str == "sniff") { OUT("You sniff the air.\n", "%M sniffs the air."); } else if(str == "whimper") { OUT("You whimper like a beat dog.\n", "%M whimpers like a beat dog."); } else if(str == "cringe") { OUT("You cringe fearfully.\n", "%M cringes fearfully."); } else if(str == "gasp") { OUT("Your jaw drops.\n", "%M gasps in amazement."); } else if(str == "grunt") { OUT("You grunt.\n", "%M grunts agonizingly."); } else if(str == "flex") { OUT_HISHER("You flex your muscles.\n", "%M flexes %s muscles."); } else if(str == "blush") { OUT("You blush.\n", "%M turns beet-red."); } else if(str == "stomp") { OUT("You stomp around.\n", "%M stomps around ostentatiously."); } else if(str == "usagi") { OUT("You hop like a bunny!\n", "%M hops like a bunny!"); } else if(str == "fume") { OUT("You fume.\n", "%M fumes. You can almost see the steam."); } else if(str == "rage") { OUT("You rage like a madman.\n", "%M rages likes a madman."); } else if((str == "defecate" || str == "def" || str == "defe") && player) { if(player->inCombat()) { sock->print("You can't do that now! You are in combat!\n"); sock->print("Do you want to shit all over yourself?\n"); return(0); } if(player->isPoisoned() || player->isDiseased()) { sock->print("You don't feel well enough to go right now.\n"); return(0); } if(!dec_daily(&player->daily[DL_DEFEC]) || player->getLevel() < 4) { sock->print("You don't have to go.\n"); return(0); } if(loadObject(SHIT_OBJ, &object)) { sprintf(object->name, "piece of %s's shit", (player->flagIsSet(P_ALIASING) ? player->getAlias()->name : player->name)); object->addToRoom(room); } OUT("You squat down and shit.\n", "%M squats down and shits."); sock->print("You feel SOOO much better now.\n"); // Daily restore from defecate. player->hp.restore(); player->mp.restore(); } else if(str == "mark" && player) { if(player->inCombat()) { sock->print("And piss all over yourself?!\n"); return(0); } if( !player->isEffected("lycanthropy") && player->getLevel() >= 13 && !player->isCt() ) { sock->print("Only werewolves of high level can mark their territory.\n"); return(0); } if(!player->isCt()) { if(!dec_daily(&player->daily[DL_DEFEC]) || player->getLevel() < 4) { sock->print("You don't have to go.\n"); return(0); } } if(loadObject(42, &object)) { sprintf(object->name, "puddle of %s's piss", (player->flagIsSet(P_ALIASING) ? player->getAlias()->name : player->name)); object->addToRoom(room); } if(target) { target->wake("You awaken suddenly!"); if(pTarget) { OUT4("You piss on %N.\n", "%M pisses on you.\n", "%M pisses on %N."); } else { if(cmnd->val[1] > 1) { sock->print("You piss on %N %d.\n", target, cmnd->val[1]); broadcast(player->getSock(), player->getRoom(), "%M pisses at %N %d.", player, target, cmnd->val[1]); } else { sock->print("You piss on %N.\n", target); broadcast(player->getSock(), player->getRoom(), "%M pisses on %N.", player, target); } } } else { object = findObject(player, room->first_obj, cmnd); if(object) { if(cmnd->val[1] > 1) { if(!(object->flagIsSet(O_NO_PREFIX) && (object->flagIsSet(O_NO_TAKE) || object->flagIsSet(O_SCENERY)))) { sock->printColor("You piss on %P %d.\n", object, cmnd->val[1]); broadcast(player->getSock(), player->getRoom(), "%M pisses on %P %d.", player, object, cmnd->val[1]); } else { sock->printColor("You piss on the %P %d.\n", object, cmnd->val[1]); broadcast(player->getSock(), player->getRoom(), "%M pisses at the %P %d.", player, object, cmnd->val[1]); } } else { if(!(object->flagIsSet(O_NO_PREFIX) && (object->flagIsSet(O_NO_TAKE) || object->flagIsSet(O_SCENERY)))) { sock->printColor("You piss on %P.\n", object); broadcast(player->getSock(), player->getRoom(), "%M pisses on %P.", player, object); } else { sock->printColor("You piss on the %P.\n", object); broadcast(player->getSock(), player->getRoom(), "%M pisses on the %P.", player, object); } } } else { lowercize(cmnd->str[1], 0); exit = findExit(creature, cmnd); if(exit && !exit->flagIsSet(X_DESCRIPTION_ONLY) && !exit->isConcealed(player)) { if(cmnd->val[1] > 1) { sock->print("You piss on the %s %d.\n", exit->name, cmnd->val[1]); broadcast(player->getSock(), player->getRoom(), "%M pisses on the %s %d.", player, exit->name, cmnd->val[1]); } else { sock->print("You piss on the %s.\n", exit->name); broadcast(player->getSock(), player->getRoom(), "%M pisses on the %s.", player, exit->name); } } else { sock->print("You mark your territory.\n"); broadcast(player->getSock(), player->getRoom(), "%M marks %s territory.", player, player->hisHer()); } } } player->hp.restore(); player->mp.restore(); } else if(str == "pout") { OUT("You pout.\n", "%M pouts like a child."); } else if(str == "faint") { OUT("You faint.\n", "%M faints."); } else if(str == "goose") { if(target) { OUT4("You goose %N.\n", "%M gooses you.\n", "%M gooses %N."); } else actionFail(creature, str); } else if(str == "copulate") { if(target) { OUT4("You copulate with %N.\n", "%M copulates with you.\n", "%M copulates with %N."); } else actionFail(creature, "copulate with"); } else if(str == "dance") { if(target) { OUT4("You dance with %N.\n", "%M dances with you.\n", "%M dances with %N."); } else { OUT("You dance about the room.\n", "%M dances about the room."); } } else if(str == "cstr") { if(target) { OUT4("You castrate %N.\n", "%M castrates you.\n", "%M castrates %N."); } else actionFail(creature, "castrate"); } else if(str == "hug") { if(target) { OUT4("You hug %N.\n", "%M hugs you close.\n", "%M hugs %N close."); } else actionFail(creature, str); } else if(str == "comfort") { if(target) { OUT4("You comfort %N.\n", "%M comforts you.\n", "%M comforts %N."); } else actionFail(creature, str); } else if(str == "suck") { if(target) { OUT4("You suck %N.\n", "%M sucks you.\n", "%M sucks %N."); } else actionFail(creature, str); } else if(str == "kiss") { if(target) { OUT4("You kiss %N gently.\n", "%M kisses you gently.\n", "%M kisses %N."); } else actionFail(creature, str); } else if(str == "hammer") { if(target) { OUT4("You hammer %N on the head.\n", "%M hammers you on the head. Ouch, that hurt!\n", "%M hammers %N on the head."); } else actionFail(creature, str); } else if(str == "bless") { if(target) { creature->print("You give %N your blessing.\n", target); if(actionShow(pTarget, creature)) pTarget->print("%M gives you %s blessing.\n", creature, creature->hisHer()); broadcast(sock, target->getSock(), room, "%M gives %N %s blessing.", creature, target, creature->hisHer()); target->hooks.execute("onSocialInteraction", creature); } else actionFail(creature, str); } else if(str == "hbeer") { if(target) { OUT4("You drink a beer in %N's honor.\n", "%M drinks a beer in your honor.\n", "%M drinks a beer in %N's honor."); } else actionFail(creature, "drink a beer in", "se honor"); } else if(str == "slap") { if(target) { OUT4("You slap %N.\n", "%M slaps you across the face.\n", "%M slaps %N across the face."); } else actionFail(creature, str); } else if(str == "glare") { if(target) { OUT4("You glare menacingly at %N.\n", "%M glares menacingly at you.\n", "%M glares menacingly at %N."); } else actionFail(creature, "glare at"); } else if(str == "pat") { if(target && !target->isDm()) { OUT4("You pat %N on the head.\n", "%M pats you on the head.\n", "%M pats %N on the head."); } else actionFail(creature, str); } else if(str == "pet") { if(target) { OUT4("You pet %N on the back of the head.\n", "%M pets you on the back of the head.\n", "%M pets %N on the back of the head."); } else actionFail(creature, str); } else if(str == "bow") { if(target) { OUT4("You bow before %N.\n", "%M bows before you.\n", "%M bows before %N."); } else { OUT("You make a full-sweeping bow.\n", "%M makes a full-sweeping bow."); } } else if(str == "curtsy") { if(target) { OUT4("You curtsy before %N.\n", "%M curtsies before you.\n", "%M curtsies before %N."); } else { OUT("You curtsy rather daintely.\n", "%M curtsies."); } } else if(str == "confused") { OUT("You look bewildered.\n", "%M looks bewildered."); } else if(str == "hiccup") { OUT("You hiccup.\n", "%M hiccups noisily."); } else if(str == "scratch") { OUT_HISHER("You scratch your head cluelessly.\n", "%M scratches %s head cluelessly."); } else if(str == "scr") { OUT_HISHER("You scratch your head cluelessly.\n", "%M scratches %s head cluelessly."); } else if(str == "strut") { OUT("You strut around vainly.\n", "%M struts around vainly."); } else if(str == "maniac") { OUT("You laugh maniacally.\n", "%M laughs maniacally."); } else if(str == "sulk") { OUT("You sulk.\n", "%M sulks in dejection."); } else if(str == "satisfied") { OUT("You smile with satisfaction.\n", "%M smiles with satisfaction."); } else if(str == "dismiss") { if(target) { if(pTarget || !player) { OUT4("You curtly dismiss %N.\n", "%M dismisses you curtly.\n", "%M curtly dismisses %N ."); } else { if(target->isPet() && target->following == creature) { sock->print("You dismiss %N.\n", target); broadcast(sock, room, "%M dismisses %N.", creature, target); if(target->isUndead()) broadcast(NULL, room, "%M wanders away.", target); else broadcast(NULL, target->getRoom(), "%M fades away.", target); target->die(target->following); gServer->delActive(monster); } } } else { sock->print("Dismiss who?\n"); return(0); } } else if(str == "sit") { if(player) { if(player->flagIsSet(P_SITTING)) { sock->print("You are already sitting!\n"); return(0); } if(player->flagIsSet(P_MISTED)) { sock->print("How does a mist sit down?\n"); return(0); } if(player->inCombat()) { sock->print("Don't sit in the middle of combat!\n"); sock->print("Are you daft?\n"); return(0); } player->setFlag(P_SITTING); player->unhide(); } OUT("You sit down.\n", "%M takes a seat."); } else if(str == "stand") { if(player) { if(!player->flagIsSet(P_SITTING)) { sock->print("You are already standing!\n"); return(0); } player->clearFlag(P_SITTING); player->unhide(); } OUT("You stand up.\n", "%M stands up."); } else if(str == "wince") { OUT("You wince painfully.\n", "%M winces painfully."); } else if(str == "roll") { OUT_HISHER("You roll your eyes in exasperation.\n", "%M rolls %s eyes in exasperation."); } else if(str == "raise") { OUT("You raise an eyebrow questioningly.\n", "%M raises an eyebrow questioningly."); } else if(str == "grr") { if(target) { OUT4("You stare menacingly at %N.\n", "%M threatens you with a look of death.\n", "%M stares at %N with a look of hatred."); } else { OUT("You start looking angry.\n", "%M looks angrily around."); } } else if(str == "growl") { if(target) { OUT4("You growl at %N.\n", "%M threatens you with a growl.\n", "%M growls at %N threateningly."); } else { OUT("You growl.\n", "%M growls threateningly."); } } else if(str == "dirt") { if(target) { OUT4("You kick dirt on %N.\n", "%M kicks dirt on you.\n", "%M kicks dirt on %N."); } else { OUT("You kick the dirt.\n", "%M kicks the dirt."); } } else if(str == "cough") { if(target) { OUT4("You cough on %N.\n", "%M coughs on you.\n", "%M coughs on %N."); } else { OUT("You cough politely.\n", "%M coughs politely."); } } else if(str == "bird") { if(target) { OUT4("You flip off %N.\n", "%M flips you the bird.\n", "%M flips off %N."); } else { OUT("You gesture indignantly.\n", "%M gestures indignantly."); } } else if(str == "grab") { if(target) { OUT4("You pull on %N.\n", "%M pulls on you eagerly.\n", "%M pulls on %N eagerly."); } else actionFail(creature, str); } else if(str == "shove") { if(target) { OUT4("You push %N away.\n", "%M pushes you away.\n", "%M shoves %N away."); } else actionFail(creature, str); } else if(str == "high5") { if(target) { OUT4("You slap %N a triumphant highfive.\n", "%M slaps you a triumphant highfive.\n", "%M slaps %N a triumphant highfive."); } else actionFail(creature, "highfive"); } else if(str == "moon") { if(target) { OUT4("You moon %N.\n", "%M moons you. It's a full moon tonight!\n", "%M moons %N. It's a full moon tonight!"); } else { OUT_HISHER("You moon the world.\n", "%M drops %s pants and moons the world."); } } else if(str == "purr") { if(target) { OUT4("You purr at %N.\n", "%M purrs provocatively at you.\n", "%M purrs provocatively at %N."); } else { OUT("You purr provocatively.\n", "%M purrs provocatively."); } } else if(str == "taunt") { if(target) { OUT4("You taunt and jeer at %N.\n", "%M taunts and jeers at you.\n", "%M taunts and jeers at %N."); } else actionFail(creature, str); } else if(str == "eye") { if(target) { OUT4("You eye %N suspiciously.\n", "%M eyes you suspiciously.\n", "%M eyes %N suspiciously."); } else actionFail(creature, str); } else if(str == "worship") { if(target) { OUT4("You worship %N.\n", "%M bows down in worship of you.\n", "%M bows down and worships %N."); } else actionFail(creature, str); } else if(str == "flip") { num = mrand(1,100); if(creature->getClass() == CLERIC && creature->getDeity() == KAMIRA) { sock->print("You flip a coin. It lands on its side!\n"); broadcast(sock, room, "%M flips a coin. It lands on its side!", creature); } else if(target) { sock->print("You flip a coin: %s.\n", (num >50 ) ? "heads" : "tails"); target->print("%M flips a coin: %s.\n", creature,(num >50 ) ? "heads" : "tails"); broadcast(sock, target->getSock(), room, "%M flips a coin and shows it to %N.", creature, target); } else { sock->print("You flip a coin: %s.\n", (num >50 ) ? "heads" : "tails"); broadcast(sock, room, "%M flips a coin.",creature); } } else if(str == "rps") { if(target) { OUT4("You offer rock-paper-scissors to %N.\n", "%M wants to do rock-paper-scissors with you.\n", "%M offers to do rock-paper-scissors with %N."); } else { num = mrand(1,100); if(num <= 33) strcpy(temp, "rock"); else if(num > 33 && num <= 66) strcpy(temp, "paper"); else strcpy(temp, "scissors"); sock->print("One, two, three: You chose %s.\n", temp); broadcast(sock, room, "Rock-paper-scissors: %M chose %s.", creature, temp); } } else if(str == "dice") { if(target) { OUT4("You challenge %N to a game of dice.\n", "%M challenges you to a game of dice.\n", "%M challenges %N to a game of dice."); } else { num1 = mrand(1,6); num2 = mrand(1,6); // sock->print("num: %d.", num); num = ((num1 + num2)); if(creature->getClass() == CLERIC && creature->getDeity() == KAMIRA) { if(mrand(1,100) <= 50) num = 12; else num = 2; } sock->print("You roll 2d6\n: %d\n", num); broadcast(sock, room, "(Dice 2d6): %M got %d.", creature, num ); } } else if(str == "meiko") { if(target) { OUT4("You meiko %N lasciviously.\n", "%M meikos you lasciviously.\n", "%M meikos %N lasciviously."); } else { OUT("You meiko lustfully.\n", "%M meikos lustfully."); } } else if(str == "hail") { if(target) { OUT4("You hail %N.\n", "%M hails you.\n", "%M says, \"Hail, %N.\""); } else { OUT("You hail everyone.\n", "%M says, \"Hail!\""); } } else if(str == "lobotomy" && player && player->isCt()) { if(pTarget && !pTarget->isDm()) { pTarget->wake("You awaken suddenly!"); if(pTarget->flagIsSet(P_BRAINDEAD)) { pTarget->clearFlag(P_BRAINDEAD); pTarget->print("You are no longer lobotomized.\n"); sock->print("%M is no longer lobotomized.\n", pTarget); if(!creature->isDm()) log_immort(false, player, "%s removes %s's lobotomy in room %s.\n", player->name, target->name, room->fullName().c_str()); return(0); } else { target->setFlag(P_BRAINDEAD); OUT4("You give %N a lobotomy.\n", "%M gives you a lobotomy.\n", "%M just gave %N a frontal lobotomy."); if(!creature->isDm()) log_immort(false, player, "%s lobotomizes %s in room %s.\n", player->name, target->name, room->fullName().c_str()); } } else { OUT("You contemplate lobotomizing someone.\n", "%M contemplates a performing a lobotomy on someone."); } } else if(str == "point") { if(target) { if(pTarget) { OUT4("You point at %N.\n", "%M points at you.\n", "%M points at %N."); } else { if(cmnd->val[1] > 1) { sock->print("You point at %N.\n", target); broadcast(sock, room, "%M points at %N.", creature, target); } else { sock->print("You point at %N.\n", target); broadcast(sock, room, "%M points at %N.", creature, target); } } } else { object = findObject(creature, room->first_obj, cmnd); if(object) { if(cmnd->val[1] > 1) { if(!(object->flagIsSet(O_NO_PREFIX) && (object->flagIsSet(O_NO_TAKE) || object->flagIsSet(O_SCENERY)))) { sock->printColor("You point at %P.\n", object); broadcast(sock, room, "%M points at %P.", creature, object); } else { sock->printColor("You point at the %P.\n", object, cmnd->val[1]); broadcast(sock, room, "%M points at the %P %d.", creature, object); } } else { if(!(object->flagIsSet(O_NO_PREFIX) && (object->flagIsSet(O_NO_TAKE) || object->flagIsSet(O_SCENERY)))) { sock->printColor("You point at %P.\n", object); broadcast(sock, room, "%M points at %P.", creature, object); } else { sock->printColor("You point at the %P.\n", object); broadcast(sock, room, "%M points at the %P.", creature, object); } } } else { lowercize(cmnd->str[1], 0); exit = findExit(creature, cmnd); if(exit && !exit->flagIsSet(X_DESCRIPTION_ONLY) && !exit->isConcealed(player)) { if(cmnd->val[1] > 1) { sock->print("You point to the %s %d.\n", exit->name, cmnd->val[1]); broadcast(sock, room, "%M points to the %s %d.", creature, exit->name, cmnd->val[1]); } else { sock->print("You point to the %s.\n", exit->name); broadcast(sock, room, "%M points to the %s.", creature, exit->name); } } else { sock->print("You point at yourself.\n"); broadcast(sock, room,"%M points at %sself.",creature,creature->himHer()); } } } } else if(str == "punch") { if(target) { OUT4("You punch %N.\n", "%M punches you.\n", "%M punches %N."); } else actionFail(creature, str); } else if(str == "nibble") { if(target) { OUT4("You nibble %N's ear.\n", "%M nibbles your ear.\n", "%M nibbles %N's ear."); } else actionFail(creature, str); } else if(str == "lick") { if(target) { OUT4("You lick %N all over.\n", "%M licks you all over.\n", "%M licks %N all over."); } else { sock->print("You lick your wounds.\n"); broadcast(sock, room, "%M licks %s wounds.", creature, creature->hisHer()); } } else if(str == "choke") { if(target) { OUT4("You choke %N.\n", "%M chokes you.\n", "%M chokes %N."); } else { sock->print("You choke.\n"); broadcast(sock, room, "%M chokes.", creature); } } else if(str == "psycho") { if(target) { OUT4("You grin psychotically at %N.\n", "%M grins at you psychotically.\n", "%M grins psychotically at %N."); } else { sock->print("You grin like a psychopath.\n"); broadcast(sock, room,"%M grins like a psychopath.",creature); } } else if(str == "zip") { if(target) { OUT4("You zip %N's lips.\n", "%M zips your lips.\n", "%M zips %N's lips."); } else { sock->print("You zip your lips.\n"); broadcast(sock, room, "%M zips %s lips.", creature, creature->hisHer()); } } else if(str == "behind") { if(target) { OUT4("You hide behind %N for protection.\n", "%M runs behind you and hides.\n", "%M hides behind %N for protection."); } else { sock->print("You look for something to hide behind.\n"); broadcast(sock, room, "%M looks for something to hide behind.", creature); } } else if(str == "narrow") { if(target) { sock->print("You narrow your eyes at %N.\n", target); target->print("%M narrows %s eyes at you.\n", creature, creature->hisHer()); broadcast(sock, target->getSock(), room, "%M narrows %s eyes at %N.", creature, creature->hisHer(), target); } else { sock->print("You narrow your eyes.\n"); broadcast(sock, room, "%M narrows %s eyes evilly.", creature, creature->hisHer()); } } else if(str == "meow") { if(target) { OUT4("You meow seductively at %N.\n", "%M meows at you seductively.\n", "%M meows seductively at %N."); } else { sock->print("You meow like a cat.\n"); broadcast(sock, room, "%M meows like a cat.", creature); } } else if(str == "bhand") { if(target) { OUT4("You backhand %N.\n", "%M backhands you.\n", "%M backhands %N."); } else actionFail(creature, "backhand"); } else if(str == "beg") { if(target) { OUT4("You beg to %N.\n", "%M begs pathetically to you.\n", "%M begs pathetically to %N."); } else { sock->print("You beg pathetically.\n"); broadcast(sock, room, "%M begs pathetically.", creature); } } else if(str == "blow") { if(target) { OUT4("You blow %N a kiss.\n", "%M blows you a kiss.\n", "%M blows %N a kiss."); } else actionFail(creature, "blow a kiss to"); } else if(str == "caress") { if(target) { OUT4("You caress %N's body softly.\n", "%M caresses your body softly.\n", "%M caresses %N's body softly."); } else { sock->print("You caress yourself.\n"); broadcast(sock, room,"%M caresses %sself all over.",creature,creature->himHer()); } } else if(str == "cower") { if(target) { OUT4("You cower indignantly before %N.\n", "%M cowers idignantly before you.\n", "%M cowers indignantly before %N."); } else { sock->print("You cower indignantly.\n"); broadcast(sock, room,"%M cowers indignantly.",creature); } } else if(str == "cuddle") { if(target) { OUT4("You cuddle with %N.\n", "%M cuddles up with you.\n", "%M cuddles with %N."); } else actionFail(creature, "cuddle with"); } else if(str == "disgust") { if(target) { OUT4("You look disgustedly at %N.\n", "%M gives you a disgusted look.\n", "%M looks disgustedly at %N."); } else { sock->print("You look disgusted.\n"); broadcast(sock, room,"%M looks disgusted.",creature); } } else if(str == "embrace") { if(target) { OUT4("You embrace %N lovingly.\n", "%M embraces you lovingly.\n", "%M embraces %N lovingly."); } else actionFail(creature, str); } else if(str == "fondle") { if(target) { OUT4("You fondle %N.\n", "%M fondles you.\n", "%M fondles %N."); } else { sock->print("You fondle yourself.\n"); broadcast(sock, room,"%M fondles %sself.",creature,creature->himHer()); } } else if(str == "grope") { if(target) { OUT4("You grope %N all over.\n", "%M gropes you all over.\n", "%M gropes %N."); } else { sock->print("You grope yourself.\n"); broadcast(sock, room,"%M gropes %sself.",creature,creature->himHer()); } } else if(str == "grovel") { if(target) { OUT4("You grovel obsequiously before %N.\n", "%M grovels obsequiously before you.\n", "%M grovels obsequiously before %N."); } else actionFail(creature, "grovel before"); } else if(str == "listen") { if(target) { OUT4("You listen to %N carefully.\n", "%M listens carefully to you.\n", "%M listens to %N carefully."); } else { sock->print("You listen carefully.\n"); broadcast(sock, room,"%M listens carefully.",creature); } } else if(str == "peck") { if(target) { OUT4("You peck %N on the cheek.\n", "%M pecks you on the cheek.\n", "%M pecks %N on the cheek."); } else { sock->print("You peck the ground like a chicken.\n"); broadcast(sock, room,"%M pecks the ground like a chicken.",creature); } } else if(str == "loom") { if(target) { OUT4("You loom menacingly over %N.\n", "%M looms menacingly over you.\n", "%M looms menacingly over %N."); } else actionFail(creature, "loom over"); } else if(str == "pants") { if(target) { OUT4("You depants %N!\n", "%M yanks down your pants! How embarrasing!\n", "%M yanked down %N's pants! DOH!"); } else actionFail(creature, "yank down", "se pants"); } else if(str == "lust") { if(target) { OUT4("You eye %N lustfully.\n", "%M eyes you lustfully.\n", "%M eyes %N lustfully."); } else actionFail(creature, "lust after"); } else if(str == "massage") { if(target) { OUT4("You give %N a sensual massage.\n", "%M massages you sensually.\n", "%M massages %N sensually."); } else { sock->print("You massage yourself.\n"); broadcast(sock, room,"%M massages %sself.",creature,creature->himHer()); } } else if(str == "noogie") { if(target) { OUT4("You give %N a death noogie!\n", "%M gives you a death noogie!\n", "%M gives %N a death noogie!"); } else actionFail(creature, str); } else if(str == "nudge") { if(target) { OUT4("You nudge %N annoyingly.\n", "%M nudges you annoyingly.\n", "%M nudges %N annoyingly."); } else actionFail(creature, str); } else if(str == "pinch") { if(target) { OUT4("You pinch %N teasingly.\n", "%M pinches you teasingly.\n", "%M pinches %N teasingly."); } else { sock->print("You pinch yourself. Owe!\n"); broadcast(sock, room,"%M pinched %sself. It looks like it hurt.",creature,creature->himHer()); } } else if(str == "pummel") { if(target) { OUT4("You pummel %N thouroughly.\n", "%M pummels you thouroughly.\n", "%M thouroughly pummels %N."); } else actionFail(creature, str); } else if(str == "rag") { if(target) { OUT4("You offer %N a drool and slobber rag.\n", "%M gives you a drool and slobber rag.\n", "%M gives %N a drool and slobber rag."); } else { sock->print("You wipe your mouth with a rag.\n"); broadcast(sock, room,"%M wipes %s mouth with a rag.",creature,creature->hisHer()); } } else if(str == "trip") { if(target) { OUT4("You trip %N.\n", "%M trips you off your feet.\n", "%M trips %N."); } else { sock->print("You trip all over yourself.\n"); broadcast(sock, room, "%M trips all over %sself.", creature, creature->himHer()); } } else if(str == "pester") { if(target) { OUT4("You pester %N.\n", "%M pesters you persistently.\n", "%M pesters %N persistently."); } else actionFail(creature, str); } else if(str == "rub") { if(target) { OUT4("You rub %N all over.\n", "%M rubs you all over.\n", "%M rubs %N all over."); } else { sock->print("You rub yourself.\n"); broadcast(sock, room,"%M rubs %sself.",creature,creature->himHer()); } } else if(str == "boo") { if(target) { OUT4("You boo and hiss at %N.\n", "%M boos and hisses at you.\n", "%M boos and hisses at %N."); } else { sock->print("You boo and hiss in disgust.\n"); broadcast(sock, room,"%M boos and hisses in disgust.",creature); } } else if(str == "oink") { if(target) { OUT4("You oink at %N.\n", "%M oinks at you.\n", "%M oinks at %N."); } else { sock->print("You oink like a pig.\n"); broadcast(sock, room,"%M oinks like a pig.",creature); } } else if(str == "shush") { if(target) { OUT4("You shush %N.\n", "%M tells you to shhh!\n", "%M shushes %N."); } else actionFail(creature, str); } else if(str == "ruffle") { if(target) { OUT4("You ruffle %N's hair.\n", "%M ruffles your hair.\n", "%M ruffles %N's hair."); } else { sock->print("You ruffle your hair.\n"); broadcast(sock, room,"%M ruffles %s hair.",creature,creature->hisHer()); } } else if(str == "pose") { if(target) { OUT4("You strike a pose for %N.\n", "%M strikes a triumpant pose for you.\n", "%M strikes a triumphant pose before %N."); } else { sock->print("You strike a triumphant pose.\n"); broadcast(sock, room,"%M strikes a triumphant pose.",creature); } } else if(str == "blink") { if(target) { OUT4("You blink at %N.\n", "%M blinks at you.\n", "%M blinks at %N."); } else { sock->print("You blink.\n"); broadcast(sock, room, "%M blinks.", creature); } } else if(str == "salute") { if(target) { OUT4("You give %N a salute.\n", "%M salutes you.\n", "%M gives %N a salute."); } else actionFail(creature, str); } else if(str == "scowl") { if(target) { OUT4("You scowl hatefully at %N.\n", "%M scowls hatefully at you.\n", "%M scowls hatefully at %N."); } else { sock->print("You scowl.\n"); broadcast(sock, room,"%M scowls.",creature); } } else if(str == "seduce") { if(target) { OUT4("You moan seductively at %N.\n", "%M seductively moans to you.\n", "%M moans seductively at %N."); } else actionFail(creature, str); } else if(str == "slobber") { if(target) { OUT4("You slobber all over %N.\n", "%M slobbers all over you.\n", "%M slobbers all over %N."); } else { sock->print("You slobber all over the place.\n"); broadcast(sock, room,"%M slobbers all over the place.",creature); } } else if(str == "smack") { if(target) { OUT4("You smack %N upside the head.\n", "%M smacks you upside the head.\n", "%M smacks %N upside the head."); } else actionFail(creature, str); } else if(str == "smell") { if(target) { OUT4("You smell %N inquisitively.\n", "%M smells you inquisitively.\n", "%M smells %N inquisitively."); } else { sock->print("You smell the air.\n"); broadcast(sock, room,"%M smells the air.",creature); } } else if(str == "snarl") { if(target) { OUT4("You snarl odiously at %N.\n", "%M snarls odiously at you.\n", "%M snarls odiously at %N."); } else { sock->print("You snarl odiously.\n"); broadcast(sock, room,"%M snarls odiously.",creature); } } else if(str == "sneer") { if(target) { OUT4("You sneer contemptuously at %N.\n", "%M sneers at you contemptuously.\n", "%M sneers contemptuously at %N."); } else { sock->print("You sneer contemptuously.\n"); broadcast(sock, room,"%M sneers contemptuously.",creature); } } else if(str == "snuggle") { if(target) { OUT4("You snuggle with %N.\n", "%M snuggles with you.\n", "%M snuggles with %N."); } else actionFail(creature, "snuggle with"); } else if(str == "spank") { if(target) { OUT4("You spank %N on the behind.\n", "%M spanks you on the behind.\n", "%M spanks %N on the behind."); } else actionFail(creature, str); } else if(str == "squeeze") { if(target) { OUT4("You squeeze %N tightly.\n", "%M squeezes you tightly.\n", "%M squeezes %N tightly."); } else actionFail(creature, str); } else if(str == "squint") { if(target) { OUT4("You squint dubiously at %N.\n", "%M squints dubiously at you.\n", "%M squints dubiously at %N."); } else { sock->print("You squint.\n"); broadcast(sock, room,"%M squints.",creature); } } else if(str == "haha") { if(target) { OUT4("You burst out laughing at %N.\n", "%M bursts out laughing at you.\n", "%M bursts out laughing at %N."); } else { sock->print("You burst out laughing.\n"); broadcast(sock, room,"%M bursts out laughing.",creature); } } else if(str == "hysterical") { if(target) { OUT4("You laugh hysterically at %N.\n", "%M laughs hysterically at you.\n", "%M laughs hysterically at %N."); } else { sock->print("You laugh hysterically.\n"); broadcast(sock, room,"%M laughs hysterically.",creature); } } else if(str == "swat") { if(target) { OUT4("You swat %N like a bug.\n", "%M swats you like a bug.\n", "%M swats %N like a bug."); } else { sock->print("You swat at flies in the air.\n"); broadcast(sock, room,"%M swats at flies in the air.",creature); } } else if(str == "stare") { if(target) { OUT4("You stare incredulously at %N.\n", "%M stares at you incredulously.\n", "%M stares incredulously at %N."); } else { sock->print("You stare emptily into space.\n"); broadcast(sock, room,"%M stares emptily into space.",creature); } } else if(str == "thumb") { if(target) { OUT4("You give %N a thumbs up.\n", "%M gives you a thumbs up.\n", "%M gives %N a thumbs up."); } else { sock->print("You give a thumbs up.\n"); broadcast(sock, room,"%M gives a thumbs up.",creature); } } else if(str == "thwack") { if(target) { OUT4("You thwack %N on the back.\n", "%M thwacks you on the back.\n", "%M thwacks %N on the back."); } else actionFail(creature, str); } else if(str == "tip") { if(target) { OUT4("You tip %N like a cow.\n", "%M tips you like a cow.\n", "%M tips %N like a cow."); } else actionFail(creature, str); } else if(str == "tease") { if(target) { OUT4("You tease %N mischievously.\n", "%M teases you mischievously.\n", "%M teases %N mischievously."); } else actionFail(creature, str); } else if(str == "tug") { if(target) { OUT4("You tug %N's shirt relentlessly.\n", "%M tugs your shirt relentlessly.\n", "%M tugs %N's shirt relentlessly."); } else actionFail(creature, "tug on"); } else if(str == "warn") { if(target) { OUT4("You give %N a glance of warning.\n", "%M gives you a glance of warning.\n", "%M gives %N a glance of warning."); } else actionFail(creature, str); } else if(str == "laugh") { if(target) { OUT4("You laugh at %N.\n", "%M laughs at you.\n", "%M laughs at %N."); } else { sock->print("You fall down laughing.\n"); broadcast(sock, room,"%M falls down laughing.",creature); } } else if(str == "snicker") { if(target) { OUT4("You snicker at %N.\n", "%M snickers at you.\n", "%M snickers at %N."); } else { sock->print("You snicker.\n"); broadcast(sock, room,"%M snickers.",creature); } } else if(str == "clap") { if(target) { OUT4("You clap for %N.\n", "%M claps for you.\n", "%M claps for %N."); } else { sock->print("You clap your hands.\n"); broadcast(sock, room,"%M claps %s hands.",creature,creature->hisHer()); } } else if(str == "nod") { if(target) { OUT4("You nod to %N.\n", "%M nods to you.\n", "%M nods to %N."); } else { sock->print("You nod.\n"); broadcast(sock, room,"%M nods.",creature); } } else if(str == "wicked") { if(target) { OUT4("You laugh wickedly at %N.\n", "%M laughs at you wickedly.\n", "%M laughs wickedly at %N."); } else { sock->print("You laugh wickedly.\n"); broadcast(sock, room,"%M laughs wickedly.",creature); } } else if(str == "tnl" && player) { if(player->getActualLevel() > player->getLevel()) { broadcast(player->getSock(), player->getRoom(), "%M needs %s experience to relevel.", player, player->expToLevel(false).c_str()); sock->print("You need %s experience to relevel.\n", player->expToLevel(false).c_str()); } else { broadcast(player->getSock(), player->getRoom(), "%M needs %s experience to level.", player, player->expToLevel(false).c_str()); sock->print("You need %s experience to level.\n", player->expToLevel(false).c_str()); } } else if(str == "smile") { if(target) { OUT4("You smile happily to %N.\n", "%M smiles happily to you.\n", "%M smiles happily at %N."); } else { sock->print("You smile happily.\n"); broadcast(sock, room,"%M smiles happily.",creature); } } else if(str == "grin") { if(target) { OUT4("You grin evilly at %N.\n", "%M grins at you evilly.\n", "%M grins at %N evilly."); } else { sock->print("You grin evilly.\n"); broadcast(sock, room,"%M grins evilly.",creature); } } else if(str == "whip") { if(target) { OUT4("You whip %N savagely.\n", "%M whips you savagely.\n", "%M whips %N into submission."); } else actionFail(creature, str); } else if(str == "frown") { if(target) { OUT4("You frown at %N.\n", "%M frowns at you.\n", "%M frowns at %N."); } else { sock->print("You frown.\n"); broadcast(sock, room,"%M frowns.",creature); } } else if(str == "giggle") { if(target) { OUT4("You giggle at %N.\n", "%M giggles at you.\n", "%M giggles at %N."); } else { sock->print("You giggle inanely.\n"); broadcast(sock, room,"%M giggles inanely.",creature); } } else if(str == "whistle" || str == "whi" || str == "whis") { if(target) { OUT4("You whistle at %N.\n", "%M whistles at you.\n", "%M whistles at %N."); } else { sock->print("You whistle a tune.\n"); broadcast(sock, room,"%M whistles a tune.",creature,creature->himHer()); } } else if(str == "smirk") { if(target) { OUT4("You smirk wryly at %N.\n", "%M smirks at you wryly.\n", "%M smirks wryly at %N."); } else { sock->print("You smirk wryly.\n"); broadcast(sock, room,"%M smirks wryly.",creature); } } else if(str == "drool") { if(target) { OUT4("You drool on %N.\n", "%M drools all over you.\n", "%M drools all over %N."); } else { sock->print("You drool.\n"); broadcast(sock, room,"%M drools all over %sself.",creature,creature->himHer()); } } else if(str == "grumble") { if(target) { OUT4("You grumble darkly at %N.\n", "%M grumbles darkly at you.\n", "%M grumbles darkly at %N."); } else { sock->print("You grumble darkly.\n"); broadcast(sock, room,"%M grumbles darkly.",creature); } } else if(str == "mutter") { if(target) { OUT4("You mutter obscenities about %N.\n", "%M mutters obscenities about you.\n", "%M mutters obscenities about %N."); } else { sock->print("You mutter.\n"); broadcast(sock, room,"%M mutters obscenities under %s breath.",creature,creature->hisHer()); } } else if(str == "congrats") { if(target) { OUT4("You congratulate %N.\n", "%M congratulates you.\n", "%M congratulates %N."); } else { sock->print("You congratulate yourself.\n"); broadcast(sock, room,"%M congratulates %sself.",creature,creature->himHer()); } } else if(str == "imitate") { if(target) { OUT4("You imitate %N.\n", "%M imitates you.\n", "%M imitates %N."); } else actionFail(creature, str); } else if(str == "bark") { if(target) { OUT4("You bark and growl at %N.\n", "%M barks and growls at you.\n", "%M barks and growls at %N."); } else { sock->print("You bark and growl.\n"); broadcast(sock, room, "%M barks and growls.", creature); } } else if(str == "paranoid") { if(target) { OUT4("You look warily at %N.\n", "%M gives you a paranoid look.\n", "%M looks at %N with paranoia."); } else actionFail(creature, "be paranoid about"); } else if(str == "damn") { if(target) { OUT4("You damn %N to the Abyss.\n", "%M damns you to the Abyss.\n", "%M damns %N to the Abyss."); } else { sock->print("You damn the gods.\n"); broadcast(sock, room,"%M damns the gods.",creature); } } else if(str == "fist") { if(target) { OUT4("You shake your fist at %N.\n", "%M shakes a fist at you in rage.\n", "%M shakes a fist at %N in rage."); } else { sock->print("You shake your fist at the gods.\n"); broadcast(sock, room,"%M shakes %s fist at the gods.",creature,creature->hisHer()); } } else if(str == "defenestrate") { if(target) { OUT4("You toss %N out the nearest window.\n", "%M tosses you out the nearest window.\n", "%M tosses %N out the nearest window."); } else { sock->print("You dive out of the nearest window.\n"); broadcast(sock, room,"%M dives out the nearest window.",creature); } } else if(str == "vomjom") { if(target) { OUT4("You challenge %N to a game of Starcraft.\n", "%M challenges you to a game of Starcraft, insisting that you will lose in a horrible way.\n", "%M says %N sucks at Starcraft."); } else actionFail(creature, str); } else if(str == "whine") { if(target) { OUT4("You whine to %N.\n", "%M whines annoyingly to you.\n", "%M whines annoyingly to %N."); } else { sock->print("You whine annoyingly.\n"); broadcast(sock, room,"%M whines annoyingly.",creature); } } else if(str == "groan") { if(target) { OUT4("You groan miserably at %N.\n", "%M groans at you miserably.\n", "%M groans miserably at %N."); } else { sock->print("You groan miserably.\n"); broadcast(sock, room,"%M groans miserably.",creature); } } else if(str == "beam") { if(target) { OUT4("You beam at %N happily.\n", "%M beams happily at you.\n", "%M beams happily at %N."); } else { sock->print("You beam happily.\n"); broadcast(sock, room,"%M beams happily.",creature); } } else if(str == "warm") { if(target) { OUT4("You give %N a warm smile.\n", "%M gives you a warm smile.\n", "%M gives %N a warm smile."); } else { sock->print("You smile warmly.\n"); broadcast(sock, room,"%M smiles warmly.",creature); } } else if(str == "fangs") { if(!creature->isEffected("vampirism")) { sock->print("You don't have any fangs!\n"); return(0); } if(target) { OUT4("You bare your fangs at %N.\n", "%M bares vampire fangs at you.\n", "%M bares vampire fangs at %N."); } else { sock->print("You show your fangs to everyone.\n"); broadcast(sock, room,"%M shows %s bloody fangs to everyone.",creature, creature->hisHer()); } } else if(str == "hiss") { if(!creature->isEffected("vampirism")) { sock->print("Only vampires can hiss evilly at people.\n"); return(0); } if(target) { OUT4("You hiss evilly at %N.\n", "%M hisses evilly at you.\n", "%M hisses evilly at %N."); } else { sock->print("You hiss evilly at everyone in the room.\n"); broadcast(sock, room,"%M hisses evilly at everyone in the room.", creature); } } else if(str == "gnaw") { if(!creature->isEffected("lycanthropy")) { sock->print("Only werewolves can gnaw on people.\n"); return(0); } if(target) { target->wake("You awaken suddenly!"); OUT4("You ravenously gnaw on %N.\n", "%M gnaws on you ravenously.\n", "%M ravenously gnaws on %N."); } else { sock->print("You gnaw on a bone.\n"); broadcast(sock, room,"%M gnaws on a bone.", creature); } } else if(str == "hunger") { if(target) { if( !creature->isEffected("vampirism") && !creature->isEffected("lycanthropy") && creature->getDisplayRace() != GOBLIN && creature->getDisplayRace() != TROLL && creature->getDisplayRace() != OGRE && creature->getDisplayRace() != ORC && creature->getDisplayRace() != MINOTAUR && pTarget ) { sock->print("%s doesn't make you hungry.\n", target->upHeShe()); return(0); } OUT4("You stare hungrily at %N.\n", "%M stares at you hungrily.\n", "%M stares hungrily at %N."); } else { sock->print("You tell everyone you are dying of hunger.\n"); broadcast(sock, room,"%M is extremely hungry - starving in fact.", creature); } } else if(str == "sneeze") { if(target) { OUT4("You sneeze on %N.\n", "%M sneezes on you.\n", "%M sneezed on %N."); } else { sock->print("You sneeze.\n"); broadcast(sock, room,"%M sneezes.",creature); } } else if(str == "show") { if(cmnd->num < 2) { sock->print("Show what to whom?\n"); return(0); } target = room->findCreature(creature, cmnd->str[2], cmnd->val[2], false); object = findObject(creature, creature->first_obj, cmnd); if(target) { if(!object) { sock->print("You don't have that out in your inventory.\n"); return(0); } sock->printColor("You proudly show %N %P.\n", target, object); target->printColor("%M proudly shows you %P.\n", creature, object); broadcast(sock, target->getSock(), room, "%M proudly shows %N %P.", creature, target, object); target->hooks.execute("onSocialInteraction", creature); } else { if(!object) { sock->print("You don't have that out in your inventory.\n"); return(0); } sock->printColor("You proudly show %P to everyone in the room.\n", object); broadcast(sock, room, "%M proudly shows %P to everyone in the room.", creature, object); } } else if(str == "fun") { if(target) { OUT4("You make fun of %N.\n", "%M makes fun of you.\n", "%M makes fun of %N."); } else actionFail(creature, "make fun of"); } else if(str == "french") { if(target) { OUT4("You french kiss with %N.\n", "%M french kisses you.\n", "%M frenches with %N."); } else actionFail(creature, "french kiss"); } else if(str == "pan") { if(target) { OUT4("You smack %N over the head with a frying pan.\n", "%M smacks you over the head with a frying pan.\n", "%M smacks %N over the head with a frying pan."); } else actionFail(creature, "smack", "m over the head with a frying pan?"); } else if(str == "squeeze") { if(target) { OUT4("You squeeze %N tightly.\n", "%M squeezes you close.\n", "%M squeezes %N close."); } else actionFail(creature, str); } else if(str == "smooch") { if(target) { OUT4("You smooch with %N.\n", "%M smooches with you.\n", "%M smooches with %N."); } else actionFail(creature, str); } else if(str == "evil") { if(target) { OUT4("You look evilly at %N.\n", "%M gives you an evil look.\n", "%M gives %N an evil look."); } else actionFail(creature, "look evilly at"); } else if(str == "wedgy") { if(target) { OUT4("You give %N a wedgy!\n", "%M gives you a wedgy!\n", "%M gives %N a wedgy...OWE!"); } else actionFail(creature, "give", "m a wedgy"); } else if(str == "bitchslap") { if(target) { OUT4("You bitchslap %N like a two cent hooker.\n", "%M bitchslaps you like a two cent hooker.\n", "%M bitchslaps %N like a two cent hooker."); } else actionFail(creature, str); } else if(str == "beckon") { if(target) { OUT4("You beckon %N to follow you.\n", "%M beckons you to follow.\n", "%M beckons %N to follow."); } else actionFail(creature, "beckon", "m to follow you"); } else if(str == "bonk") { if(target) { OUT4("You bonk %N on the head. This means war!\n", "%M bonks you on the head. This means war!\n", "%M bonks %N on the head. This means war!"); } else actionFail(creature, str); } else if(str == "thank") { if(target) { OUT4("You thank %N profusely.\n", "%M thanks you profusely.\n", "%M thanks %N profusely."); } else actionFail(creature, str); } else if(str == "jk") { sock->print("You tell everyone you're just kidding.\n"); broadcast(sock, room, "%M is only kidding.", creature); } else if(str == "halo") { OUT_HISHER("You point at the halo about your head.\n", "%M points at the halo about %s head."); } else if(str == "die") { OUT_HISHER("You play dead dramatically.\n", "%M grabs %s chest and falls over."); } else if(str == "twitch") { OUT("You twitch insanely.\n", "%M twitches insanely."); } else if(str == "bubble") { OUT("You bubble happily.\n", "%M bubbles happily."); } else if(str == "moan") { OUT("You moan with pleasure.\n", "%M moans with pleasure."); } else if(str == "afk") { sock->print("Please use the command \"set afk\" to define yourself afk.\n"); } else if(str == "ahem") { OUT_HISHER("You clear your throat loudly.\n", "%M clears %s throat loudly."); } else if(str == "attention") { OUT("You stand at attention.\n", "%M snaps to attention."); } else if(str == "babble") { OUT("You babble incoherently.\n", "%M babbles incoherently."); } else if(str == "beer") { OUT("You slam a beer.\n", "%M slams a beer."); } else if(str == "ballz") { if(!creature->isEffected("lycanthropy") && !creature->isCt()) { sock->print("Don't do that! That's disgusting!\n"); return(0); } if(creature->getSex() != SEX_MALE) { sock->print("You can't do that! You don't have the right anatomy!\n"); return(0); } sock->print("You sit down and lick your balls.\n"); broadcast(sock, room, "%M is licking %s balls.", creature, creature->hisHer()); } else if(str == "wagg") { if(!creature->isEffected("lycanthropy") && !creature->isCt()) { sock->print("You don't have a tail to wag.\n"); return(0); } sock->print("You wag your tail happily.\n"); broadcast(sock, room, "%M wags %s tail in excitement.", creature, creature->hisHer()); } else if(str == "collapse") { OUT("You collapse from exhaustion.\n", "%M collapses from exhaustion."); } else if(str == "comb") { OUT_HISHER("You comb your hair.\n", "%M combs %s hair."); } else if(str == "compose") { sock->print("You compose yourself.\n"); broadcast(sock, room,"%M visibly composes %sself.",creature,creature->himHer()); } else if(str == "crazy") { OUT_HISHER("You feel crazy.\n", "%M gets a crazy look in %s eyes."); } else if(str == "curl") { OUT("You curl up in a ball.\n", "%M curls up in a ball to sleep."); } else if(str == "curse") { OUT("You curse indignantly.\n", "%M curses like a sailor."); } else if(str == "daydream") { OUT("You daydream.\n", "%M daydreams."); } else if(str == "doh") { sock->print("You slap yourself on the head.\n"); broadcast(sock, room,"%M says, \"DOH!\"",creature); } else if(str == "fidget") { OUT("You fidget uncontrollably.\n", "%M fidgets uncontrollably."); } else if(str == "foam") { OUT("You foam at the mouth.\n", "%M foams at the mouth."); } else if(str == "freak") { OUT("You freak out.\n", "%M freaks out in a bad way."); } else if(str == "freeze") { OUT_HISHER("You freeze.\n", "%M freezes in %s tracks."); } else if(str == "grimace") { OUT("You grimace.\n", "%M grimaces in pain."); } else if(str == "gag") { OUT("You gag uncontrollably.\n", "%M gags disgustedly."); } else if(str == "gibber") { OUT("You gibber insanely.\n", "%M gibbers insanely."); } else if(str == "grind") { OUT_HISHER("You grind your teeth.\n", "%M grinds %s teeth."); } else if(str == "lag") { sock->print("You inform everyone you are lagging horrendously.\n"); broadcast(sock, room, "%M is lagging horrendously.", creature); } else if(str == "monkey") { OUT("You dance the monkey boy.\n", "%M does the monkey boyee yeeeaaaa...."); } else if(str == "jiggy") { OUT("You get jiggy with it.\n", "%M gets jiggy with it."); } else if(str == "mope") { OUT("You mope sadly in a corner.\n", "%M mopes sadly in a corner."); } else if(str == "moo") { OUT("You moo.\n", "%M moos like a cow."); } else if(str == "mosh") { OUT_HISHER("You mosh around wildly.\n", "%M moshes in %s own mosh pit."); } else if(str == "murmur") { if(player && player->flagIsSet(P_SLEEPING)) { OUT_HISHER("You murmur.\n", "%M murmurs something in %s sleep."); } else { OUT("You murmur.\n", "%M murmurs something."); } } else if(str == "pace") { OUT("You pace.\n", "%M paces back and forth impatiently."); } else if(str == "panic") { OUT("You start to panic.\n", "%M begins to panic."); } else if(str == "pant") { OUT("You pant like a dog.\n", "%M pants like a dog."); } else if(str == "quack") { OUT("You quack like a duck.\n", "%M quacks like a duck."); } else if(str == "rant") { OUT("You rant and rave.\n", "%M rants and raves."); } else if(str == "roar") { OUT("You roar like a lion.\n", "%M roars like a lion."); } else if(str == "rofl") { OUT("You roll on the ground laughing.\n", "%M rolls on the ground in a fit of laughter."); } else if(str == "sad") { OUT_HISHER("You feel sad.\n", "%M gets a sad look in %s eyes."); } else if(str == "scream") { OUT("You scream in terror.\n", "%M screams in terror."); } else if(str == "shiver") { OUT("You shiver from a chill.\n", "%M shivers from a chill."); } else if(str == "shudder") { OUT("You shudder in horror.\n", "%M shudders in horror."); } else if(str == "snore") { if(player && !player->flagIsSet(P_SLEEPING) && !player->isStaff()) { player->print("You aren't sleeping!\n"); } else { OUT("You snore loudly.\n", "%M snores loudly."); } } else if(str == "snort") { OUT("You snort like a hedgehog.\n", "%M snorts like a hedgehog."); } else if(str == "spaz") { sock->print("You spaz out.\n"); broadcast(sock, room,"%M spazzes out, running around and tripping all over %sself.",creature, creature->himHer()); } else if(str == "spin") { OUT("You spin around happily.\n", "%M spins around happily."); } else if(str == "squeal") { OUT("You squeal like a stuck pig.\n", "%M squeals like a stuck pig."); } else if(str == "squirm") { OUT("You squirm and giggle.\n", "%M squirms and giggles."); } else if(str == "stretch") { OUT_HISHER("You stretch your body.\n", "%M stretches %s arms and legs."); } else if(str == "strip") { OUT("You strip off all your clothes.\n", "%M strips! Woohoo!"); } else if(str == "stumble") { OUT("You stumble around aimlessly.\n", "%M stumbles around aimlessly."); } else if(str == "surrender") { OUT_HISHER("You surrender.\n", "%M throws up %s hands in surrender."); } else if(str == "sweat") { OUT("You sweat uncontrollably.\n", "%M sweats uncontrollably."); } else if(str == "tantrum") { OUT("You run around the room and break stuff.\n", "%M runs around the room and breaks stuff."); } else if(str == "triumph") { OUT("You cheer in triumph.\n", "%M cheers in triumph."); } else if(str == "wail") { OUT("You wail like a banshee.\n", "%M wails like a banshee."); } else if(str == "wiggle") { OUT("You wiggle insanely.\n", "%M wiggles insanely."); } else if(str == "writhe") { OUT("You writhe in pain.\n", "%M falls to the ground and writhes in pain."); } else if(str == "yodel") { OUT("You yodel loudly.\n", "%M yodels loudly."); } else if(str == "worry") { OUT_HISHER("You look worried.\n", "%M gets a worried look on %s face."); } else if(str == "fall") { OUT_HISHER("You fall on your face.\n", "%M falls on %s face."); } else if(str == "cluck") { OUT("You cluck like a chicken.\n", "%M clucks like a chicken."); } else if(str == "stagger") { OUT("You stagger around.\n", "%M staggers around."); } else if(str == "crow") { OUT("You crow like a rooster.\n", "%M crows like a rooster."); } else if(str == "bored") { OUT("You die of boredom.\n", "%M dies of boredom."); } else if(str == "cornholio") { OUT("You shake uncontrollably and put your shirt over your head.\n", "%M shakes and yells, \"I am CORNHOLIO!!!\""); } else if(str == "munch") { OUT("You munch on some food.\n", "%M munches on some food."); } else if(str == "nose") { OUT_HISHER("You blow your nose.\n", "%M blows %s nose. What a mess!"); } else if(str == "count") { OUT("You count slowly.\n", "%M begins to count: 1...2...3...4..."); } else if(str == "glaze") { OUT("Your eyes glaze over.\n", "%M's eyes begin to glaze over."); } else if(str == "wall") { OUT_HISHER("You stand your ground.\n", "%M stands %s ground like an impenetrable wall."); } else if(str == "fft") { OUT("You spit like a cat.\n", "%M spits like a cat: fft! fft!"); } else if(str == "lol") { OUT("You laugh out loud.\n", "%M laughs out loud."); } else if(str == "wait") { OUT("You wait patiently.\n", "%M waits patiently."); } else if(str == "bear") { OUT("You roar like a grizzly bear.\n", "%M roars like a grizzly bear."); } else if(str == "cgar") { OUT("You smoke a cigar.\n", "%M smokes a cigar."); } else if(str == "phew") { OUT_HISHER("You wipe your brow in relief.\n", "%M wipes %s brow in relief."); } else if(str == "doodle") { OUT("You doodle pictures in the dirt.\n", "%M doodles pictures in the dirt."); } else if(str == "sniffle") { OUT("You sniffle sadly.\n", "%M sniffles sadly."); } else if(str == "sob") { OUT("You sob like a child.\n", "%M sobs like a child."); } else if(str == "shuffle") { OUT("You shuffle from side to side.\n", "%M shuffles nervously from one foot to the other."); } else if(str == "ok") { sock->print("You say, \"ok.\"\n"); broadcast(sock, room,"%M says, \"ok.\"",creature); } else if(str == "wild") { OUT("You growl like a trapped wild animal.\n", "%M growls like a trapped wild animal."); } else if(str == "clean") { OUT("You clean up the room.\n", "%M cleans up the room."); } else if(str == "froth") { OUT("You froth at the mouth.\n", "%M froths at the mouth."); } else if(str == "bathe") { OUT("You take a bath.\n", "%M takes a bath."); } else if(str == "crack") { OUT_HISHER("You crack your knuckles.\n", "%M cracks %s knuckles."); } else if(str == "innocent") { OUT("You whistle innocently.\n", "%M whistles innocently."); } else if(str == "boggle") { OUT("You boggle at the concept.\n", "%M visibly boggles at the concept."); } else if(!player) return(2); return(0); } //********************************************************************* // actionFail //********************************************************************* // print the error message to the right person int actionFail(Creature* player, bstring action, bstring second) { action.at(0) = up(action.at(0)); player->print("%s who%s?\n", action.c_str(), second.c_str()); return(0); } //********************************************************************* // canDefecate //********************************************************************* bool Player::canDefecate() const { if(inCombat()) return(false); if(isPoisoned() || isDiseased()) return(false); if(daily[DL_DEFEC].cur < 1 || getLevel() < 4) return(false); return(true); }