/
rogue24b3/
rogue24b3/data/
#include "merc.h"

SInt32 start_rooms[MAX_PC_RACE] = {
        0,              // Null Race
	3054,           // Humans
	3054,           // Elves
	3054,           // Dwarves
	3054            // Giants
};

SInt32 newbie_start_rooms[MAX_PC_RACE] = {
        0,              // NULL Race
        3700,           // Humans
        3700,           // Elves
        3700,           // Dwarves
        3700            // Giants
};


ROOM_INDEX_DATA *StartRoom( CHAR_DATA *ch ) {
	ROOM_INDEX_DATA *load_room = NULL;

	if (MOB_FLAGGED(ch, ACT_PET) && ch->master)
		load_room = StartRoom(ch->master);

	if ((load_room == NULL && PLR_FLAGGED(ch, PLR_NEWBIE)) || !ch->level)
		load_room = get_room_index(newbie_start_rooms[GET_RACE(ch)]);

	if ((load_room == NULL) && PLR_FLAGGED(ch, PLR_LOADROOM))
		load_room = get_room_index(GET_LOADROOM(ch));

	if ((load_room == NULL) && GET_CLAN(ch))
		load_room = get_room_index(CLAN_RECALL(ch));

	if ((load_room == NULL) && IS_STAFF(ch))
		load_room = get_room_index(ROOM_VNUM_STAFF);

	if (load_room == NULL)
		load_room = get_room_index(start_rooms[GET_RACE(ch)]);

	if (load_room == NULL)
		load_room = get_room_index(ROOM_VNUM_TEMPLE);

	if (!IS_NPC(ch) && !PLR_FLAGGED(ch, PLR_LOADROOM))
		GET_LOADROOM(ch) = 0;

	if (PLR_FLAGGED(ch, PLR_FREEZE))
		load_room = get_room_index(ROOM_VNUM_FROZEN);

	return load_room;
}


Relation CHAR_DATA::GetRelation(CHAR_DATA *target) {
    int chClan, tarClan;

    if (NO_STAFF_HASSLE(this) || NO_STAFF_HASSLE(target))
	return RELATION_FRIEND;

    if (IS_TRAITOR(this) ^ IS_TRAITOR(target))
	return RELATION_ENEMY;

    chClan  = this->clan ? this->clan : -1;
    tarClan = target->clan ? target->clan : -1;

    if (GET_RACE(this) != GET_RACE(target)) {
	if ((chClan != -1) && (chClan == tarClan))
		return RELATION_FRIEND;
	return RELATION_ENEMY;
    }

    if ((chClan != -1) && (tarClan != -1) && (chClan != tarClan))
	return RELATION_NEUTRAL;

    return RELATION_FRIEND;
}

bool CHAR_DATA::CanUse(OBJ_DATA *obj) {
    if (NO_STAFF_HASSLE(this))
	return TRUE;

    if (this->level < obj->level) {
	this->Send("You must be level %d to use this object.\n\r", obj->level);
	return FALSE;
    }

// This might be better if done by classes... not enough extra_bits though
    return !((OBJ_FLAGGED(obj, ITEM_ANTI_HUMAN)	&& IS_HUMAN(this))	||
	(OBJ_FLAGGED(obj, ITEM_ANTI_ELF)	&& IS_ELF(this))	||
	(OBJ_FLAGGED(obj, ITEM_ANTI_DWARF)	&& IS_DWARF(this))	||
	(OBJ_FLAGGED(obj, ITEM_ANTI_GIANT)	&& IS_GIANT(this)));
}

const char *EXIT_DATA::GetDesc(const char *def = NULL) const {
	return (*this->description ? this->description : def);
}