/* SillyMUD Distribution V1.1b (c) 1993 SillyMUD Developement See license.doc for distribution terms. SillyMUD is based on DIKUMUD */ /* ** 0 = Mage, 1 = cleric, 3 = thief, 2 = fighter */ /* ** */ #include <stdio.h> #include <string.h> #include "protos.h" /* extern variables */ extern struct room_data *world; extern struct descriptor_data *descriptor_list; extern struct room_data *world; extern struct dex_app_type dex_app[]; int GetClassLevel(struct char_data *ch, int class) { if (IS_SET(ch->player.class, class)) { return(GET_LEVEL(ch, CountBits(class)-1)); } return(0); } int CountBits(int class) { if (class == 1) return(1); if (class == 2) return(2); if (class == 4) return(3); if (class == 8) return(4); if (class == 16) return(5); if (class == 32) return(6); } int OnlyClass( struct char_data *ch, int class) { int i; for (i=1;i<=32; i*=2) { if (GetClassLevel(ch, i) != 0) if (i != class) return(FALSE); } return(TRUE); } int HasClass(struct char_data *ch, int class) { if (!IS_PC(ch)) { if (!IS_SET(class, CLASS_MONK)) { return(TRUE); } } if (IS_SET(ch->player.class, class)) return(TRUE); return FALSE; } int HowManyClasses(struct char_data *ch) { short i, tot=0; for (i=0;i<MAX_CLASS;i++) { if (GET_LEVEL(ch, i)) { tot++; } } if (tot) return(tot); else { if (IS_SET(ch->player.class, CLASS_MAGIC_USER)) tot++; if (IS_SET(ch->player.class, CLASS_WARRIOR)) tot++; if (IS_SET(ch->player.class, CLASS_THIEF)) tot++; if (IS_SET(ch->player.class, CLASS_CLERIC)) tot++; if (IS_SET(ch->player.class, CLASS_DRUID)) tot++; if (IS_SET(ch->player.class, CLASS_MONK)) tot++; } return(tot); } int BestFightingClass(struct char_data *ch) { if (GET_LEVEL(ch, WARRIOR_LEVEL_IND)) return(WARRIOR_LEVEL_IND); if (GET_LEVEL(ch, CLERIC_LEVEL_IND)) return(CLERIC_LEVEL_IND); if (GET_LEVEL(ch, DRUID_LEVEL_IND)) return(DRUID_LEVEL_IND); if (GET_LEVEL(ch, MONK_LEVEL_IND)) return(MONK_LEVEL_IND); if (GET_LEVEL(ch, THIEF_LEVEL_IND)) return(THIEF_LEVEL_IND); if (GET_LEVEL(ch, MAGE_LEVEL_IND)) return(MAGE_LEVEL_IND); log("Massive error.. character has no recognized class."); log(GET_NAME(ch)); assert(0); return(1); } int BestThiefClass(struct char_data *ch) { if (GET_LEVEL(ch, THIEF_LEVEL_IND)) return(THIEF_LEVEL_IND); if (GET_LEVEL(ch, MONK_LEVEL_IND)) return(MONK_LEVEL_IND); if (GET_LEVEL(ch, MAGE_LEVEL_IND)) return(MAGE_LEVEL_IND); if (GET_LEVEL(ch, WARRIOR_LEVEL_IND)) return(WARRIOR_LEVEL_IND); if (GET_LEVEL(ch, DRUID_LEVEL_IND)) return(DRUID_LEVEL_IND); if (GET_LEVEL(ch, CLERIC_LEVEL_IND)) return(CLERIC_LEVEL_IND); log("Massive error.. character has no recognized class."); log(GET_NAME(ch)); assert(0); return(1); } int BestMagicClass(struct char_data *ch) { if (GET_LEVEL(ch, MAGE_LEVEL_IND)) return(MAGE_LEVEL_IND); if (GET_LEVEL(ch, DRUID_LEVEL_IND)) return(DRUID_LEVEL_IND); if (GET_LEVEL(ch, CLERIC_LEVEL_IND)) return(CLERIC_LEVEL_IND); if (GET_LEVEL(ch, THIEF_LEVEL_IND)) return(THIEF_LEVEL_IND); if (GET_LEVEL(ch, WARRIOR_LEVEL_IND)) return(WARRIOR_LEVEL_IND); if (GET_LEVEL(ch, MONK_LEVEL_IND)) return(MONK_LEVEL_IND); log("Massive error.. character has no recognized class."); log(GET_NAME(ch)); ch->player.class = 4; return(1); } int GetSecMaxLev(struct char_data *ch) { return(GetALevel(ch, 2)); } int GetALevel(struct char_data *ch, int which) { byte ind[MAX_CLASS],j,k,i; for (i=0; i< MAX_CLASS; i++) { ind[i] = GET_LEVEL(ch,i); } /* * chintzy sort. (just to prove that I did learn something in college) */ for (i = 0; i< MAX_CLASS-1; i++) { for (j=i+1;j< MAX_CLASS;j++) { if (ind[j] > ind[i]) { k = ind[i]; ind[i] = ind[j]; ind[j] = k; } } } if (which > -1 && which < 4) { return(ind[which]); } } int GetThirdMaxLev(struct char_data *ch) { return(GetALevel(ch, 3)); } int GetMaxLevel(struct char_data *ch) { register int max=0, i; for (i=0; i<= MAX_CLASS; i++) { if (GET_LEVEL(ch, i) > max) max = GET_LEVEL(ch,i); } return(max); } int GetTotLevel(struct char_data *ch) { int max=0, i; for (i=0; i< MAX_CLASS; i++) max += GET_LEVEL(ch,i); return(max); } void StartLevels(struct char_data *ch) { if (IS_SET(ch->player.class, CLASS_MAGIC_USER)) { advance_level(ch, MAGE_LEVEL_IND); } if (IS_SET(ch->player.class, CLASS_CLERIC)) { advance_level(ch, CLERIC_LEVEL_IND); } if (IS_SET(ch->player.class, CLASS_WARRIOR)) { advance_level(ch, WARRIOR_LEVEL_IND); } if (IS_SET(ch->player.class, CLASS_THIEF)) { advance_level(ch, THIEF_LEVEL_IND); } if (IS_SET(ch->player.class, CLASS_DRUID)) { advance_level(ch,DRUID_LEVEL_IND); } if (IS_SET(ch->player.class, CLASS_MONK)) { advance_level(ch, MONK_LEVEL_IND); } } int BestClass(struct char_data *ch) { int max=0, class=0, i; for (i=0; i< MAX_CLASS; i++) if (max < GET_LEVEL(ch,i)) { max = GET_LEVEL(ch, i); class = i; } assert(max > 0); return(class); }