// $Id: cr_skll.cc,v 1.4.2.2 2000/03/18 21:23:33 justin Exp $ // $Revision: 1.4.2.2 $ $Author: justin $ $Date: 2000/03/18 21:23:33 $ // //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 // //*********************** cr_skll.cc ********************// #include "misc.h" #include "misc2.h" #include "classes.h" #include "spells.h" #include "battle.h" #include "skills.h" #include "commands.h" #include "batl_prc.h" #include "cr_skll.h" #include <PtrArray.h> #include "load_wld.h" int skin(int i_th, const String* vict, critter& pc) { int skill_num = SKIN_SKILL_NUM; object* obj; if (!ok_to_do_action(NULL, "mBSPFK", skill_num, pc)) { return -1; }//if int in_rm = FALSE; obj = have_obj_named(pc.inv, i_th, vict, pc.SEE_BIT, ROOM); if (!obj) { in_rm = TRUE; obj = ROOM.haveObjNamed(i_th, vict, pc.SEE_BIT); }//if if (!obj) { show("You don't see that here.\n", pc); return -1; }//if if (!obj->IN_LIST) { if (in_rm) obj = obj_to_sobj(*obj, ROOM.getInv(), TRUE, i_th, vict, pc.SEE_BIT, ROOM); else obj = obj_to_sobj(*obj, &(pc.inv), TRUE, i_th, vict, pc.SEE_BIT, ROOM); }//if return do_skin(*obj, pc); }//skin int do_skin(object& obj, critter& pc) { String buf(100); if ((obj.obj_proc && obj.obj_proc->skin_ptr && obj.obj_proc->skin_ptr->OBJ_NUM == config.pcSkinObject) || skill_did_hit(pc, SKIN_SKILL_NUM, pc)) { if (!obj.obj_proc || !obj.obj_proc->obj_spec_data_flags.get(2) || !obj.obj_proc->skin_ptr || !obj.obj_proc->skin_ptr->OBJ_FLAGS.get(10)) { //not in use? show("This thing doesn't have a skin!.\n", pc); return -1; }//if pc.gainInv(obj.obj_proc->skin_ptr); obj.obj_proc->obj_spec_data_flags.turn_off(2); obj.obj_proc->skin_ptr = NULL; Sprintf(buf, "skins %S.", long_name_of_obj(obj, ~0)); emote(buf, pc, ROOM, TRUE); Sprintf(buf, "You skin %S.\n", long_name_of_obj(obj, ~0)); show(buf, pc); }//if else { if (!obj.obj_proc || !obj.obj_proc->obj_spec_data_flags.get(2)) { show("It doesn't have a skin.\n", pc); return -1; }//if obj.obj_proc->obj_spec_data_flags.turn_off(2); obj.obj_proc->skin_ptr->decrementCurInGame(); if (obj.obj_proc->skin_ptr->IN_LIST) { delete obj.obj_proc->skin_ptr; }//if obj.obj_proc->skin_ptr = NULL; Sprintf(buf, "tries to skin %S but only makes a bloody mess!", long_name_of_obj(obj, ~0)); emote(buf, pc, ROOM, TRUE); Sprintf(buf, "You try to skin %S but only make a bloody mess!\n", long_name_of_obj(obj, ~0)); show(buf, pc); }//else return 0; }//do_skin int butcher(int i_th, const String* vict, critter& pc) { int skill_num = BUTCHER_SKILL_NUM; object* obj; if (!ok_to_do_action(NULL, "mBSPF", skill_num, pc)) { return -1; }//if int in_rm = FALSE; obj = have_obj_named(pc.inv, i_th, vict, pc.SEE_BIT, ROOM); if (!obj) { in_rm = TRUE; obj = ROOM.haveObjNamed(i_th, vict, pc.SEE_BIT); }//if if (!obj) { show("You don't see that here.\n", pc); return -1; }//if if (!obj->OBJ_FLAGS.get(75)) { show("This doesn't look the least bit edible!!\n", pc); return -1; }//if if (!obj->IN_LIST) { if (in_rm) obj = obj_to_sobj(*obj, ROOM.getInv(), TRUE, i_th, vict, pc.SEE_BIT, ROOM); else obj = obj_to_sobj(*obj, &(pc.inv), TRUE, i_th, vict, pc.SEE_BIT, ROOM); }//if return do_butcher(*obj, pc); }//butcher int do_butcher(object& obj, critter& pc) { String buf(100); if (!obj.OBJ_FLAGS.get(75)) { show("This doesn't look the least bit edible!!\n", pc); return -1; }//if if (skill_did_hit(pc, BUTCHER_SKILL_NUM, pc)) { if (obj_list[config.meatObject].OBJ_FLAGS.get(10)) { pc.gainInv(&(obj_list[config.meatObject])); obj.OBJ_FLAGS.turn_off(75); //no longer butcherable recursive_init_loads(obj_list[config.meatObject], 0); Sprintf(buf, "butchers %S.", long_name_of_obj(obj, ~0)); emote(buf, pc, ROOM, TRUE); Sprintf(buf, "You butcher %S.\n", long_name_of_obj(obj, ~0)); show(buf, pc); return 0; }//if else { show("BUG, my gawd, you've found a BUG!!\n", pc); return -1; }//if }//if skill worked else { Sprintf(buf, "You try to butcher %S, but ruin it all!!\n", long_name_of_obj(obj, pc.SEE_BIT)); show(buf, pc); Sprintf(buf, "tries to butcher %S, but ruins it all!!", long_name_of_obj(obj, pc.SEE_BIT)); emote(buf, pc, ROOM, TRUE); obj.OBJ_FLAGS.turn_off(75); return -1; }//else }//do_skin