roh/conf.old/area/
roh/config/code/python/
roh/config/game/area/
roh/config/game/signs/
roh/help/dmhelp/
roh/help/help/
roh/log/
roh/log/staff/
roh/monsters/ocean/
roh/objects/misc/
roh/objects/ocean/
roh/player/
roh/rooms/area/1/
roh/rooms/misc/
roh/rooms/ocean/
roh/src-2.47e/
/*
 * objectAttr.cpp
 *   Object attribute functions
 *   ____            _
 *  |  _ \ ___  __ _| |_ __ ___  ___
 *  | |_) / _ \/ _` | | '_ ` _ \/ __|
 *  |  _ <  __/ (_| | | | | | | \__ \
 *  |_| \_\___|\__,_|_|_| |_| |_|___/
 *
 * 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-2012 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 "effects.h"


//*********************************************************************
//						track
//*********************************************************************

void Object::track(Player* player) { lastMod = player->getName(); }

//*********************************************************************
//						setDelay
//*********************************************************************

void Object::setDelay(int newDelay) { delay = newDelay; }

//*********************************************************************
//						setExtra
//*********************************************************************

void Object::setExtra(int x) { extra = x; }

//*********************************************************************
//						setWeight
//*********************************************************************

void Object::setWeight(short w) { weight = w; }

//*********************************************************************
//						setBulk
//*********************************************************************

void Object::setBulk(short b) { bulk = MAX(0, b); }

//*********************************************************************
//						setMaxbulk
//*********************************************************************

void Object::setMaxbulk(short b) { maxbulk = b; }

//*********************************************************************
//						setSize
//*********************************************************************

void Object::setSize(Size s) { size = s; }

//*********************************************************************
//						setType
//*********************************************************************

void Object::setType(short t) { type = t; }

//*********************************************************************
//						setWearflag
//*********************************************************************

void Object::setWearflag(short w) { wearflag = w; }

//*********************************************************************
//						setArmor
//*********************************************************************

void Object::setArmor(short a) { armor = MAX(0, MIN(a, 1000)); }

//*********************************************************************
//						setQuality
//*********************************************************************

void Object::setQuality(short q) { quality = q; }

//*********************************************************************
//						setAdjustment
//*********************************************************************

void Object::setAdjustment(short a) {
	removeFromSet();
	adjustment = MAX(-127, MIN(a, 127));
	addToSet();
}

//*********************************************************************
//						setNumAttacks
//*********************************************************************

void Object::setNumAttacks(short n) { numAttacks = n; }

//*********************************************************************
//						setShotsmax
//*********************************************************************

void Object::setShotsMax(short s) { shotsMax = s; }

//*********************************************************************
//						setShotscur
//*********************************************************************

void Object::setShotsCur(short s) { shotsCur = s; }

//*********************************************************************
//						decShotscur
//*********************************************************************

void Object::decShotsCur(short s) { shotsCur -= s; }

//*********************************************************************
//						incShotscur
//*********************************************************************

void Object::incShotsCur(short s) { shotsCur += s; }

//*********************************************************************
//                      setChargesMax
//*********************************************************************

void Object::setChargesMax(short s) { chargesMax = s; }

//*********************************************************************
//                      setChargesCur
//*********************************************************************

void Object::setChargesCur(short s) { chargesCur = s; }

//*********************************************************************
//                      decChargesCur
//*********************************************************************

void Object::decChargesCur(short s) { chargesCur -= s; }

//*********************************************************************
//                      incChargesCur
//*********************************************************************

void Object::incChargesCur(short s) { chargesCur += s; }


//*********************************************************************
//						setMagicpower
//*********************************************************************

void Object::setMagicpower(short m) { magicpower = m; }

//*********************************************************************
//						setLevel
//*********************************************************************

void Object::setLevel(short l) { level = l; }

//*********************************************************************
//						setRequiredSkill
//*********************************************************************

void Object::setRequiredSkill(int s) { requiredSkill = s; }

//*********************************************************************
//						setMinStrength
//*********************************************************************

void Object::setMinStrength(short s) { minStrength = s; }

//*********************************************************************
//						setClan
//*********************************************************************

void Object::setClan(short c) { clan = c; }

//*********************************************************************
//						setSpecial
//*********************************************************************

void Object::setSpecial(short s) { special = s; }

//*********************************************************************
//						setQuestnum
//*********************************************************************

void Object::setQuestnum(short q) { questnum = q; }

//*********************************************************************
//						setEffect
//*********************************************************************

void Object::setEffect(bstring e) { effect = e; }

//*********************************************************************
//						setEffectDuration
//*********************************************************************

void Object::setEffectDuration(long d) { effectDuration = MAX(-1, MIN(d, EFFECT_MAX_DURATION)); }

//*********************************************************************
//						setEffectStrength
//*********************************************************************

void Object::setEffectStrength(short s) { effectStrength = MAX(0, MIN(s, EFFECT_MAX_STRENGTH)); }

//*********************************************************************
//						setCoinCost
//*********************************************************************

void Object::setCoinCost(unsigned long c) { coinCost = c; }

//*********************************************************************
//						setShopValue
//*********************************************************************

void Object::setShopValue(unsigned long v) {
	removeFromSet();
	shopValue = MIN(200000000, v);
	addToSet();
}

//*********************************************************************
//						setLotteryCycle
//*********************************************************************

void Object::setLotteryCycle(int c) { lotteryCycle = c; }

//*********************************************************************
//						setLotteryNumbers
//*********************************************************************

void Object::setLotteryNumbers(short i, short n) { lotteryNumbers[i] = n; }

//*********************************************************************
//						setRecipe
//*********************************************************************

void Object::setRecipe(int r) { recipe = r; }

//*********************************************************************
//						setMaterial
//*********************************************************************

void Object::setMaterial(Material m) { material = m; }

//*********************************************************************
//						setQuestOwner
//*********************************************************************

void Object::setQuestOwner(const Player* player) { questOwner = player->getName(); }

//*********************************************************************
//						clearEffect
//*********************************************************************

void Object::clearEffect() {
	setEffect("");
	setEffectDuration(0);
	setEffectStrength(0);
}

//*********************************************************************
//						flagIsSet
//*********************************************************************

bool Object::flagIsSet(int flag) const {
	return(flags[flag/8] & 1<<(flag%8));
}

//*********************************************************************
//						setFlag
//*********************************************************************

void Object::setFlag(int flag) {
	flags[flag/8] |= 1<<(flag%8);
}

//*********************************************************************
//						clearFlag
//*********************************************************************

void Object::clearFlag(int flag) {
	flags[flag/8] &= ~(1<<(flag%8));
}

//*********************************************************************
//						toggleFlag
//*********************************************************************

bool Object::toggleFlag(int flag) {
	if(flagIsSet(flag))
		clearFlag(flag);
	else
		setFlag(flag);
	return(flagIsSet(flag));
}

//*********************************************************************
//						getVersion
//*********************************************************************

bstring Object::getVersion() const {
	return(version);
}

//*********************************************************************
//						setMade
//*********************************************************************

void Object::setMade() {
	made = time(0);
}

//*********************************************************************
//						isHeavyArmor
//*********************************************************************

bool Object::isHeavyArmor() const {
//	return(type == ARMOR && (subType == "chain" || subType == "plate"));
	return(type == ARMOR && subType == "plate");
}

//*********************************************************************
//						isMediumArmor
//*********************************************************************

bool Object::isMediumArmor() const {
	return(type == ARMOR && subType == "chain");
}

//*********************************************************************
//						isLightArmor
//*********************************************************************

bool Object::isLightArmor() const {
	return(type == ARMOR && (subType == "cloth" || subType == "leather"));
}

//*********************************************************************
//						isBroken
//*********************************************************************

bool Object::isBroken() const {
	return(shotsCur == 0 && shotsMax >= 0 && (type == ARMOR || type == KEY || type == WEAPON));
}