// $Id: ar_skll.cc,v 1.5.2.1 2000/03/05 05:13:06 justin Exp $ // $Revision: 1.5.2.1 $ $Author: justin $ $Date: 2000/03/05 05:13:06 $ // //ScryMUD Server Code //Copyright (C) 1998 Ben Greear // //This program is free software; you can redistribute it and/or //modify it under the terms of the GNU General Public License //as published by the Free Software Foundation; either version 2 //of the License, or (at your option) any later version. // //This program is distributed in the hope that it will be useful, //but WITHOUT ANY WARRANTY; without even the implied warranty of //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //GNU General Public License for more details. // //You should have received a copy of the GNU General Public License //along with this program; if not, write to the Free Software //Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // To contact the Author, Ben Greear: greear@cyberhighway.net, (preferred) // greearb@agcs.com // //*********************** ar_sklls.cc ********************// #include "misc.h" #include "misc2.h" #include "classes.h" #include "spells.h" #include "battle.h" #include "ar_skll.h" #include "skills.h" #include "commands.h" #include "batl_prc.h" #include <PtrArray.h> int berserk(critter& pc) { String buf(100); if (!ok_to_do_action(NULL, "mVSPF", 0, pc)) { return -1; }//if return do_berserk(pc); }//berserk int do_berserk(critter& pc) { String buf(100); if (pc.isMob()) { mudlog.log(ERROR, "ERROR: MOB sent to do_berserk.\n"); return -1; }//if if (pc.MOV < 35) { show("You are too exhausted!\n", pc); return -1; }//if critter* ptr; ROOM.makeReadyForAreaSpell(); int flag = FALSE; if (skill_did_hit(pc, BERZERK_SKILL_NUM, pc)) { while ((ptr = ROOM.findNextSpellCritter())) { if (ptr != &pc) { if (ptr->mob || (ptr->pc && HaveData(ptr, pc.IS_FIGHTING))) { if (ptr->pc && ptr->PC_FLAGS.get(7)) { //if !hassle continue; }//if if (ptr->isMob()) { ptr = mob_to_smob(*ptr, pc.getCurRoomNum()); }//if flag = TRUE; ptr = check_for_diversions(*ptr, "MB", pc); if (!ptr) { //mirror was hit probably continue; }//if if (!HaveData(ptr, pc.IS_FIGHTING)) { join_in_battle(pc, *ptr); }//if if (ptr->isUsingClient()) { show("<BATTLE>", *ptr); } else if (ptr->isUsingColor()) { show(*(ptr->getBattleColor()), *ptr); } int show_vict_tags = TRUE; do_battle_round(pc, *ptr, 10, show_vict_tags); // Tags will only be shown in do_battle_round if // the victim died (and was a PC) if (show_vict_tags) { if (ptr->isUsingClient()) { show("</BATTLE>", *ptr); } else if (ptr->isUsingColor()) { show(*(ptr->getDefaultColor()), *ptr); } }//if }//if }// }//while if (!flag) { show("There is no one here to go berserk on!!\n", pc); return -1; }//if else { pc.MOV -= 35; }//else }//if else { show("You trip and nearly break a leg!!\n", pc); emote("gets all riled up nearly trips!!\n", pc, ROOM, TRUE); return -1; }//else return 0; }//do_berserk