/**************************************************************************** * [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame | \\._.// * * -----------------------------------------------------------| (0...0) * * SMAUG 1.4 (C) 1994, 1995, 1996, 1998 by Derek Snider | ).:.( * * -----------------------------------------------------------| {o o} * * SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus, | / ' ' \ * * Scryn, Rennard, Swordbearer, Gorog, Grishnakh, Nivek, |~'~.VxvxV.~'~* * Tricops and Fireblade | * * ------------------------------------------------------------------------ * * Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * ------------------------------------------------------------------------ * * Commands for personal player settings/statictics * ****************************************************************************/ #include <sys/types.h> #include <ctype.h> #include <stdio.h> #include <string.h> #include <time.h> #include "mud.h" /* * Locals */ char *tiny_affect_loc_name(int location); void do_gold(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; set_char_color(AT_GOLD, ch); ch_printf(ch, "You have %s gold\n\r", punct(ch->gold)); ch_printf(ch, "You have %s gold in the bank\n\r", punct(ch->pcdata->balance)); return; } void do_worth(CHAR_DATA * ch, char *argument) { char buf[MSL]; if (IS_NPC(ch)) return; set_pager_color(AT_SCORE, ch); pager_printf(ch, "\n\rWorth for %s%s.\n\r", ch->name, ch->pcdata->title); send_to_pager(" ----------------------------------------------------------------------------\n\r", ch); if (!ch->pcdata->deity) sprintf(buf, "N/A"); else if (ch->pcdata->favor > 2250) sprintf(buf, "loved"); else if (ch->pcdata->favor > 2000) sprintf(buf, "cherished"); else if (ch->pcdata->favor > 1750) sprintf(buf, "honored"); else if (ch->pcdata->favor > 1500) sprintf(buf, "praised"); else if (ch->pcdata->favor > 1250) sprintf(buf, "favored"); else if (ch->pcdata->favor > 1000) sprintf(buf, "respected"); else if (ch->pcdata->favor > 750) sprintf(buf, "liked"); else if (ch->pcdata->favor > 250) sprintf(buf, "tolerated"); else if (ch->pcdata->favor > -250) sprintf(buf, "ignored"); else if (ch->pcdata->favor > -750) sprintf(buf, "shunned"); else if (ch->pcdata->favor > -1000) sprintf(buf, "disliked"); else if (ch->pcdata->favor > -1250) sprintf(buf, "dishonored"); else if (ch->pcdata->favor > -1500) sprintf(buf, "disowned"); else if (ch->pcdata->favor > -1750) sprintf(buf, "abandoned"); else if (ch->pcdata->favor > -2000) sprintf(buf, "despised"); else if (ch->pcdata->favor > -2250) sprintf(buf, "hated"); else sprintf(buf, "damned"); pager_printf(ch, "|Favor: %-10s\n\r", buf); send_to_pager(" ----------------------------------------------------------------------------\n\r", ch); switch (ch->style) { case STYLE_EVASIVE: sprintf(buf, "evasive"); break; case STYLE_DIVINE: sprintf(buf, "divine"); break; case STYLE_WIZARDRY: sprintf(buf, "wizardry"); break; case STYLE_DEFENSIVE: sprintf(buf, "defensive"); break; case STYLE_AGGRESSIVE: sprintf(buf, "aggressive"); break; case STYLE_BERSERK: sprintf(buf, "berserk"); break; default: sprintf(buf, "standard"); break; } pager_printf(ch, "|Glory: %-4d |Weight: %-9.2f |Style: %-13s |Gold: %-14d |\n\r", ch->pcdata->quest_curr, get_ch_carry_weight(ch), buf, ch->gold); send_to_pager(" ----------------------------------------------------------------------------\n\r", ch); return; } void do_delet(CHAR_DATA * ch, char *argument) { send_to_char("If you want to DELETE, spell it out.\n\r", ch); return; } void do_delete(CHAR_DATA * ch, char *argument) { send_to_char("You delete players at the account menu now.\n\r", ch); return; } /* * New score command by Haus */ void do_newscore(CHAR_DATA * ch, char *argument) { char buf[MSL]; AFFECT_DATA *paf; int iLang; if (IS_NPC(ch)) { do_oldscore(ch, argument); return; } set_pager_color(AT_SCORE, ch); pager_printf(ch, "\n\rScore for %s%s.\n\r", ch->name, ch->pcdata->title); if (get_trust(ch) != ch->level) pager_printf(ch, "You are trusted at level %d.\n\r", get_trust(ch)); send_to_pager("----------------------------------------------------------------------------\n\r", ch); pager_printf(ch, "LEVEL: %-3d Race : %-10.10s Played: %d hours\n\r", ch->level, capitalize(get_race(ch)), (get_age(ch) - 17) * 20); pager_printf(ch, "YEARS: %-6d Log In: %s\r", get_age(ch), ctime(&(ch->pcdata->logon))); if (ch->level >= 7) { pager_printf(ch, "STR : %2.2d(%2.2d) HitRoll: %-4d Saved: %s\r", get_curr_str(ch), ch->perm_str, GET_HITROLL(ch), ch->pcdata->save_time ? ctime(&(ch->pcdata->save_time)) : "no save this session\n"); pager_printf(ch, "INT : %2.2d(%2.2d) DamRoll: %-4d Time: %s\r", get_curr_int(ch), ch->perm_int, GET_DAMROLL(ch), ctime(¤t_time)); } else { pager_printf(ch, "STR : %2.2d(%2.2d) Saved: %s\r", get_curr_str(ch), ch->perm_str, ch->pcdata->save_time ? ctime(&(ch->pcdata->save_time)) : "no\n"); pager_printf(ch, "INT : %2.2d(%2.2d) Time: %s\r", get_curr_int(ch), ch->perm_int, ctime(¤t_time)); } if (GET_AC(ch) >= 101) sprintf(buf, "the rags of a beggar"); else if (GET_AC(ch) >= 80) sprintf(buf, "improper for adventure"); else if (GET_AC(ch) >= 55) sprintf(buf, "shabby and threadbare"); else if (GET_AC(ch) >= 40) sprintf(buf, "of poor quality"); else if (GET_AC(ch) >= 20) sprintf(buf, "scant protection"); else if (GET_AC(ch) >= 10) sprintf(buf, "that of a knave"); else if (GET_AC(ch) >= 0) sprintf(buf, "moderately crafted"); else if (GET_AC(ch) >= -10) sprintf(buf, "well crafted"); else if (GET_AC(ch) >= -20) sprintf(buf, "the envy of squires"); else if (GET_AC(ch) >= -40) sprintf(buf, "excellently crafted"); else if (GET_AC(ch) >= -60) sprintf(buf, "the envy of knights"); else if (GET_AC(ch) >= -80) sprintf(buf, "the envy of barons"); else if (GET_AC(ch) >= -100) sprintf(buf, "the envy of dukes"); else if (GET_AC(ch) >= -200) sprintf(buf, "the envy of emperors"); else sprintf(buf, "that of an avatar"); if (ch->level > 8) pager_printf(ch, "WIS : %2.2d(%2.2d) Armor: %4.4d, %s\n\r", get_curr_wis(ch), ch->perm_wis, GET_AC(ch), buf); else pager_printf(ch, "WIS : %2.2d(%2.2d) Armor: %s \n\r", get_curr_wis(ch), ch->perm_wis, buf); if (ch->alignment > 900) sprintf(buf, "devout"); else if (ch->alignment > 700) sprintf(buf, "noble"); else if (ch->alignment > 350) sprintf(buf, "honorable"); else if (ch->alignment > 100) sprintf(buf, "worthy"); else if (ch->alignment > -100) sprintf(buf, "neutral"); else if (ch->alignment > -350) sprintf(buf, "base"); else if (ch->alignment > -700) sprintf(buf, "evil"); else if (ch->alignment > -900) sprintf(buf, "ignoble"); else sprintf(buf, "fiendish"); if (ch->level < 5) pager_printf(ch, "DEX : %2.2d(%2.2d) Align: %-20.20s Items: %5.5d (max %5.5d)\n\r", get_curr_dex(ch), ch->perm_dex, buf, get_ch_carry_number(ch), can_carry_n(ch)); else pager_printf(ch, "DEX : %2.2d(%2.2d) Align: %+4.4d, %-14.14s Items: %5.5d (max %5.5d)\n\r", get_curr_dex(ch), ch->perm_dex, ch->alignment, buf, get_ch_carry_number(ch), can_carry_n(ch)); switch (ch->position) { case POS_DEAD: sprintf(buf, "slowly decomposing"); break; case POS_MORTAL: sprintf(buf, "mortally wounded"); break; case POS_INCAP: sprintf(buf, "incapacitated"); break; case POS_STUNNED: sprintf(buf, "stunned"); break; case POS_SLEEPING: sprintf(buf, "sleeping"); break; case POS_RESTING: sprintf(buf, "resting"); break; case POS_STANDING: sprintf(buf, "standing"); break; case POS_FIGHTING: sprintf(buf, "fighting"); break; case POS_EVASIVE: sprintf(buf, "fighting (evasive)"); /* Fighting style support -haus */ break; case POS_DEFENSIVE: sprintf(buf, "fighting (defensive)"); break; case POS_AGGRESSIVE: sprintf(buf, "fighting (aggressive)"); break; case POS_BERSERK: sprintf(buf, "fighting (berserk)"); break; case POS_MOUNTED: sprintf(buf, "mounted"); break; case POS_RIDING: sprintf(buf, "riding"); break; case POS_SITTING: sprintf(buf, "sitting"); break; } pager_printf(ch, "CON : %2.2d(%2.2d) Pos'n: %-21.21s Weight: %5.5d (max %7.7d)\n\r", get_curr_con(ch), ch->perm_con, buf, get_ch_carry_weight(ch), can_carry_w(ch)); /* * Fighting style support -haus */ pager_printf(ch, "CHA : %2.2d(%2.2d) Wimpy: %-5d ", get_curr_cha(ch), ch->perm_cha, ch->wimpy); switch (ch->style) { case STYLE_EVASIVE: sprintf(buf, "evasive"); break; case STYLE_DIVINE: sprintf(buf, "divine"); break; case STYLE_WIZARDRY: sprintf(buf, "wizardry"); break; case STYLE_DEFENSIVE: sprintf(buf, "defensive"); break; case STYLE_AGGRESSIVE: sprintf(buf, "aggressive"); break; case STYLE_BERSERK: sprintf(buf, "berserk"); break; default: sprintf(buf, "standard"); break; } pager_printf(ch, "Style: %-10.10s\n\r", buf); pager_printf(ch, "LCK : %2.2d(%2.2d) \n\r", get_curr_lck(ch), ch->perm_lck); pager_printf(ch, "Glory: %4.4d(%4.4d) Balance: %-10d\n\r", ch->pcdata->quest_curr, ch->pcdata->quest_accum, ch->pcdata->balance); pager_printf(ch, "PRACT: %3.3d Hitpoints: %-5d of %5d Pager: (%c) %3d AutoExit(%c)\n\r", ch->practice, ch->hit, ch->max_hit, IS_SET(ch->pcdata->flags, PCFLAG_PAGERON) ? 'X' : ' ', ch->pcdata->pagerlen, xIS_SET(ch->act, PLR_AUTOEXIT) ? 'X' : ' '); pager_printf(ch, "Mana: %-5d of %5d MKills: %-5.5d AutoLoot(%c)\n\r", ch->mana, ch->max_mana, ch->pcdata->mkills, xIS_SET(ch->act, PLR_AUTOLOOT) ? 'X' : ' '); pager_printf(ch, "GOLD : %-10d Move: %-5d of %5d Mdeaths: %-5.5d AutoSac (%c)\n\r", ch->gold, ch->move, ch->max_move, ch->pcdata->mdeaths, xIS_SET(ch->act, PLR_AUTOSAC) ? 'X' : ' '); if (!IS_NPC(ch) && ch->pcdata->condition[COND_DRUNK] > 10) send_to_pager("You are drunk.\n\r", ch); if (!IS_NPC(ch) && ch->pcdata->condition[COND_THIRST] == 0) send_to_pager("You are in danger of dehydrating.\n\r", ch); if (!IS_NPC(ch) && ch->pcdata->condition[COND_FULL] == 0) send_to_pager("You are starving to death.\n\r", ch); if (ch->position != POS_SLEEPING) switch (ch->mental_state / 10) { default: send_to_pager("You're completely messed up!\n\r", ch); break; case -10: send_to_pager("You're barely conscious.\n\r", ch); break; case -9: send_to_pager("You can barely keep your eyes open.\n\r", ch); break; case -8: send_to_pager("You're extremely drowsy.\n\r", ch); break; case -7: send_to_pager("You feel very unmotivated.\n\r", ch); break; case -6: send_to_pager("You feel sedated.\n\r", ch); break; case -5: send_to_pager("You feel sleepy.\n\r", ch); break; case -4: send_to_pager("You feel tired.\n\r", ch); break; case -3: send_to_pager("You could use a rest.\n\r", ch); break; case -2: send_to_pager("You feel a little under the weather.\n\r", ch); break; case -1: send_to_pager("You feel fine.\n\r", ch); break; case 0: send_to_pager("You feel great.\n\r", ch); break; case 1: send_to_pager("You feel energetic.\n\r", ch); break; case 2: send_to_pager("Your mind is racing.\n\r", ch); break; case 3: send_to_pager("You can't think straight.\n\r", ch); break; case 4: send_to_pager("Your mind is going 100 miles an hour.\n\r", ch); break; case 5: send_to_pager("You're high as a kite.\n\r", ch); break; case 6: send_to_pager("Your mind and body are slipping apart.\n\r", ch); break; case 7: send_to_pager("Reality is slipping away.\n\r", ch); break; case 8: send_to_pager("You have no idea what is real, and what is not.\n\r", ch); break; case 9: send_to_pager("You feel immortal.\n\r", ch); break; case 10: send_to_pager("You are a Supreme Entity.\n\r", ch); break; } else if (ch->mental_state > 45) send_to_pager("Your sleep is filled with strange and vivid dreams.\n\r", ch); else if (ch->mental_state > 25) send_to_pager("Your sleep is uneasy.\n\r", ch); else if (ch->mental_state < -35) send_to_pager("You are deep in a much needed sleep.\n\r", ch); else if (ch->mental_state < -25) send_to_pager("You are in deep slumber.\n\r", ch); send_to_pager("Languages: ", ch); for (iLang = 0; lang_array[iLang] != LANG_UNKNOWN; iLang++) if (knows_language(ch, lang_array[iLang], ch) || (IS_NPC(ch) && ch->speaks == 0)) { if (lang_array[iLang] & ch->speaking || (IS_NPC(ch) && !ch->speaking)) set_pager_color(AT_RED, ch); send_to_pager(lang_names[iLang], ch); send_to_pager(" ", ch); set_pager_color(AT_SCORE, ch); } send_to_pager("\n\r", ch); if (ch->pcdata->bestowments && ch->pcdata->bestowments[0] != '\0') pager_printf(ch, "You are bestowed with the command(s): %s.\n\r", ch->pcdata->bestowments); if (ch->morph && ch->morph->morph) { send_to_pager("----------------------------------------------------------------------------\n\r", ch); if (IS_IMMORTAL(ch)) pager_printf(ch, "Morphed as (%d) %s with a timer of %d.\n\r", ch->morph->morph->vnum, ch->morph->morph->short_desc, ch->morph->timer); else pager_printf(ch, "You are morphed into a %s.\n\r", ch->morph->morph->short_desc); send_to_pager("----------------------------------------------------------------------------\n\r", ch); } send_to_pager("----------------------------------------------------------------------------\n\r", ch); pager_printf(ch, "PKILL DATA: Pkills (%3.3d) Illegal Pkills (%3.3d) Pdeaths (%3.3d)\n\r", ch->pcdata->pkills, ch->pcdata->illegal_pk, ch->pcdata->pdeaths); if (ch->pcdata->clan && ch->pcdata->clan->clan_type != CLAN_ORDER && ch->pcdata->clan->clan_type != CLAN_GUILD) { send_to_pager("----------------------------------------------------------------------------\n\r", ch); pager_printf(ch, "CLAN STATS: %-14.14s Clan AvPkills : %-5d Clan NonAvpkills : %-5d\n\r", ch->pcdata->clan->name, ch->pcdata->clan->pkills[6], (ch->pcdata->clan->pkills[1] + ch->pcdata->clan->pkills[2] + ch->pcdata->clan->pkills[3] + ch->pcdata->clan->pkills[4] + ch->pcdata->clan->pkills[5])); pager_printf(ch, " Clan AvPdeaths: %-5d Clan NonAvpdeaths: %-5d\n\r", ch->pcdata->clan->pdeaths[6], (ch->pcdata->clan->pdeaths[1] + ch->pcdata->clan->pdeaths[2] + ch->pcdata->clan->pdeaths[3] + ch->pcdata->clan->pdeaths[4] + ch->pcdata->clan->pdeaths[5])); } if (ch->pcdata->deity) { send_to_pager("----------------------------------------------------------------------------\n\r", ch); if (ch->pcdata->favor > 2250) sprintf(buf, "loved"); else if (ch->pcdata->favor > 2000) sprintf(buf, "cherished"); else if (ch->pcdata->favor > 1750) sprintf(buf, "honored"); else if (ch->pcdata->favor > 1500) sprintf(buf, "praised"); else if (ch->pcdata->favor > 1250) sprintf(buf, "favored"); else if (ch->pcdata->favor > 1000) sprintf(buf, "respected"); else if (ch->pcdata->favor > 750) sprintf(buf, "liked"); else if (ch->pcdata->favor > 250) sprintf(buf, "tolerated"); else if (ch->pcdata->favor > -250) sprintf(buf, "ignored"); else if (ch->pcdata->favor > -750) sprintf(buf, "shunned"); else if (ch->pcdata->favor > -1000) sprintf(buf, "disliked"); else if (ch->pcdata->favor > -1250) sprintf(buf, "dishonored"); else if (ch->pcdata->favor > -1500) sprintf(buf, "disowned"); else if (ch->pcdata->favor > -1750) sprintf(buf, "abandoned"); else if (ch->pcdata->favor > -2000) sprintf(buf, "despised"); else if (ch->pcdata->favor > -2250) sprintf(buf, "hated"); else sprintf(buf, "damned"); pager_printf(ch, "Deity: %-20s Favor: %s\n\r", ch->pcdata->deity->name, buf); } if (ch->pcdata->clan && ch->pcdata->clan->clan_type == CLAN_ORDER) { send_to_pager("----------------------------------------------------------------------------\n\r", ch); pager_printf(ch, "Order: %-20s Order Mkills: %-6d Order MDeaths: %-6d\n\r", ch->pcdata->clan->name, ch->pcdata->clan->mkills, ch->pcdata->clan->mdeaths); } if (ch->pcdata->clan && ch->pcdata->clan->clan_type == CLAN_GUILD) { send_to_pager("----------------------------------------------------------------------------\n\r", ch); pager_printf(ch, "Guild: %-20s Guild Mkills: %-6d Guild MDeaths: %-6d\n\r", ch->pcdata->clan->name, ch->pcdata->clan->mkills, ch->pcdata->clan->mdeaths); } if (IS_IMMORTAL(ch)) { send_to_pager("----------------------------------------------------------------------------\n\r", ch); pager_printf(ch, "IMMORTAL DATA: Wizinvis [%s] Wizlevel (%d)\n\r", xIS_SET(ch->act, PLR_WIZINVIS) ? "X" : " ", ch->pcdata->wizinvis); pager_printf(ch, "Bamfin: %s %s\n\r", ch->name, (ch->pcdata->bamfin[0] != '\0') ? ch->pcdata->bamfin : "appears in a swirling mist."); pager_printf(ch, "Bamfout: %s %s\n\r", ch->name, (ch->pcdata->bamfout[0] != '\0') ? ch->pcdata->bamfout : "leaves in a swirling mist."); /* Area Loaded info - Scryn 8/11 */ if (ch->pcdata->area) { pager_printf(ch, "Vnums: Room (%-5.5d - %-5.5d) Object (%-5.5d - %-5.5d) Mob (%-5.5d - %-5.5d)\n\r", ch->pcdata->area->low_r_vnum, ch->pcdata->area->hi_r_vnum, ch->pcdata->area->low_o_vnum, ch->pcdata->area->hi_o_vnum, ch->pcdata->area->low_m_vnum, ch->pcdata->area->hi_m_vnum); pager_printf(ch, "Area Loaded [%s]\n\r", (IS_SET(ch->pcdata->area->status, AREA_LOADED)) ? "yes" : "no"); } } if (ch->first_affect) { int i; SKILLTYPE *sktmp; i = 0; send_to_pager("----------------------------------------------------------------------------\n\r", ch); send_to_pager("AFFECT DATA: ", ch); for (paf = ch->first_affect; paf; paf = paf->next) { if ((sktmp = get_skilltype(paf->type)) == NULL) continue; if (ch->level < 10) { pager_printf(ch, "[%-34.34s] ", sktmp->name); if (i == 0) i = 2; if ((++i % 3) == 0) send_to_pager("\n\r", ch); } if (ch->level >= 10) { if (paf->modifier == 0) pager_printf(ch, "[%-24.24s;%5d rds] ", sktmp->name, paf->duration); else if (paf->modifier > 999) pager_printf(ch, "[%-15.15s; %7.7s;%5d rds] ", sktmp->name, tiny_affect_loc_name(paf->location), paf->duration); else pager_printf(ch, "[%-11.11s;%+-3.3d %7.7s;%5d rds] ", sktmp->name, paf->modifier, tiny_affect_loc_name(paf->location), paf->duration); if (i == 0) i = 1; if ((++i % 2) == 0) send_to_pager("\n\r", ch); } } } send_to_pager("\n\r", ch); return; } char *get_rating(int stat, int base) { if (base == 1000) stat *= 10; if (stat <= 1000) return "&G&W&R**********"; else if (stat <= 2000) return "&G&W*&R*********"; else if (stat <= 3000) return "&G&W**&R********"; else if (stat <= 4000) return "&G&W***&R*******"; else if (stat < 5000) return "&G&W****&R******"; else if (stat <= 6000) return "&G&W*****&R*****"; else if (stat <= 7000) return "&G&W******&R****"; else if (stat <= 8000) return "&G&W*******&R***"; else if (stat <= 9000) return "&G&W********&R**"; else if (stat <= 10000) return "&G&W*********&R*"; else return "&G&W**********"; } //Growth Score void do_gscore(CHAR_DATA *ch, char *argument) { ch_printf(ch, "&c&wStrength: %s\n\r", get_rating(ch->pcdata->per_str, 10000)); ch_printf(ch, "&c&wWisdom: %s\n\r", get_rating(ch->pcdata->per_wis, 10000)); ch_printf(ch, "&c&wDexterity: %s\n\r", get_rating(ch->pcdata->per_dex, 10000)); ch_printf(ch, "&c&wConstitution: %s\n\r", get_rating(ch->pcdata->per_con, 10000)); ch_printf(ch, "&c&wIntelligence: %s\n\r", get_rating(ch->pcdata->per_int, 10000)); ch_printf(ch, "&c&wLuck: %s\n\r", get_rating(ch->pcdata->per_lck, 10000)); ch_printf(ch, "&c&wAgility: %s\n\r", get_rating(ch->pcdata->per_agi, 1000)); ch_printf(ch, "&c&wHealth: %s\n\r", get_rating(ch->pcdata->per_hp, 1000)); ch_printf(ch, "&c&wMana: %s\n\r", get_rating(ch->pcdata->per_mana, 1000)); ch_printf(ch, "&c&wMovement: %s\n\r", get_rating(ch->pcdata->per_move, 1000)); return; } int prv args((int value)); int get_bagility(CHAR_DATA *ch) { int timer = 1; int mweap = 0; int tweight = 0; int agi; OBJ_DATA *armor; OBJ_DATA *shield; OBJ_DATA *weapon = NULL; OBJ_DATA *dual = NULL; int wtype; int percent = 0; int cweight = 0; int extra; if (ch->race < LAST_H_RACE) { if (ch->race < MAX_RACE) mweap = race_table[ch->race]->weaponmin; else mweap = npcrace_agi(ch->race); weapon = get_eq_char(ch, WEAR_WIELD); dual = get_eq_char(ch, WEAR_DUAL_WIELD); } if (weapon == NULL) { if (!IS_NPC(ch)) timer = 3; else { timer = 6; } } else { timer = 3 + (weapon->value[3] - mweap); if (dual) { cweight += dual->weight; percent = 95 - (POINT_LEVEL(LEARNED(ch, gsn_dual_wield), MASTERED(ch, gsn_dual_wield))/2.5); timer = timer * percent / 100; if ((((3 + (weapon->value[3] - mweap)) * percent) % 100) >= 50) timer++; } cweight += weapon->weight; if (cweight > str_app[get_curr_str(ch)].wield) { timer += UMAX(0, (cweight - str_app[get_curr_str(ch)].wield) * 3 / 2); } } if (!IS_NPC(ch) && xIS_SET(ch->act, PLR_PARRY)) { if (MASTERED(ch, gsn_parry) == 2) timer += 1; else if (MASTERED(ch, gsn_parry) >= 3) timer += 0; else timer += 2; } armor = get_eq_char(ch, WEAR_BODY); if (armor) tweight += armor->weight; armor = get_eq_char(ch, WEAR_HEAD); if (armor) tweight += armor->weight; armor = get_eq_char(ch, WEAR_NECK); if (armor) tweight += armor->weight; armor = get_eq_char(ch, WEAR_ARM_R); if (armor) tweight += armor->weight; armor = get_eq_char(ch, WEAR_ARM_L); if (armor) tweight += armor->weight; armor = get_eq_char(ch, WEAR_LEG_R); if (armor) tweight += armor->weight; armor = get_eq_char(ch, WEAR_LEG_L); if (armor) tweight += armor->weight; if ((shield = get_eq_char(ch, WEAR_SHIELD)) != NULL) { int mshield; mshield = MASTERED(ch, gsn_shieldblock); if (mshield == 2) mshield = 1; else if (mshield == 3) mshield = 2; else if (mshield == 4) mshield = 4; timer += UMAX(0, shield->value[3]-mshield); } tweight = tweight - str_app[get_curr_str(ch)].weight; agi = get_curr_agi(ch); //Two things for dual wield, a little much... ch->agi_meter = 1000 - (number_range(agi*7/2, agi*5)); if (tweight > 0) { tweight = tweight * 100 / str_app[get_curr_str(ch)].weight * 7; ch->agi_meter += number_range(tweight*7/10, tweight*1); } if (!IS_NPC(ch) && ch->pcdata->learned[gsn_combatart] > 0 && weapon) { ch->agi_meter -= URANGE(6, POINT_LEVEL(LEARNED(ch, gsn_combatart), MASTERED(ch, gsn_combatart))*2/3, 50); } if (!IS_NPC(ch) && ch->pcdata->learned[gsn_attack_frenzy] > 0 && weapon) { ch->agi_meter -= URANGE(15, POINT_LEVEL(LEARNED(ch, gsn_attack_frenzy), MASTERED(ch, gsn_attack_frenzy))*4/3, 100); } wtype = wielding_skill_weapon(ch, 0); if (!IS_NPC(ch) && wtype) { int wskill = wielding_skill_weapon(ch, 1); if (wskill == 1) { if (ch->pcdata->learned[gsn_weapon_axe] > 0) { ch->agi_meter -= URANGE(3, POINT_LEVEL(LEARNED(ch, gsn_weapon_axe), MASTERED(ch, gsn_weapon_axe))*2/5, 25); } } if (wskill == 2) { if (ch->pcdata->learned[gsn_weapon_sword] > 0) { ch->agi_meter -= URANGE(3, POINT_LEVEL(LEARNED(ch, gsn_weapon_sword), MASTERED(ch, gsn_weapon_sword))*2/5, 25); } } if (wskill == 3) { if (ch->pcdata->learned[gsn_weapon_polearm] > 0) { ch->agi_meter -= URANGE(3, POINT_LEVEL(LEARNED(ch, gsn_weapon_polearm), MASTERED(ch, gsn_weapon_polearm))*2/5, 25); } } if (wskill == 4) { if (ch->pcdata->learned[gsn_weapon_blunt] > 0) { ch->agi_meter -= URANGE(3, POINT_LEVEL(LEARNED(ch, gsn_weapon_blunt), MASTERED(ch, gsn_weapon_blunt))*2/5, 25); } } if (wskill == 5) { if (ch->pcdata->learned[gsn_weapon_staff] > 0) { ch->agi_meter -= URANGE(3, POINT_LEVEL(LEARNED(ch, gsn_weapon_staff), MASTERED(ch, gsn_weapon_staff))*2/5, 25); } } if (wskill == 7) { if (ch->pcdata->learned[gsn_weapon_dagger] > 0) { ch->agi_meter -= URANGE(3, POINT_LEVEL(LEARNED(ch, gsn_weapon_dagger), MASTERED(ch, gsn_weapon_dagger))*2/5, 25); ch->agi_meter -= URANGE(3, POINT_LEVEL(LEARNED(ch, gsn_weapon_daggerstudy), MASTERED(ch, gsn_weapon_daggerstudy))*3/5, 50); ch->agi_meter -= URANGE(3, POINT_LEVEL(LEARNED(ch, gsn_weapon_daggerstrike), MASTERED(ch, gsn_weapon_daggerstrike))*2/5, 25); } } if (wskill == 6) { if (ch->pcdata->learned[gsn_weapon_projectile] > 0) { ch->agi_meter -= URANGE(3, POINT_LEVEL(LEARNED(ch, gsn_weapon_projectile), MASTERED(ch, gsn_weapon_projectile))*2/5, 25); } } } if (weapon && shield && !IS_NPC(ch)) { if (IS_OBJ_STAT(weapon, ITEM_TWOHANDED)) { if (ch->pcdata->learned[gsn_inhuman_strength] <= 0) bug("%s is wearing a two-handed weapon and a shield!", ch->name); else if (MASTERED(ch, gsn_inhuman_strength) == 1) timer+= 4; else if (MASTERED(ch, gsn_inhuman_strength) == 2) timer+= 3; else if (MASTERED(ch, gsn_inhuman_strength) == 3) timer+= 2; else if (MASTERED(ch, gsn_inhuman_strength) == 4) timer+= 0; } } extra = (timer * ch->agi_meter / 10) % 100; timer = timer * ch->agi_meter / 1000; return timer*100+extra; } void do_score(CHAR_DATA * ch, char *argument) { char buf[MSL]; char caste_name[MSL]; char agimeter_name[MSL]; int agimeter; int x; char element_name[MSL]; AFFECT_DATA *paf; int hplayed = ((ch->played + (current_time - ch->pcdata->logon)) / 3600); if (IS_NPC(ch)) { do_oldscore(ch, argument); return; } if (!str_cmp(argument, "more")) { send_to_pager_color("&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r", ch); pager_printf_color(ch, "&g&w| &CMdeaths: &W%5d &g&w| &CAutoSac (&W%c&C) &g&w| &CMKills: &W%5d &g&w|\n\r", ch->pcdata->mdeaths, xIS_SET(ch->act, PLR_AUTOSAC) ? 'X' : ' ', ch->pcdata->mkills); pager_printf_color(ch, "&g&w| &CPager: (&W%c&C) &W%3d &g&w| &CAutoExit(&W%c&C) &g&w| &CAutoLoot(&W%c&C) &c&w|\n\r", IS_SET(ch->pcdata->flags, PCFLAG_PAGERON) ? 'X' : ' ', ch->pcdata->pagerlen, xIS_SET(ch->act, PLR_AUTOEXIT) ? 'X' : ' ', xIS_SET(ch->act, PLR_AUTOLOOT) ? 'X' : ' '); pager_printf_color(ch, "&g&w| &CPkills (&W%-4d&C) &g&w| &CPranking (&W%-3d&C) &g&w| &CPdeaths (&W%-4d&C) &c&w|\n\r", ch->pcdata->pkills, ch->pcdata->pranking, ch->pcdata->pdeaths); if (ch->level >= LEVEL_IMMORTAL || IS_AFFECTED(ch, AFF_DETECT_MAGIC)) { send_to_pager_color("&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r", ch); pager_printf(ch, "&c&w| &w&CArmor:&w&W%-2d &w&CStone:&w&W%-2d &w&CTohit:&w&W%-2d &w&CSanctify:&w&W%-2d &w&CShield:&w&W%-2d &w&CWmod:&w&W%-3d &c&w|\n\r", UMIN(10, ch->apply_armor), UMIN(6, ch->apply_stone), UMIN(10, ch->apply_tohit), UMIN(15, ch->apply_sanctify), UMIN(50, ch->apply_shield), ch->apply_wmod); pager_printf(ch, "&c&w| &w&CFasting:&w&W%-3d &w&CMFuse:&w&W%-3d &w&CMShell:&w&W%-3d &w&CMShield:&w&W%-3d &w&CMGuard:&w&W%-3d &c&w|\n\r", ch->apply_fasting, ch->apply_manafuse, ch->apply_manashell, ch->apply_manashield, ch->apply_managuard); pager_printf(ch, "&c&w| &w&CMburn:&w&W%-2d &w&CWClamp:&w&W%-3d &w&CACatch:&w&W%-3d &w&CBracing:&w&W%-3d &w&CHardning:&w&W%-2d &c&w|\n\r", UMIN(10, ch->apply_manaburn), ch->apply_weaponclamp, ch->apply_arrowcatch, ch->apply_bracing, UMIN(4, ch->apply_hardening)); pager_printf(ch, "&c&w| &w&CHRegen:&w&W%-3d &w&CMRegen:&w&W%-3d &c&w|\n\r", UMIN(700, ch->hpgen), UMIN(700, ch->managen)); send_to_pager_color("&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r", ch); pager_printf_color(ch, "&c&w| &w&CRFire: &w&W%-3d &w&CRWater: &w&W%-3d &w&CRAir: &w&W%-3d &w&CREarth: &w&W%-3d &w&CREnergy: &w&W%-3d &c&w|\n\r", prv(ch->apply_res_fire[0]), prv(ch->apply_res_water[0]), prv(ch->apply_res_air[0]), prv(ch->apply_res_earth[0]), prv(ch->apply_res_energy[0])); pager_printf_color(ch, "&c&w| &w&CRMagic: &w&W%-3d &w&CRNonMagic: &w&W%-3d &w&CRBlunt: &w&W%-3d &w&CRPierce: &w&W%-3d &w&CRSlash: &w&W%-3d &c&w|\n\r", prv(ch->apply_res_magic[0]), prv(ch->apply_res_nonmagic[0]), prv(ch->apply_res_blunt[0]), prv(ch->apply_res_pierce[0]), prv(ch->apply_res_slash[0])); pager_printf_color(ch, "&c&w| &w&CRPoison: &w&W%-3d &w&CRPara: &w&W%-3d &w&CRHoly: &w&W%-3d &w&CRUnholy: &w&W%-3d &w&CRUndead: &w&W%-3d &c&w|\n\r", prv(ch->apply_res_poison[0]), prv(ch->apply_res_paralysis[0]), prv(ch->apply_res_holy[0]), prv(ch->apply_res_unholy[0]), prv(ch->apply_res_undead[0])); pager_printf_color(ch, "&c&w| &w&CSPoiDea: &w&W%-3d &w&CSParaPetr: &w&W%-3d &w&CSWand: &w&W%-3d &w&CSBreath: &w&W%-3d &w&CSSpell: &w&W%-3d &c&w|\n\r", ch->saving_poison_death, ch->saving_wand, ch->saving_para_petri, ch->saving_breath, ch->saving_spell_staff); send_to_pager_color("&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r", ch); } return; } /* Caste Info -- Xerves 7/7/90 */ if (ch->pcdata->caste == 1) sprintf(caste_name, "&Y Serf &G&W"); else if (ch->pcdata->caste == 2) sprintf(caste_name, "&Y Peasant &G&W"); else if (ch->pcdata->caste == 3) sprintf(caste_name, "&Y Laborer &G&W"); else if (ch->pcdata->caste == 4) sprintf(caste_name, "&Y Apprentice &G&W"); else if (ch->pcdata->caste == 5) sprintf(caste_name, "&Y Journeyman &G&W"); else if (ch->pcdata->caste == 6) sprintf(caste_name, "&Y Master &G&W"); else if (ch->pcdata->caste == 7) sprintf(caste_name, "&Y Merchant &G&W"); else if (ch->pcdata->caste == 8) sprintf(caste_name, "&Y Trader &G&W"); else if (ch->pcdata->caste == 9 && ch->sex == 0) sprintf(caste_name, "&Y Businessman &G&W"); else if (ch->pcdata->caste == 9 && ch->sex == 1) sprintf(caste_name, "&Y Businessman &G&W"); else if (ch->pcdata->caste == 9 && ch->sex == 2) sprintf(caste_name, "&Y Businesswoman&G&W"); else if (ch->pcdata->caste == 10) sprintf(caste_name, "&Y Mayor &G&W"); else if (ch->pcdata->caste == 11) sprintf(caste_name, "&P Page &G&W"); else if (ch->pcdata->caste == 12) sprintf(caste_name, "&P Squire &G&W"); else if (ch->pcdata->caste == 13) sprintf(caste_name, "&P Knight &G&W"); else if (ch->pcdata->caste == 14) sprintf(caste_name, "&P Baronet &G&W"); else if (ch->pcdata->caste == 15) sprintf(caste_name, "&P Baron &G&W"); else if (ch->pcdata->caste == 16) sprintf(caste_name, "&P Earl &G&W"); else if (ch->pcdata->caste == 17) sprintf(caste_name, "&P Viscount &G&W"); else if (ch->pcdata->caste == 18) sprintf(caste_name, "&P Count &G&W"); else if (ch->pcdata->caste == 19) sprintf(caste_name, "&P Duke &G&W"); else if (ch->pcdata->caste == 20) sprintf(caste_name, "&P Marquis &G&W"); else if (ch->pcdata->caste == 21) sprintf(caste_name, "&C Vasal &G&W"); else if (ch->pcdata->caste == 22) sprintf(caste_name, "&C Lord-Vassal &G&W"); else if (ch->pcdata->caste == 23) sprintf(caste_name, "&C Lord &G&W"); else if (ch->pcdata->caste == 24) sprintf(caste_name, "&C Hi-Lord &G&W"); else if (ch->pcdata->caste == 25) sprintf(caste_name, "&C Captain &G&W"); else if (ch->pcdata->caste == 26) sprintf(caste_name, "&C Minister &G&W"); else if (ch->pcdata->caste == 27 && ch->sex == 0) sprintf(caste_name, "&C Prince &G&W"); else if (ch->pcdata->caste == 27 && ch->sex == 1) sprintf(caste_name, "&C Prince &G&W"); else if (ch->pcdata->caste == 27 && ch->sex == 2) sprintf(caste_name, "&C Princess &G&W"); else if (ch->pcdata->caste == 28 && ch->sex == 0) sprintf(caste_name, "&C King &G&W"); else if (ch->pcdata->caste == 28 && ch->sex == 1) sprintf(caste_name, "&C King &G&W"); else if (ch->pcdata->caste == 28 && ch->sex == 2) sprintf(caste_name, "&C Queen &G&W"); else if (ch->pcdata->caste == 29) sprintf(caste_name, "&O Avatar &G&W"); else if (ch->pcdata->caste == 30) sprintf(caste_name, "&O Legend &G&W"); else if (ch->pcdata->caste == 31) sprintf(caste_name, "&G&W Ascender &G&W"); else if (ch->pcdata->caste == 32) sprintf(caste_name, "&G&W Immortal &G&W"); else if (ch->pcdata->caste == 33) sprintf(caste_name, "&G&W God &G&W"); else if (ch->pcdata->caste == 34) sprintf(caste_name, "&G&W Staff &G&W"); else if (ch->pcdata->caste == 35) sprintf(caste_name, "&G&W Admin &G&W"); else sprintf(caste_name, "&r Casteless &G&W"); if (IS_SET(ch->elementb, ELEMENT_FIRE)) sprintf(element_name, "&r Fire "); if (IS_SET(ch->elementb, ELEMENT_WATER)) sprintf(element_name, "&C Water"); if (IS_SET(ch->elementb, ELEMENT_AIR)) sprintf(element_name, "&c Air"); if (IS_SET(ch->elementb, ELEMENT_EARTH)) sprintf(element_name, "&O Earth"); if (IS_SET(ch->elementb, ELEMENT_ENERGY)) sprintf(element_name, "&c&wEnergy"); if (IS_SET(ch->elementb, ELEMENT_DIVINE)) sprintf(element_name, "&w&WDivine"); if (IS_SET(ch->elementb, ELEMENT_UNHOLY)) sprintf(element_name, "&w&zUnholy"); set_pager_color(AT_SCORE, ch); //ch_printf(ch, "%s", MXPTAG("FRAME Name=\"Map\" FLOATING Left=\"-55c\" Top=\"0\" Width=\"55c\" Height=\"21c\"")); //ch_printf(ch, "%s", MXPTAG("FRAME Name=\"Map\" FLOATING Left=\"-20c\" Top=\"0\" Width=\"20c\" Height=\"20c\"")); //ch_printf(ch, "%s %s %s %s %s", MXPTAG("DEST Map EOF"), MXPTAG("/DEST"), MXPTAG("DEST Map"), MXPTAG("Image notepad.jpg align=bottom"), MXPTAG("/DEST")); pager_printf_color(ch, "\n\r &P%s%s%s.\n\r", ch->name, ch->pcdata->title, get_wear_hidden_cloak(ch) ? " (Cloaked)" : ""); send_to_pager_color("&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r", ch); pager_printf_color(ch, "&g&w| &CStrength: &r[&G&W%2.2d/%2.2d&r] &g&w| &CHealth: &r[&G&W%-5d/%5d&r] &g&w| &CCaste: &r[&G&W%14s&r] &c&w|\n\r", get_curr_str(ch), ch->perm_str, ch->hit, ch->max_hit, caste_name); switch (ch->style) { case STYLE_EVASIVE: sprintf(buf, "Evasive"); break; case STYLE_DIVINE: sprintf(buf, "divine"); break; case STYLE_WIZARDRY: sprintf(buf, "wizardry"); break; case STYLE_DEFENSIVE: sprintf(buf, "Defensive"); break; case STYLE_AGGRESSIVE: sprintf(buf, "Aggressive"); break; case STYLE_BERSERK: sprintf(buf, "Berserk"); break; default: sprintf(buf, "Standard"); break; } pager_printf_color(ch, "&g&w| &CIntelligence: &r[&G&W%2.2d/%2.2d&r] &g&w| &CMana: &r[&G&W%-5d/%5d&r] &g&w| &CStyle: &r[&G&W %10s &r] &c&w|\n\r", get_curr_int(ch), ch->perm_int, ch->mana, ch->max_mana, buf); switch (ch->position) { case POS_DEAD: sprintf(buf, " Decomposing "); break; case POS_MORTAL: sprintf(buf, " Wounded "); break; case POS_INCAP: sprintf(buf, " Knocked out "); break; case POS_STUNNED: sprintf(buf, " Stunned "); break; case POS_SLEEPING: sprintf(buf, " Sleeping "); break; case POS_RESTING: sprintf(buf, " Resting "); break; case POS_STANDING: sprintf(buf, " Standing "); break; case POS_FIGHTING: sprintf(buf, " Fighting "); break; case POS_EVASIVE: sprintf(buf, " Evasive "); /* Fighting style support -haus */ break; case POS_DEFENSIVE: sprintf(buf, " Defensive "); break; case POS_AGGRESSIVE: sprintf(buf, " Aggressive "); break; case POS_BERSERK: sprintf(buf, " Berserk "); break; case POS_MOUNTED: sprintf(buf, " Mounted "); break; case POS_RIDING: sprintf(buf, " Riding "); break; case POS_SITTING: sprintf(buf, " Sitting "); break; } pager_printf_color(ch, "&g&w| &CWisdom: &r[&G&W%2.2d/%2.2d&r] &g&w| &CMoves: &r[&G&W%-5d/%5d&r] &g&w| &CPos: &r[&G&W%-14s&r] &c&w|\n\r", get_curr_wis(ch), ch->perm_wis, ch->move, ch->max_move, buf); pager_printf_color(ch, "&g&w| &CDexterity: &r[&G&W%2.2d/%2.2d&r] &g&w| &CGold: &r[&G&W %-10.10s&r] &g&w| &CQPS: &r[&G&W %-10d &r] &c&w|\n\r", get_curr_dex(ch), ch->perm_dex, punct(ch->gold), ch->pcdata->quest_curr); pager_printf_color(ch, "&g&w| &CConstitution: &r[&G&W%2.2d/%2.2d&r] &g&w| &CBank: &r[&G&W %-10.10s&r] &g&w| &CAQPS: &r[&G&W %-10d &r] &c&w|\n\r", get_curr_con(ch), ch->perm_con, punct(ch->pcdata->balance), ch->pcdata->quest_accum); pager_printf_color(ch, "&g&w| &CLuck: &r[&G&W%2.2d/%2.2d&r] &g&w| &CAgi: &r[&G&W %3d &r] &c&w| &CHand: &r[&G&W %s &r] &c&w|\n\r", get_curr_lck(ch), ch->perm_lck, get_curr_agi(ch), ch->pcdata->righthanded == 0 ? " Left" : "Right"); pager_printf_color(ch, "&g&w| &CEndurance: &r[ &G&W%3.3d &r] &g&w| &CKgndom: &r[&G&W %-10.10s&r] &g&w| &CTown: &r[&G&W %-13.13s&r] &c&w|\n\r", ch->mover, kingdom_table[ch->pcdata->hometown]->name, ch->pcdata->town ? ch->pcdata->town->name : "None"); if (sysdata.resetgame) { pager_printf_color(ch, "&g&w| &CPower Ranking:&r[&G&W%-5d&r] &g&w| &CSPoint: &r[&G&W %-9d &r] &g&w| &CSWorth: &r[ &G&W%12.12s &r]&c&w |\n\r", ch->pcdata->power_ranking, ch->pcdata->spoints, punct(player_stat_worth(ch))); } else { pager_printf_color(ch, "&g&w| &g&w| &CSPoint: &r[&G&W %-9d &r] &g&w| &CSWorth: &r[ &G&W%12.12s &r]&c&w |\n\r", ch->pcdata->spoints, punct(player_stat_worth(ch))); } if (sysdata.resetgame) { pager_printf_color(ch, "&g&w| &CTwink Points: &r[ &G&W%-3d &r] &g&w| &CPLevel: &r[&G&W %-9d &r] &g&w| &CEWorth: &r[ &G&W%12.12s &r]&c&w |\n\r", ch->pcdata->twink_points, get_player_statlevel(ch), punct(player_equipment_worth(ch))); } send_to_pager_color("&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r", ch); pager_printf_color(ch, "&g&w| &CElement: &r[%s&r] &g&w| &CItems: &r[&G&W%5d/%-5d&r] &c&w| &CWeight:&r[&G&W%8.2f/%-7d&r]&c&w|\n\r", element_name, get_ch_carry_number(ch), can_carry_n(ch), get_ch_carry_weight(ch), can_carry_w(ch)); pager_printf_color(ch, "&g&w| &CWimpy: &r[&G&W %4d&r] &g&w| &CRace: &r[&G&W %-10s&r] &g&w| &CThirst: &r[&G&W %3d &r] &c&w|\n\r", ch->wimpy, capitalize(get_race(ch)), ch->pcdata->condition[COND_THIRST]); pager_printf_color(ch, "&g&w| &CAge: &r[&G&W %4d&r] &g&w| &CGender: &r[&G&W %-7s &r] &g&w| &CHunger: &r[&G&W %3d &r] &c&w|\n\r", get_age(ch), ch->sex == SEX_MALE ? "Male" : ch->sex == SEX_FEMALE ? "Female" : "Neither", ch->pcdata->condition[COND_FULL]); pager_printf_color(ch, "&g&w| &CHours: &r[&G&W%5d&r] &g&w| &CReward: &r[&G&W%5d/%-5d&r] &c&w| &CDrunk: &r[&G&W %3d &r] &c&w|\n\r", hplayed, ch->pcdata->reward_curr, ch->pcdata->reward_accum, ch->pcdata->condition[COND_DRUNK]); if (IS_IMMORTAL(ch)) { pager_printf(ch, "&g&w| &CWizinvis [%s] &g&w| &CWizlevel (%2d) &g&w| &c&w|\n\r", xIS_SET(ch->act, PLR_WIZINVIS) ? "X" : " ", ch->pcdata->wizinvis); } send_to_pager_color("&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r", ch); if (ch->con_rarm == -1) sprintf(caste_name, "&r*****"); else if (ch->con_rarm <= 200) sprintf(caste_name, "&G&W*&r****"); else if (ch->con_rarm <= 400) sprintf(caste_name, "&G&W**&r***"); else if (ch->con_rarm <= 600) sprintf(caste_name, "&G&W***&r**"); else if (ch->con_rarm <= 800) sprintf(caste_name, "&G&W****&r*"); else sprintf(caste_name, "&G&W*****"); pager_printf_color(ch, "&g&w| &CR-Arm %s ", caste_name); if (ch->con_larm == -1) sprintf(caste_name, "&r*****"); else if (ch->con_larm <= 200) sprintf(caste_name, "&G&W*&r****"); else if (ch->con_larm <= 400) sprintf(caste_name, "&G&W**&r***"); else if (ch->con_larm <= 600) sprintf(caste_name, "&G&W***&r**"); else if (ch->con_larm <= 800) sprintf(caste_name, "&G&W****&r*"); else sprintf(caste_name, "&G&W*****"); pager_printf_color(ch, "&CL-Arm %s ", caste_name); if (ch->con_rleg == -1) sprintf(caste_name, "&r*****"); else if (ch->con_rleg <= 200) sprintf(caste_name, "&G&W*&r****"); else if (ch->con_rleg <= 400) sprintf(caste_name, "&G&W**&r***"); else if (ch->con_rleg <= 600) sprintf(caste_name, "&G&W***&r**"); else if (ch->con_rleg <= 800) sprintf(caste_name, "&G&W****&r*"); else sprintf(caste_name, "&G&W*****"); pager_printf_color(ch, "&CR-Leg %s ", caste_name); if (ch->con_lleg == -1) sprintf(caste_name, "&r*****"); else if (ch->con_lleg <= 200) sprintf(caste_name, "&G&W*&r****"); else if (ch->con_lleg <= 400) sprintf(caste_name, "&G&W**&r***"); else if (ch->con_lleg <= 600) sprintf(caste_name, "&G&W***&r**"); else if (ch->con_lleg <= 800) sprintf(caste_name, "&G&W****&r*"); else sprintf(caste_name, "&G&W*****"); pager_printf_color(ch, "&CL-Leg %s ", caste_name); if (ch->pcdata->hit_cnt * 100 / get_sore_rate(ch->race, ch->max_hit) < 20) sprintf(caste_name, "&G&W*****"); else if (ch->pcdata->hit_cnt * 100 / get_sore_rate(ch->race, ch->max_hit) < 40) sprintf(caste_name, "&G&W****&r*"); else if (ch->pcdata->hit_cnt * 100 / get_sore_rate(ch->race, ch->max_hit) < 60) sprintf(caste_name, "&G&W***&r**"); else if (ch->pcdata->hit_cnt * 100 / get_sore_rate(ch->race, ch->max_hit) < 80) sprintf(caste_name, "&G&W**&r***"); else if (ch->pcdata->hit_cnt * 100 / get_sore_rate(ch->race, ch->max_hit) < 100) sprintf(caste_name, "&G&W*&r****"); else sprintf(caste_name, "&w&r*****"); pager_printf_color(ch, "&CHBurn %s ", caste_name); if (ch->pcdata->mana_cnt * 100 / 60 < 20) sprintf(caste_name, "&G&W*****"); else if (ch->pcdata->mana_cnt * 100 / 60 < 40) sprintf(caste_name, "&G&W****&r*"); else if (ch->pcdata->mana_cnt * 100 / 60 < 60) sprintf(caste_name, "&G&W***&r**"); else if (ch->pcdata->mana_cnt * 100 / 60 < 80) sprintf(caste_name, "&G&W**&r***"); else if (ch->pcdata->mana_cnt * 100 / 60 < 100) sprintf(caste_name, "&G&W*&r****"); else sprintf(caste_name, "&w&r*****"); pager_printf_color(ch, "&CMBurn %s &g&w|\n\r", caste_name); agimeter = get_bagility(ch); x = 50; strcpy(agimeter_name, ""); for (;agimeter >= x && x < 2401;) { strcat(agimeter_name, "&w&P*"); if (x % 200 == 0) strcat(agimeter_name, "&w&B|"); x += 50; } for (;x < 2401;) { strcat(agimeter_name, "&c&w*"); if (x % 200 == 0) strcat(agimeter_name, "&w&B|"); x += 50; } ch_printf(ch, "&g&w| &CAgiMeter: %s &g&w|\n\r", agimeter_name); send_to_pager_color("&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r", ch); if (ch->pcdata->clan && ch->pcdata->clan->clan_type != CLAN_ORDER && ch->pcdata->clan->clan_type != CLAN_GUILD) { send_to_pager_color("&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r", ch); pager_printf_color(ch, "&g&w| &CCLAN: &W%-14.14s&g&w| &CAvPkills: &W%-5d &g&w| &CNonAvpkills: &W%-5d &c&w|\n\r", ch->pcdata->clan->name, ch->pcdata->clan->pkills[5], (ch->pcdata->clan->pkills[0] + ch->pcdata->clan->pkills[1] + ch->pcdata->clan->pkills[2] + ch->pcdata->clan->pkills[3] + ch->pcdata->clan->pkills[4])); pager_printf_color(ch, "&g&w| &CAvPdeaths: &W%-5d &g&w| &CNonAvpdeaths: &W%-5d &g&w| &c&w|\n\r", ch->pcdata->clan->pdeaths[5], (ch->pcdata->clan->pdeaths[0] + ch->pcdata->clan->pdeaths[1] + ch->pcdata->clan->pdeaths[2] + ch->pcdata->clan->pdeaths[3] + ch->pcdata->clan->pdeaths[4])); send_to_pager_color("&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r", ch); } if (ch->pcdata->clan && ch->pcdata->clan->clan_type == CLAN_ORDER) { send_to_pager_color("&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r", ch); pager_printf_color(ch, "&g&w| &COrder: &W%-15s&g&w| &CMkills: &W%-6d &g&w| &CMDeaths: &W%-6d &c&w|\n\r", ch->pcdata->clan->name, ch->pcdata->clan->mkills, ch->pcdata->clan->mdeaths); send_to_pager_color("&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r", ch); } if (ch->pcdata->clan && ch->pcdata->clan->clan_type == CLAN_GUILD) { send_to_pager_color("&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r", ch); pager_printf_color(ch, "&g&w| &CGuild: &W%-15s&g&w| &CMkills: &W%-6d &g&w| &CMDeaths: &W%-6d &c&w|\n\r", ch->pcdata->clan->name, ch->pcdata->clan->mkills, ch->pcdata->clan->mdeaths); send_to_pager_color("&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r", ch); } if (ch->position != POS_SLEEPING) switch (ch->mental_state / 10) { default: send_to_pager("&g&w| &GCondition: &OYou're completely messed up!\n\r", ch); break; case -10: send_to_pager("&g&w| &GCondition: &OYou're barely conscious.\n\r", ch); break; case -9: send_to_pager("&g&w| &GCondition: &OYou can barely keep your eyes open.\n\r", ch); break; case -8: send_to_pager("&g&w| &GCondition: &OYou're extremely drowsy.\n\r", ch); break; case -7: send_to_pager("&g&w| &GCondition: &OYou feel very unmotivated.\n\r", ch); break; case -6: send_to_pager("&g&w| &GCondition: &OYou feel sedated.\n\r", ch); break; case -5: send_to_pager("&g&w| &GCondition: &OYou feel sleepy.\n\r", ch); break; case -4: send_to_pager("&g&w| &GCondition: &OYou feel tired.\n\r", ch); break; case -3: send_to_pager("&g&w| &GCondition: &OYou could use a rest.\n\r", ch); break; case -2: send_to_pager("&g&w| &GCondition: &OYou feel a little under the weather.\n\r", ch); break; case -1: send_to_pager("&g&w| &GCondition: &OYou feel fine.\n\r", ch); break; case 0: send_to_pager("&g&w| &GCondition: &OYou feel great.\n\r", ch); break; case 1: send_to_pager("&g&w| &GCondition: &OYou feel energetic.\n\r", ch); break; case 2: send_to_pager("&g&w| &GCondition: &OYour mind is racing.\n\r", ch); break; case 3: send_to_pager("&g&w| &GCondition: &OYou can't think straight.\n\r", ch); break; case 4: send_to_pager("&g&w| &GCondition: &OYour mind is going 100 miles an hour.\n\r", ch); break; case 5: send_to_pager("&g&w| &GCondition: &OYou're high as a kite.\n\r", ch); break; case 6: send_to_pager("&g&w| &GCondition: &OYour mind and body are slipping apart.\n\r", ch); break; case 7: send_to_pager("&g&w| &GCondition: &OReality is slipping away.\n\r", ch); break; case 8: send_to_pager("&g&w| &GCondition: &OYou have no idea what is real, and what is not.\n\r", ch); break; case 9: send_to_pager("&g&w| &GCondition: &OYou feel immortal.\n\r", ch); break; case 10: send_to_pager("&g&w| &GCondition: &OYou are a Supreme Entity.\n\r", ch); break; } else if (ch->mental_state > 45) send_to_pager("&g&w| &GCondition: &OYour sleep is filled with strange and vivid dreams.\n\r", ch); else if (ch->mental_state > 25) send_to_pager("&g&w| &GCondition: &OYour sleep is uneasy.\n\r", ch); else if (ch->mental_state < -35) send_to_pager("&g&w| &GCondition: &OYou are deep in a much needed sleep.\n\r", ch); else if (ch->mental_state < -25) send_to_pager("&g&w| &GCondition: &OYou are in deep slumber.\n\r", ch); /* send_to_pager("Languages: ", ch ); for ( iLang = 0; lang_array[iLang] != LANG_UNKNOWN; iLang++ ) if ( knows_language( ch, lang_array[iLang], ch ) || (IS_NPC(ch) && ch->speaks == 0) ) { if ( lang_array[iLang] & ch->speaking || (IS_NPC(ch) && !ch->speaking) ) set_pager_color( AT_RED, ch ); send_to_pager( lang_names[iLang], ch ); send_to_pager( " ", ch ); set_pager_color( AT_SCORE, ch ); } send_to_pager( "\n\r", ch ); */ if (ch->pcdata->bestowments && ch->pcdata->bestowments[0] != '\0') pager_printf_color(ch, "&g&w| &CBestowment(s): &Y%s\n\r", ch->pcdata->bestowments); if (IS_IMMORTAL(ch)) { pager_printf(ch, "&g&w| &RBamfin: &g%s\n\r", (ch->pcdata->bamfin[0] != '\0') ? ch->pcdata->bamfin : ""); //pager_printf(ch, "&g&w| &RBamfin: &g%s %s\n\r", ch->name, //(ch->pcdata->bamfin[0] != '\0') //? ch->pcdata->bamfin : "&gappears in a swirling mist."); pager_printf(ch, "&g&w| &RBamfout: &g%s\n\r", (ch->pcdata->bamfout[0] != '\0') ? ch->pcdata->bamfout : ""); //pager_printf(ch, "&g&w| &RBamfout: &g%s %s\n\r", ch->name, //(ch->pcdata->bamfout[0] != '\0') //? ch->pcdata->bamfout : "&gleaves in a swirling mist."); } /* Area Loaded info - Scryn 8/11 */ if (ch->pcdata->area) { pager_printf(ch, "&g&w| &RVnums: &WRoom (%-5.5d - %-5.5d) Object (%-5.5d - %-5.5d) Mob (%-5.5d - %-5.5d)\n\r", ch->pcdata->area->low_r_vnum, ch->pcdata->area->hi_r_vnum, ch->pcdata->area->low_o_vnum, ch->pcdata->area->hi_o_vnum, ch->pcdata->area->low_m_vnum, ch->pcdata->area->hi_m_vnum); pager_printf(ch, "&g&w| &RArea Loaded [%s]\n\r", (IS_SET(ch->pcdata->area->status, AREA_LOADED)) ? "yes" : "no"); } send_to_pager_color("&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r", ch); if (ch->morph && ch->morph->morph) { if (IS_IMMORTAL(ch)) pager_printf(ch, "Morphed as (%d) %s with a timer of %d.\n\r", ch->morph->morph->vnum, ch->morph->morph->short_desc, ch->morph->timer); else pager_printf(ch, "You are morphed into a %s.\n\r", ch->morph->morph->short_desc); send_to_pager_color("&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r", ch); } if (ch->first_affect) { int i; SKILLTYPE *sktmp; char timeb[MSL]; i = 0; set_char_color(AT_WHITE, ch); send_to_pager("AFFECT DATA: ", ch); for (paf = ch->first_affect; paf; paf = paf->next) { if ((sktmp = get_skilltype(paf->type)) == NULL) continue; if (ch->level < LEVEL_IMMORTAL && (!IS_AFFECTED(ch, AFF_DETECT_MAGIC))) { pager_printf(ch, "[%-34.34s] ", sktmp->name); if (i == 0) i = 2; if ((++i % 3) == 0) send_to_pager("\n\r", ch); } if (ch->level >= LEVEL_IMMORTAL || (IS_AFFECTED(ch, AFF_DETECT_MAGIC))) { sprintf(timeb, "M:%d S:%d", paf->duration/60, paf->duration%60); if (paf->modifier == 0) pager_printf(ch, "[%-24.24s&c&R|&G&W%-10.10s] ", sktmp->name, timeb); else if (paf->modifier > 999) pager_printf(ch, "[%-15.15s&c&R|&G&W %7.7s&c&R|&G&W%-10.10s] ", sktmp->name, tiny_affect_loc_name(paf->location), timeb); else pager_printf(ch, "[%-11.11s&c&R|&G&W%+-3.3d %7.7s&c&R|&G&W%-10.10s] ", sktmp->name, paf->modifier, tiny_affect_loc_name(paf->location), timeb); if (i == 0) i = 1; if ((++i % 2) == 0) send_to_pager("\n\r", ch); } } } send_to_pager_color("\n\r&g&w&c*&B-----------------------&c*&B-----------------------&c*&B--------------------------&c*&B\n\r&w&R Type \"score more\" for more of your stats\n\r", ch); send_to_pager("\n\r", ch); return; } /* * Return ascii name of an affect location. */ char *tiny_affect_loc_name(int location) { switch (location) { case APPLY_NONE: return "NIL"; case APPLY_STR: return " STR "; case APPLY_DEX: return " DEX "; case APPLY_INT: return " INT "; case APPLY_WIS: return " WIS "; case APPLY_CON: return " CON "; case APPLY_CHA: return " CHA "; case APPLY_LCK: return " LCK "; case APPLY_SEX: return " SEX "; case APPLY_CLASS: return " CLASS"; case APPLY_LEVEL: return " LVL "; case APPLY_AGE: return " AGE "; case APPLY_MANA: return " MANA "; case APPLY_HIT: return " HP "; case APPLY_MOVE: return " MOVE "; case APPLY_GOLD: return " GOLD "; case APPLY_EXP: return " EXP "; case APPLY_AC: return " -----"; case APPLY_HITROLL: return " HITRL"; case APPLY_DAMROLL: return " DAMRL"; case APPLY_SAVING_POISON: return "SV POI"; case APPLY_SAVING_ROD: return "SV ROD"; case APPLY_SAVING_PARA: return "SV PARA"; case APPLY_SAVING_BREATH: return "SV BRTH"; case APPLY_SAVING_SPELL: return "SV SPLL"; case APPLY_HEIGHT: return "HEIGHT"; case APPLY_WEIGHT: return "WEIGHT"; case APPLY_AFFECT: case APPLY_EXT_AFFECT: return "AFF BY"; case APPLY_RESISTANT: return "RESIST"; case APPLY_IMMUNE: return "IMMUNE"; case APPLY_SUSCEPTIBLE: return "SUSCEPT"; case APPLY_WEAPONSPELL: return " WEAPON"; case APPLY_BACKSTAB: return "BACKSTB"; case APPLY_PICK: return " PICK "; case APPLY_TRACK: return " TRACK "; case APPLY_STEAL: return " STEAL "; case APPLY_SNEAK: return " SNEAK "; case APPLY_HIDE: return " HIDE "; case APPLY_PALM: return " PALM "; case APPLY_DETRAP: return " DETRAP"; case APPLY_DODGE: return " DODGE "; case APPLY_PEEK: return " PEEK "; case APPLY_SCAN: return " SCAN "; case APPLY_GOUGE: return " GOUGE "; case APPLY_SEARCH: return " SEARCH"; case APPLY_MOUNT: return " MOUNT "; case APPLY_DISARM: return " DISARM"; case APPLY_KICK: return " KICK "; case APPLY_PARRY: return " PARRY "; case APPLY_BASH: return " BASH "; case APPLY_STUN: return " STUN "; case APPLY_PUNCH: return " PUNCH "; case APPLY_CLIMB: return " CLIMB "; case APPLY_GRIP: return " GRIP "; case APPLY_SCRIBE: return " SCRIBE"; case APPLY_BREW: return " BREW "; case APPLY_WEARSPELL: return " WEAR "; case APPLY_REMOVESPELL: return " REMOVE"; case APPLY_EMOTION: return "EMOTION"; case APPLY_MENTALSTATE: return " MENTAL"; case APPLY_STRIPSN: return " DISPEL"; case APPLY_REMOVE: return " REMOVE"; case APPLY_DIG: return " DIG "; case APPLY_FULL: return " HUNGER"; case APPLY_THIRST: return " THIRST"; case APPLY_DRUNK: return " DRUNK "; case APPLY_BLOOD: return " BLOOD "; case APPLY_COOK: return " COOK "; case APPLY_RECURRINGSPELL: return " RECURR"; case APPLY_CONTAGIOUS: return "CONTGUS"; case APPLY_ODOR: return " ODOR "; case APPLY_ROOMFLAG: return " RMFLG "; case APPLY_SECTORTYPE: return " SECTOR"; case APPLY_ROOMLIGHT: return " LIGHT "; case APPLY_TELEVNUM: return " TELEVN"; case APPLY_TELEDELAY: return " TELEDY"; case APPLY_AGI: return " AGI "; case APPLY_ARMOR: return " AC "; case APPLY_SHIELD: return "DEFLECT"; case APPLY_STONE: return " ABSORB"; case APPLY_SANCTIFY: return " DAMAGE"; case APPLY_WMOD: return " WMOD"; case APPLY_MANAFUSE: return "MANAFUSE"; case APPLY_FASTING: return " FASTING"; case APPLY_TOHIT: return " TOHIT "; case APPLY_MANATICK: return " MANAGEN"; case APPLY_HPTICK: return " HPGEN"; case APPLY_MANASHELL: return "MSHELL"; case APPLY_MANASHIELD: return "MSHIELD"; case APPLY_MANAGUARD: return "MGUARD"; case APPLY_MANABURN: return "MBURN"; case APPLY_WEAPONCLAMP: return "WPNCLAMP"; case APPLY_ARROWCATCH: return "ACATCH"; case APPLY_BRACING: return "BRACING"; case APPLY_HARDENING: return "HARDNING"; case APPLY_RFIRE: return "RFIRE"; case APPLY_RWATER: return "RWATER"; case APPLY_RAIR: return "RAIR"; case APPLY_REARTH: return "REARTH"; case APPLY_RENERGY: return "RENERGY"; case APPLY_RMAGIC: return "RMAGIC"; case APPLY_RNONMAGIC: return "RNMAGIC"; case APPLY_RBLUNT: return "RBLUNT"; case APPLY_RPIERCE: return "RPIERCE"; case APPLY_RSLASH: return "RSLASH"; case APPLY_RPOISON: return "RPOISON"; case APPLY_RPARALYSIS: return "RPARA"; case APPLY_RHOLY: return "RHOLY"; case APPLY_RUNHOLY: return "RUNHOLY"; case APPLY_RUNDEAD: return "RUNDEAD"; }; bug("Affect_location_name: unknown location %d.", location); return "(???)"; } char *get_class(CHAR_DATA * ch) { return (npc_class[0]); } char *get_race(CHAR_DATA * ch) { if (ch->race < MAX_RACE && ch->race >= 0) return (race_table[ch->race]->race_name); if (ch->race < max_npc_race && ch->race >= 0) return (print_npc_race(ch->race)); return ("Unknown"); } void do_oldscore(CHAR_DATA * ch, char *argument) { AFFECT_DATA *paf; SKILLTYPE *skill; set_pager_color(AT_SCORE, ch); pager_printf(ch, "You are %s%s, level %d, %d years old (%d hours).\n\r", ch->name, IS_NPC(ch) ? "" : ch->pcdata->title, ch->level, get_age(ch), (get_age(ch) - 17) * 20); if (get_trust(ch) != ch->level) pager_printf(ch, "You are trusted at level %d.\n\r", get_trust(ch)); if (IS_NPC(ch) && xIS_SET(ch->act, ACT_MOBINVIS)) pager_printf(ch, "You are mobinvis at level %d.\n\r", ch->mobinvis); if (!IS_NPC(ch) && IS_VAMPIRE(ch)) pager_printf(ch, "You have %d/%d hit, %d/%d blood level, %d/%d movement, %d practices.\n\r", ch->hit, ch->max_hit, ch->pcdata->condition[COND_BLOODTHIRST], 10 + ch->level, ch->move, ch->max_move, ch->practice); else pager_printf(ch, "You have %d/%d hit, %d/%d mana, %d/%d movement, %d practices.\n\r", ch->hit, ch->max_hit, ch->mana, ch->max_mana, ch->move, ch->max_move, ch->practice); pager_printf(ch, "You are carrying %d/%d items with weight %d/%d kg.\n\r", get_ch_carry_number(ch), can_carry_n(ch), get_ch_carry_weight(ch), can_carry_w(ch)); pager_printf(ch, "Str: %d Int: %d Wis: %d Dex: %d Con: %d Cha: %d Lck: %d.\n\r", get_curr_str(ch), get_curr_int(ch), get_curr_wis(ch), get_curr_dex(ch), get_curr_con(ch), get_curr_cha(ch), get_curr_lck(ch)); pager_printf(ch, "You have %d gold coins.\n\r", ch->gold); if (!IS_NPC(ch)) pager_printf(ch, "You have achieved %d glory during your life, and currently have %d.\n\r", ch->pcdata->quest_accum, ch->pcdata->quest_curr); pager_printf(ch, "Autoexit: %s Autoloot: %s Autosac: %s Autogold: %s\n\r", (!IS_NPC(ch) && xIS_SET(ch->act, PLR_AUTOEXIT)) ? "yes" : "no", (!IS_NPC(ch) && xIS_SET(ch->act, PLR_AUTOLOOT)) ? "yes" : "no", (!IS_NPC(ch) && xIS_SET(ch->act, PLR_AUTOSAC)) ? "yes" : "no", (!IS_NPC(ch) && xIS_SET(ch->act, PLR_AUTOGOLD)) ? "yes" : "no"); pager_printf(ch, "Wimpy set to %d hit points.\n\r", ch->wimpy); if (!IS_NPC(ch)) { if (ch->pcdata->condition[COND_DRUNK] > 10) send_to_pager("You are drunk.\n\r", ch); if (ch->pcdata->condition[COND_THIRST] == 0) send_to_pager("You are thirsty.\n\r", ch); if (ch->pcdata->condition[COND_FULL] == 0) send_to_pager("You are hungry.\n\r", ch); } switch (ch->mental_state / 10) { default: send_to_pager("You're completely messed up!\n\r", ch); break; case -10: send_to_pager("You're barely conscious.\n\r", ch); break; case -9: send_to_pager("You can barely keep your eyes open.\n\r", ch); break; case -8: send_to_pager("You're extremely drowsy.\n\r", ch); break; case -7: send_to_pager("You feel very unmotivated.\n\r", ch); break; case -6: send_to_pager("You feel sedated.\n\r", ch); break; case -5: send_to_pager("You feel sleepy.\n\r", ch); break; case -4: send_to_pager("You feel tired.\n\r", ch); break; case -3: send_to_pager("You could use a rest.\n\r", ch); break; case -2: send_to_pager("You feel a little under the weather.\n\r", ch); break; case -1: send_to_pager("You feel fine.\n\r", ch); break; case 0: send_to_pager("You feel great.\n\r", ch); break; case 1: send_to_pager("You feel energetic.\n\r", ch); break; case 2: send_to_pager("Your mind is racing.\n\r", ch); break; case 3: send_to_pager("You can't think straight.\n\r", ch); break; case 4: send_to_pager("Your mind is going 100 miles an hour.\n\r", ch); break; case 5: send_to_pager("You're high as a kite.\n\r", ch); break; case 6: send_to_pager("Your mind and body are slipping appart.\n\r", ch); break; case 7: send_to_pager("Reality is slipping away.\n\r", ch); break; case 8: send_to_pager("You have no idea what is real, and what is not.\n\r", ch); break; case 9: send_to_pager("You feel immortal.\n\r", ch); break; case 10: send_to_pager("You are a Supreme Entity.\n\r", ch); break; } switch (ch->position) { case POS_DEAD: send_to_pager("You are DEAD!!\n\r", ch); break; case POS_MORTAL: send_to_pager("You are mortally wounded.\n\r", ch); break; case POS_INCAP: send_to_pager("You are incapacitated.\n\r", ch); break; case POS_STUNNED: send_to_pager("You are stunned.\n\r", ch); break; case POS_SLEEPING: send_to_pager("You are sleeping.\n\r", ch); break; case POS_RESTING: send_to_pager("You are resting.\n\r", ch); break; case POS_STANDING: send_to_pager("You are standing.\n\r", ch); break; case POS_FIGHTING: send_to_pager("You are fighting.\n\r", ch); break; case POS_MOUNTED: send_to_pager("Mounted.\n\r", ch); break; case POS_RIDING: send_to_pager("Riding.\n\r", ch); break; case POS_SHOVE: send_to_pager("Being shoved.\n\r", ch); break; case POS_DRAG: send_to_pager("Being dragged.\n\r", ch); break; } if (ch->level >= 12) pager_printf(ch, "AC: %d. ", GET_AC(ch)); send_to_pager("You are ", ch); if (GET_AC(ch) >= 101) send_to_pager("WORSE than naked!\n\r", ch); else if (GET_AC(ch) >= 80) send_to_pager("naked.\n\r", ch); else if (GET_AC(ch) >= 60) send_to_pager("wearing clothes.\n\r", ch); else if (GET_AC(ch) >= 40) send_to_pager("slightly armored.\n\r", ch); else if (GET_AC(ch) >= 20) send_to_pager("somewhat armored.\n\r", ch); else if (GET_AC(ch) >= 0) send_to_pager("armored.\n\r", ch); else if (GET_AC(ch) >= -20) send_to_pager("well armored.\n\r", ch); else if (GET_AC(ch) >= -40) send_to_pager("strongly armored.\n\r", ch); else if (GET_AC(ch) >= -60) send_to_pager("heavily armored.\n\r", ch); else if (GET_AC(ch) >= -80) send_to_pager("superbly armored.\n\r", ch); else if (GET_AC(ch) >= -100) send_to_pager("divinely armored.\n\r", ch); else send_to_pager("invincible!\n\r", ch); if (ch->level >= 7) pager_printf(ch, "Hitroll: %d Damroll: %d.\n\r", GET_HITROLL(ch), GET_DAMROLL(ch)); if (ch->level >= 5) pager_printf(ch, "Alignment: %d. ", ch->alignment); send_to_pager("You are ", ch); if (ch->alignment > 900) send_to_pager("angelic.\n\r", ch); else if (ch->alignment > 700) send_to_pager("saintly.\n\r", ch); else if (ch->alignment > 350) send_to_pager("good.\n\r", ch); else if (ch->alignment > 100) send_to_pager("kind.\n\r", ch); else if (ch->alignment > -100) send_to_pager("neutral.\n\r", ch); else if (ch->alignment > -350) send_to_pager("mean.\n\r", ch); else if (ch->alignment > -700) send_to_pager("evil.\n\r", ch); else if (ch->alignment > -900) send_to_pager("demonic.\n\r", ch); else send_to_pager("satanic.\n\r", ch); if (ch->first_affect) { send_to_pager("You are affected by:\n\r", ch); for (paf = ch->first_affect; paf; paf = paf->next) if ((skill = get_skilltype(paf->type)) != NULL) { pager_printf(ch, "Spell: '%s'", skill->name); if (ch->level >= 10) pager_printf(ch, " modifies %s by %d for %d rounds", affect_loc_name(paf->location), paf->modifier, paf->duration); send_to_pager(".\n\r", ch); } } if (!IS_NPC(ch) && IS_IMMORTAL(ch)) { pager_printf(ch, "\n\rWizInvis level: %d WizInvis is %s\n\r", ch->pcdata->wizinvis, xIS_SET(ch->act, PLR_WIZINVIS) ? "ON" : "OFF"); if (ch->pcdata->r_range_lo && ch->pcdata->r_range_hi) pager_printf(ch, "Room Range: %d - %d\n\r", ch->pcdata->r_range_lo, ch->pcdata->r_range_hi); if (ch->pcdata->o_range_lo && ch->pcdata->o_range_hi) pager_printf(ch, "Obj Range : %d - %d\n\r", ch->pcdata->o_range_lo, ch->pcdata->o_range_hi); if (ch->pcdata->m_range_lo && ch->pcdata->m_range_hi) pager_printf(ch, "Mob Range : %d - %d\n\r", ch->pcdata->m_range_lo, ch->pcdata->m_range_hi); } return; } /* 1997, Blodkai */ void do_remains(CHAR_DATA * ch, char *argument) { char buf[MSL]; OBJ_DATA *obj; bool found = FALSE; if (IS_NPC(ch)) return; set_char_color(AT_MAGIC, ch); if (!ch->pcdata->deity) { send_to_pager("You have no deity from which to seek such assistance...\n\r", ch); return; } if (ch->pcdata->favor < ch->level * 2) { send_to_pager("Your favor is insufficient for such assistance...\n\r", ch); return; } pager_printf(ch, "%s appears in a vision, revealing that your remains... ", ch->pcdata->deity->name); sprintf(buf, "the corpse of %s", ch->name); for (obj = first_object; obj; obj = obj->next) { if (obj->in_room && !str_cmp(buf, obj->short_descr) && (obj->pIndexData->vnum == 11)) { found = TRUE; pager_printf(ch, "\n\r - at %s will endure for %d ticks", obj->in_room->name, obj->timer); } } if (!found) send_to_pager(" no longer exist.\n\r", ch); else { send_to_pager("\n\r", ch); ch->pcdata->favor -= ch->level * 2; } return; } /* Affects-at-a-glance, Blodkai */ void do_affected(CHAR_DATA * ch, char *argument) { char arg[MIL]; AFFECT_DATA *paf; SKILLTYPE *skill; if (IS_NPC(ch)) return; set_char_color(AT_SCORE, ch); argument = one_argument(argument, arg); if (!str_cmp(arg, "by")) { send_to_char_color("\n\r&BImbued with:\n\r", ch); ch_printf_color(ch, "&C%s\n\r", !xIS_EMPTY(ch->affected_by) ? affect_bit_name(&ch->affected_by) : "nothing"); if (ch->level >= 10) { send_to_char("\n\r", ch); if (ch->resistant > 0) { send_to_char_color("&BResistances: ", ch); ch_printf_color(ch, "&C%s\n\r", flag_string(ch->resistant, ris_flags)); } if (ch->immune > 0) { send_to_char_color("&BImmunities: ", ch); ch_printf_color(ch, "&C%s\n\r", flag_string(ch->immune, ris_flags)); } if (ch->susceptible > 0) { send_to_char_color("&BSuscepts: ", ch); ch_printf_color(ch, "&C%s\n\r", flag_string(ch->susceptible, ris_flags)); } } return; } if (!ch->first_affect) { send_to_char_color("\n\r&CNo cantrip or skill affects you.\n\r", ch); } else { send_to_char("\n\r", ch); for (paf = ch->first_affect; paf; paf = paf->next) if ((skill = get_skilltype(paf->type)) != NULL) { set_char_color(AT_BLUE, ch); send_to_char("Affected: ", ch); set_char_color(AT_SCORE, ch); if (ch->level >= 10) { if (paf->duration < 25) set_char_color(AT_WHITE, ch); if (paf->duration < 6) set_char_color(AT_WHITE + AT_BLINK, ch); ch_printf(ch, "(%5d) ", paf->duration); } ch_printf(ch, "%-18s\n\r", skill->name); } } return; } void do_inventory(CHAR_DATA * ch, char *argument) { set_char_color(AT_RED, ch); send_to_char("You are carrying:\n\r", ch); show_list_to_char(ch->first_carrying, ch, TRUE, TRUE, eItemDrop); return; } /* Added support for nothing to show up -- Xerves 7/9/99 */ void do_equipment(CHAR_DATA * ch, char *argument) { OBJ_DATA *obj; int iWear; bool found; set_char_color(AT_RED, ch); send_to_char("You are using:\n\r", ch); found = FALSE; set_char_color(AT_OBJECT, ch); for (iWear = 0; iWear < MAX_WEAR; iWear++) { for (obj = ch->first_carrying; obj; obj = obj->next_content) if (obj->wear_loc == iWear) { if (iWear >= WEAR_LODGE_RIB && iWear <= WEAR_NOCKED) ch_printf(ch, "&R%s", where_name[iWear]); else send_to_char(where_name[iWear], ch); if (can_see_obj(ch, obj)) { send_to_char(format_obj_to_char(obj, ch, TRUE, FALSE), ch); set_char_color(AT_OBJECT, ch); send_to_char("\n\r", ch); } else send_to_char("something.\n\r", ch); found = TRUE; } /* Checks to see if char is using the slot -- Xerves */ if ((obj = get_eq_char(ch, iWear)) == NULL) { if (iWear >= WEAR_LODGE_RIB && iWear <= WEAR_NOCKED) continue; send_to_char(where_name[iWear], ch); send_to_char("&c&w* <Nothing>&G\n\r", ch); set_char_color(AT_OBJECT, ch); found = TRUE; } } if (!found) send_to_char("Nothing.\n\r", ch); return; } void set_title(CHAR_DATA * ch, char *title) { char buf[MSL]; if (IS_NPC(ch)) { bug("Set_title: NPC.", 0); return; } if (isalpha(title[0]) || isdigit(title[0])) { buf[0] = ' '; strcpy(buf + 1, title); } else strcpy(buf, title); STRFREE(ch->pcdata->title); ch->pcdata->title = STRALLOC(buf); return; } void do_title(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; set_char_color(AT_SCORE, ch); if (ch->level < 3) { send_to_char("Sorry... you must be at least level 3 to set your title...\n\r", ch); return; } if (IS_SET(ch->pcdata->flags, PCFLAG_NOTITLE)) { set_char_color(AT_IMMORT, ch); send_to_char("The Gods prohibit you from changing your title.\n\r", ch); return; } if (argument[0] == '\0') { send_to_char("Change your title to what?\n\r", ch); return; } if (strlen(argument) > 50) argument[50] = '\0'; smash_tilde(argument); set_title(ch, argument); send_to_char("Ok.\n\r", ch); } void do_homepage(CHAR_DATA * ch, char *argument) { char buf[MSL]; if (IS_NPC(ch)) return; if (ch->level < 3) { send_to_char("Sorry... you must be at least level 3 to do that.\n\r", ch); return; } if (argument[0] == '\0') { if (!ch->pcdata->homepage) ch->pcdata->homepage = str_dup(""); ch_printf(ch, "Your homepage is: %s\n\r", show_tilde(ch->pcdata->homepage)); return; } if (!str_cmp(argument, "clear")) { if (ch->pcdata->homepage) DISPOSE(ch->pcdata->homepage); ch->pcdata->homepage = str_dup(""); send_to_char("Homepage cleared.\n\r", ch); return; } if (strstr(argument, "://")) strcpy(buf, argument); else sprintf(buf, "http://%s", argument); if (strlen(buf) > 70) buf[70] = '\0'; hide_tilde(buf); if (ch->pcdata->homepage) DISPOSE(ch->pcdata->homepage); ch->pcdata->homepage = str_dup(buf); send_to_char("Homepage set.\n\r", ch); } /* * Set your personal description -Thoric */ void do_description(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) { send_to_char("Monsters are too dumb to do that!\n\r", ch); return; } if (!ch->desc) { bug("do_description: no descriptor", 0); return; } switch (ch->substate) { default: bug("do_description: illegal substate", 0); return; case SUB_RESTRICTED: send_to_char("You cannot use this command from within another command.\n\r", ch); return; case SUB_NONE: ch->substate = SUB_PERSONAL_DESC; ch->dest_buf = ch; start_editing(ch, ch->description); editor_desc_printf(ch, "Your description (%s)", ch->name); return; case SUB_PERSONAL_DESC: STRFREE(ch->description); ch->description = copy_buffer(ch); stop_editing(ch); return; } } /* Ripped off do_description for whois bio's -- Scryn*/ void do_bio(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) { send_to_char("Mobs cannot set a bio.\n\r", ch); return; } if (!ch->desc) { bug("do_bio: no descriptor", 0); return; } switch (ch->substate) { default: bug("do_bio: illegal substate", 0); return; case SUB_RESTRICTED: send_to_char("You cannot use this command from within another command.\n\r", ch); return; case SUB_NONE: ch->substate = SUB_PERSONAL_BIO; ch->dest_buf = ch; start_editing(ch, ch->pcdata->bio); editor_desc_printf(ch, "Your bio (%s).", ch->name); return; case SUB_PERSONAL_BIO: STRFREE(ch->pcdata->bio); ch->pcdata->bio = copy_buffer(ch); stop_editing(ch); return; } } /* * New stat and statreport command coded by Morphina * Bug fixes by Shaddai */ void do_statreport(CHAR_DATA * ch, char *argument) { char buf[MIL]; if (IS_NPC(ch)) { send_to_char("Huh?\n\r", ch); return; } if (IS_VAMPIRE(ch)) { ch_printf(ch, "You report: %d/%d hp %d/%d blood %d/%d mv.\n\r", ch->hit, ch->max_hit, ch->pcdata->condition[COND_BLOODTHIRST], 10 + ch->level, ch->move, ch->max_move); sprintf(buf, "$n reports: %d/%d hp %d/%d blood %d/%d mv.", ch->hit, ch->max_hit, ch->pcdata->condition[COND_BLOODTHIRST], 10 + ch->level, ch->move, ch->max_move); act(AT_REPORT, buf, ch, NULL, NULL, TO_ROOM); } else { ch_printf(ch, "You report: %d/%d hp %d/%d mana %d/%d mv.\n\r", ch->hit, ch->max_hit, ch->mana, ch->max_mana, ch->move, ch->max_move); sprintf(buf, "$n reports: %d/%d hp %d/%d mana %d/%d mv.", ch->hit, ch->max_hit, ch->mana, ch->max_mana, ch->move, ch->max_move); act(AT_REPORT, buf, ch, NULL, NULL, TO_ROOM); } ch_printf(ch, "Your base stats: %-2d str %-2d wis %-2d int %-2d dex %-2d con %-2d cha %-2d lck.\n\r", ch->perm_str, ch->perm_wis, ch->perm_int, ch->perm_dex, ch->perm_con, ch->perm_cha, ch->perm_lck); sprintf(buf, "$n's base stats: %-2d str %-2d wis %-2d int %-2d dex %-2d con %-2d cha %-2d lck.", ch->perm_str, ch->perm_wis, ch->perm_int, ch->perm_dex, ch->perm_con, ch->perm_cha, ch->perm_lck); act(AT_REPORT, buf, ch, NULL, NULL, TO_ROOM); ch_printf(ch, "Your current stats: %-2d str %-2d wis %-2d int %-2d dex %-2d con %-2d cha %-2d lck.\n\r", get_curr_str(ch), get_curr_wis(ch), get_curr_int(ch), get_curr_dex(ch), get_curr_con(ch), get_curr_cha(ch), get_curr_lck(ch)); sprintf(buf, "$n's current stats: %-2d str %-2d wis %-2d int %-2d dex %-2d con %-2d cha %-2d lck.", get_curr_str(ch), get_curr_wis(ch), get_curr_int(ch), get_curr_dex(ch), get_curr_con(ch), get_curr_cha(ch), get_curr_lck(ch)); act(AT_REPORT, buf, ch, NULL, NULL, TO_ROOM); return; } void do_stat(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) { send_to_char("Huh?\n\r", ch); return; } if (IS_VAMPIRE(ch)) ch_printf(ch, "You report: %d/%d hp %d/%d blood %d/%d mv.\n\r", ch->hit, ch->max_hit, ch->pcdata->condition[COND_BLOODTHIRST], 10 + ch->level, ch->move, ch->max_move); else ch_printf(ch, "You report: %d/%d hp %d/%d mana %d/%d mv.\n\r", ch->hit, ch->max_hit, ch->mana, ch->max_mana, ch->move, ch->max_move); ch_printf(ch, "Your base stats: %-2d str %-2d wis %-2d int %-2d dex %-2d con %-2d cha %-2d lck.\n\r", ch->perm_str, ch->perm_wis, ch->perm_int, ch->perm_dex, ch->perm_con, ch->perm_cha, ch->perm_lck); ch_printf(ch, "Your current stats: %-2d str %-2d wis %-2d int %-2d dex %-2d con %-2d cha %-2d lck.\n\r", get_curr_str(ch), get_curr_wis(ch), get_curr_int(ch), get_curr_dex(ch), get_curr_con(ch), get_curr_cha(ch), get_curr_lck(ch)); return; } void do_report(CHAR_DATA * ch, char *argument) { char buf[MIL]; if (IS_NPC(ch) && ch->fighting) return; if (IS_AFFECTED(ch, AFF_POSSESS)) { send_to_char("You can't do that in your current state of mind!\n\r", ch); return; } if (IS_VAMPIRE(ch)) ch_printf(ch, "You report: %d/%d hp %d/%d blood %d/%d mv.\n\r", ch->hit, ch->max_hit, ch->pcdata->condition[COND_BLOODTHIRST], 10 + ch->level, ch->move, ch->max_move); else ch_printf(ch, "You report: %d/%d hp %d/%d mana %d/%d mv.\n\r", ch->hit, ch->max_hit, ch->mana, ch->max_mana, ch->move, ch->max_move); if (IS_VAMPIRE(ch)) sprintf(buf, "$n reports: %d/%d hp %d/%d blood %d/%d mv.\n\r", ch->hit, ch->max_hit, ch->pcdata->condition[COND_BLOODTHIRST], 10 + ch->level, ch->move, ch->max_move); else sprintf(buf, "$n reports: %d/%d hp %d/%d mana %d/%d mv.", ch->hit, ch->max_hit, ch->mana, ch->max_mana, ch->move, ch->max_move); act(AT_REPORT, buf, ch, NULL, NULL, TO_ROOM); return; } void do_gprompt(CHAR_DATA * ch, char *argument) { set_char_color(AT_GREY, ch); if (IS_NPC(ch)) { send_to_char("NPC's can't change their group prompt..\n\r", ch); return; } if (argument[0] == '\0') { send_to_char("Syntax: gprompt <fight/both/off>\n\r", ch); return; } if (!str_cmp(argument, "fight")) ch->pcdata->gprompt = 0; else if (!str_cmp(argument, "both")) ch->pcdata->gprompt = 1; else if (!str_cmp(argument, "off")) ch->pcdata->gprompt = 2; else { do_gprompt(ch, ""); return; } } void do_fprompt(CHAR_DATA * ch, char *argument) { char arg[MIL]; set_char_color(AT_GREY, ch); if (IS_NPC(ch)) { send_to_char("NPC's can't change their prompt..\n\r", ch); return; } smash_tilde(argument); one_argument(argument, arg); if (!*arg || !str_cmp(arg, "display")) { send_to_char("Your current fighting prompt string:\n\r", ch); set_char_color(AT_WHITE, ch); ch_printf(ch, "%s\n\r", !str_cmp(ch->pcdata->fprompt, "") ? "(default prompt)" : ch->pcdata->fprompt); set_char_color(AT_GREY, ch); send_to_char("Type 'help prompt' for information on changing your prompt.\n\r", ch); return; } send_to_char("Replacing old prompt of:\n\r", ch); set_char_color(AT_WHITE, ch); ch_printf(ch, "%s\n\r", !str_cmp(ch->pcdata->fprompt, "") ? "(default prompt)" : ch->pcdata->fprompt); if (ch->pcdata->fprompt) STRFREE(ch->pcdata->fprompt); if (strlen(argument) > 128) argument[128] = '\0'; /* Can add a list of pre-set prompts here if wanted.. perhaps 'prompt 1' brings up a different, pre-set prompt */ if (!str_cmp(arg, "default")) ch->pcdata->fprompt = STRALLOC(""); else ch->pcdata->fprompt = STRALLOC(argument); return; } void do_prompt(CHAR_DATA * ch, char *argument) { char arg[MIL]; set_char_color(AT_GREY, ch); if (IS_NPC(ch)) { send_to_char("NPC's can't change their prompt..\n\r", ch); return; } smash_tilde(argument); one_argument(argument, arg); if (!*arg || !str_cmp(arg, "display")) { send_to_char("Your current prompt string:\n\r", ch); set_char_color(AT_WHITE, ch); ch_printf(ch, "%s\n\r", !str_cmp(ch->pcdata->prompt, "") ? "(default prompt)" : ch->pcdata->prompt); set_char_color(AT_GREY, ch); send_to_char("Type 'help prompt' for information on changing your prompt.\n\r", ch); return; } send_to_char("Replacing old prompt of:\n\r", ch); set_char_color(AT_WHITE, ch); ch_printf(ch, "%s\n\r", !str_cmp(ch->pcdata->prompt, "") ? "(default prompt)" : ch->pcdata->prompt); if (ch->pcdata->prompt) STRFREE(ch->pcdata->prompt); if (strlen(argument) > 128) argument[128] = '\0'; /* Can add a list of pre-set prompts here if wanted.. perhaps 'prompt 1' brings up a different, pre-set prompt */ if (!str_cmp(arg, "default")) ch->pcdata->prompt = STRALLOC(""); else ch->pcdata->prompt = STRALLOC(argument); return; } /* * Figured this belonged here seeing it involves players... * really simple little function to tax players with a large * amount of gold to help reduce the overall gold pool... * --TRI */ void tax_player(CHAR_DATA * ch) { /* int gold = ch->gold; int mgold = (ch->level * 2000000); int tax = (ch->gold * .05); if ( gold > mgold ) { set_char_color( AT_WHITE, ch ); ch_printf( ch, "You are level %d and carry more than %d coins.\n\r", ch->level, mgold ); ch_printf( ch, "You are being taxed \%5 percent (%d coins) of your %d coins,\n\r", tax, ch->gold ); ch_printf( ch, "and that leaves you with %d coins.\n\r", (ch->gold - tax)); ch->gold -= tax; } return; */ }