#include "merc.h" #include "clans.h" #include "interp.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) && !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) && GET_CLAN_RANK(ch) > CLAN_APPLY) load_room = get_room_index(CLAN_RECALL(GET_CLAN(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; } int find_align(CHAR_DATA *ch) { if (IS_GOOD(ch)) return 3; if (IS_EVIL(ch)) return 2; if (IS_NEUTRAL(ch)) return 1; return 0; } Relation CHAR_DATA::GetRelation(CHAR_DATA *target) { int chClan, tarClan; int chalign, taralign; if (NO_STAFF_HASSLE(this) || NO_STAFF_HASSLE(target)) return RELATION_FRIEND; if (IS_TRAITOR(this) ^ IS_TRAITOR(target)) return RELATION_ENEMY; chClan = ((GET_CLAN_RANK(this) > CLAN_APPLY) || IS_NPC(this)) ? real_clan(GET_CLAN(this)) : -1; tarClan = ((GET_CLAN_RANK(target) > CLAN_APPLY) || IS_NPC(target)) ? real_clan(GET_CLAN(target)) : -1; chalign = find_align(this); taralign = find_align(target); if ((chClan != -1) && (chClan == tarClan)) return RELATION_FRIEND; if (!IS_NEUTRAL(this) ? (chalign != taralign) : !IS_NEUTRAL(target)) { if ((chClan != -1) && (chClan == tarClan)) return RELATION_FRIEND; if (IS_NEUTRAL(this) || IS_NEUTRAL(target)) return RELATION_NEUTRAL; return RELATION_ENEMY; } if ((chClan != -1) && (tarClan != -1) && (chClan != tarClan)) return RELATION_NEUTRAL; return RELATION_FRIEND; } #define OBJ_ANTI_FLAGS(obj, flags) (IS_SET((obj)->extra_flags, (flags))) 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; } return !( (OBJ_ANTI_FLAGS(obj, ITEM_ANTI_BARBARIAN) && IS_BARBARIAN(this)) || (OBJ_ANTI_FLAGS(obj, ITEM_ANTI_CLERIC) && IS_CLERIC(this)) || (OBJ_ANTI_FLAGS(obj, ITEM_ANTI_DRUID) && IS_DRUID(this)) || (OBJ_ANTI_FLAGS(obj, ITEM_ANTI_FIGHTER) && IS_FIGHTER(this)) || (OBJ_ANTI_FLAGS(obj, ITEM_ANTI_PALADIN) && IS_PALADIN(this)) || (OBJ_ANTI_FLAGS(obj, ITEM_ANTI_RANGER) && IS_RANGER(this)) || (OBJ_ANTI_FLAGS(obj, ITEM_ANTI_ROGUE) && IS_ROGUE(this)) || (OBJ_ANTI_FLAGS(obj, ITEM_ANTI_WIZARD) && IS_WIZARD(this))); } // const char *EXIT_DATA::GetDesc(const char *def = NULL) const { // return (*this->description ? this->description : def); // } void roll_temp_abils(CHAR_DATA *ch) { int roll = 0; for (roll = 0; roll < MAX_STATS; roll++) ch->temp_stat[roll] = dice(3, 6); ch->roll_stat[0] = ch->temp_stat[0]; ch->roll_stat[1] = ch->temp_stat[1]; ch->roll_stat[2] = ch->temp_stat[2]; ch->roll_stat[3] = ch->temp_stat[3]; ch->roll_stat[4] = ch->temp_stat[4]; ch->roll_stat[5] = ch->temp_stat[5]; return; }