#include <sys/types.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "emlen.h" bool wwrap = TRUE; char * string_mana_p (int mana) { static char ret[500]; ret[0] = '\0'; if (mana < 2) sprintf (ret, "Empty"); else if (mana < 11) sprintf (ret, "Icy"); else if (mana < 26) sprintf (ret, "Cold"); else if (mana < 84) sprintf (ret, "Warm"); else if (mana < 121) sprintf (ret, "Hot"); else sprintf (ret, "Burning"); return ret; } char * string_mana (int mana) { static char ret[500]; ret[0] = '\0'; if (mana < 2) sprintf (ret, "Empty"); else if (mana < 11) sprintf (ret, "Nearly Empty"); else if (mana < 26) sprintf (ret, "Some Energy"); else if (mana < 40) sprintf (ret, "Moderate Energy"); else if (mana < 67) sprintf (ret, "Powerful"); else if (mana < 92) sprintf (ret, "Very Powerful"); else if (mana < 114) sprintf (ret, "Extremely Powerful"); else if (mana < 144) sprintf (ret, "Sparking with Energy"); else if (mana < 195) sprintf (ret, "Extreme Magical Presence"); else sprintf (ret, "Incredible Magical Presence"); return ret; } void do_weight (CHAR_DATA * ch, char *argy) { char buf[STD_LENGTH]; DEFINE_COMMAND ("weight", do_weight, POSITION_DEAD, 0, LOG_NORMAL, "This command will show you a summary of how much weight you are carrying, and how hard it is to carry this weight.") sprintf (buf, "\x1B[37;0mYou are carrying %d items (Weight: %d kg) - ", ch->pcdata->carry_number, ch->pcdata->carry_weight); send_to_char (buf, ch); if (ch->pcdata->carry_weight < (get_curr_str (ch))) sprintf (buf, "You are unburdened.\n\r"); else if (ch->pcdata->carry_weight < (get_curr_str (ch) * 2)) sprintf (buf, "No problem carrying this weight.\n\r"); else if (ch->pcdata->carry_weight < (get_curr_str (ch) * 3)) sprintf (buf, "A tad heavy, but you will manage.\n\r"); else if (ch->pcdata->carry_weight < (get_curr_str (ch) * 4)) sprintf (buf, "Heavy, but not unbearable.\n\r"); else if (ch->pcdata->carry_weight < (get_curr_str (ch) * 5)) sprintf (buf, "VERY HEAVY! Each step hurts.\n\r"); else sprintf (buf, "You are trying to forget the pain!\n\r"); send_to_char (buf, ch); return; } void do_eeffect (CHAR_DATA * ch, char *argy) { DEFINE_COMMAND ("effect", do_affect, POSITION_DEAD, 0, LOG_NORMAL, "This command shows what current affects your character has.") return; } void do_affect (CHAR_DATA * ch, char *argy) { CHAR_DATA *tvict; AFFECT_DATA *paf; char buf[STD_LENGTH]; SPELL_DATA *spell; bool enlarge_yn; DEFINE_COMMAND ("affect", do_affect, POSITION_DEAD, 0, LOG_NORMAL, "This command shows what current affects your character has.") enlarge_yn = FALSE; if (argy == "" || argy[0] == '\0' || LEVEL (ch) < 110) tvict = ch; else if ((tvict = get_char_world (ch, argy)) == NULL) tvict = ch; if (tvict->affected != NULL) { send_to_char ("\x1B[37;1m---> \x1B[34mCurrent Affects \x1B[37m<---\x1B[37;0m\n\r\n\r", ch); for (paf = tvict->affected; paf != NULL; paf = paf->next) { if ((spell = skill_lookup (NULL, paf->type)) == NULL) continue; sprintf (buf, "%s", capitalize (spell->spell_funky_name)); send_to_char (buf, ch); if (IS_MOB (ch) || (LEVEL (ch) > 100)) sprintf (buf, " (modifies %s by %d for %d mud hours)\n\r", affect_loc_name (paf->location), paf->modifier, paf->duration); else { if (paf->duration > 50) sprintf (buf, ", which won't wear off for many days!\n\r"); else if (paf->duration > 30) sprintf (buf, ", which will wear off in a day or two.\n\r"); else if (paf->duration > 20) sprintf (buf, ", which will wear off in about a day.\n\r"); else if (paf->duration > 10) sprintf (buf, ", which will wear off in about half a day.\n\r"); else if (paf->duration > 6) sprintf (buf, ", which will wear off in about a quarter of a day.\n\r"); else if (paf->duration > 3) sprintf (buf, ", which will wear off in a few hours.\n\r"); else if (paf->duration > 1) sprintf (buf, ", which will wear off soon.\n\r"); else if (paf->duration == 1) sprintf (buf, ", which will wear off very soon.\n\r"); else sprintf (buf, ", which will wear off at any moment.\n\r"); } send_to_char (buf, ch); } send_to_char ("\n\r", ch); return; } else { send_to_char ("No affects present.\n\r", ch); return; } return; } int rating (CHAR_DATA * ch) { int h; int i; int topteny; int wdam; int bonushit; SINGLE_OBJECT *w_one; SINGLE_OBJECT *objt; topteny = 0; h = 0; wdam = 0; bonushit = 0; if (IS_MOB (ch)) return 0; check_ced (ch); if ((w_one = get_item_held (ch, ITEM_WEAPON)) == NULL) wdam = 1; else wdam = (FIRSTDICE (w_one) * SECONDDICE (w_one)) / 2; if ((objt = get_eq_char (ch, WEAR_HOLD_1)) != NULL) { if (objt->pIndexData->item_type == ITEM_WEAPON) { bonushit = addoffense (ch, objt); } else if (((objt = get_eq_char (ch, WEAR_HOLD_2)) != NULL) && (bonushit == 0)) if (objt->pIndexData->item_type == ITEM_WEAPON) { bonushit = addoffense (ch, objt); } } for (i = 0; i < 10; i++) { if (!str_cmp (NAME (ch), topten.topten_name[i])) topteny = 30; } h = (((100 - GET_AC (ch)) / 3) + get_curr_str (ch) + get_curr_int (ch) + get_curr_dex (ch) + get_curr_con (ch) + get_curr_wis (ch) + /*(ch->pcdata->totalkills/60) + */ /*(ch->pcdata->killpoints/20) + */ (wdam * 6) + (ch->max_hit / 40) + topteny + (max_mana (ch) / 5) + ((LEVEL (ch) * 3) / 2) + (ch->pcdata->learned[gsn_parry] == -100 ? 0 : ch->pcdata->learned[gsn_parry] / 18) + (ch->pcdata->learned[gsn_dodge] == -100 ? 0 : ch->pcdata->learned[gsn_dodge] / 18) + ((bonushit + GET_HITROLL (ch) + (LEVEL (ch) / 20) + get_curr_dex (ch) + (IS_SET (ch->ced->fight_ops, F_POWER) ? 0 : 2)) / 4) + (GET_DAMROLL (ch) + (IS_SET (ch->ced->fight_ops, F_POWER) ? 1 : 0) + (IS_SET (ch->ced->fight_ops, F_AGGRESSIVE) ? 2 : 0))) - (ch->pcdata->deaths / 2); return h; } /* The attribute command */ void do_attribute (CHAR_DATA * ch, char *argy) { int position; char buf[500]; DEFINE_COMMAND ("attribute", do_attribute, POSITION_DEAD, 0, LOG_NORMAL, "This command shows you various info about your character.") if (ch->in_room && ch->in_room->vnum >= 400 && ch->in_room->vnum < 500) { send_to_char ("Your stats have not been determined yet; you must finish character creation.\n\r", ch); return; } if (pow.professions && LEVEL (ch) < 20) { send_to_char ("You may see a full description of your stats at level 20.\n\r", ch); return; } if (LEVEL (ch) < pow.level_to_see_numeric_stats) { char strg[40]; char con[40]; char dex[40]; char wis[40]; char inte[40]; if (IS_MOB (ch)) return; if (ch->in_room && ch->in_room->vnum > 440 && ch->in_room->vnum < 600) { send_to_char ("You can not 'attribute' during character creation.\n\r", ch); return; } if (get_curr_str (ch) < 10) sprintf (strg, "Weakling"); else if (get_curr_str (ch) < 15) sprintf (strg, "Fairly Weak"); else if (get_curr_str (ch) < 18) sprintf (strg, "Well-Toned"); else if (get_curr_str (ch) < 21) sprintf (strg, "Very Strong"); else if (get_curr_str (ch) < 24) sprintf (strg, "Extremely Strong"); else if (get_curr_str (ch) < 26) sprintf (strg, "Incredibly Strong"); else sprintf (strg, "Superhuman"); if (get_curr_int (ch) < 10) sprintf (inte, "Brainless "); else if (get_curr_int (ch) < 15) sprintf (inte, "Pretty Dumb"); else if (get_curr_int (ch) < 18) sprintf (inte, "Moderately Intelligent"); else if (get_curr_int (ch) < 21) sprintf (inte, "Very Smart"); else if (get_curr_int (ch) < 24) sprintf (inte, "Extremely Smart"); else sprintf (inte, "Genius "); if (get_curr_con (ch) < 10) sprintf (con, "Flabby"); else if (get_curr_con (ch) < 15) sprintf (con, "Overweight"); else if (get_curr_con (ch) < 18) sprintf (con, "Average Constitution"); else if (get_curr_con (ch) < 21) sprintf (con, "Tough"); else if (get_curr_con (ch) < 24) sprintf (con, "Very Tough"); else sprintf (con, "Amazingly Durable"); if (get_curr_wis (ch) < 10) sprintf (wis, "No Common Sense"); else if (get_curr_wis (ch) < 15) sprintf (wis, "Ignorant"); else if (get_curr_wis (ch) < 18) sprintf (wis, "Good Common Sense"); else if (get_curr_wis (ch) < 21) sprintf (wis, "Very Wise"); else if (get_curr_wis (ch) < 24) sprintf (wis, "Extremely Wise "); else sprintf (wis, "Sage-Like "); if (get_curr_dex (ch) < 10) sprintf (dex, "Snail-Like"); else if (get_curr_dex (ch) < 15) sprintf (dex, "Lathargic"); else if (get_curr_dex (ch) < 18) sprintf (dex, "Average Dexterity"); else if (get_curr_dex (ch) < 21) sprintf (dex, "Above Average Dexterity"); else if (get_curr_dex (ch) < 24) sprintf (dex, "Very Quick"); else sprintf (dex, "Speed Demon"); position = ch->position; ch->position = POSITION_STANDING; act ("$B$2+$1---------------------------------------$2+", ch, NULL, NULL, TO_CHAR); sprintf (buf, "\x1B[37;0m Strength : $2$B%-10s\x1B[37;0m", strg); act (buf, ch, NULL, NULL, TO_CHAR); sprintf (buf, "\x1B[37;0m Constitution : $4$B%-10s\x1B[37;0m", con); act (buf, ch, NULL, NULL, TO_CHAR); sprintf (buf, "\x1B[37;0m Dexterity : $5$B%-10s\x1B[37;0m", dex); act (buf, ch, NULL, NULL, TO_CHAR); sprintf (buf, "\x1B[37;0m Intelligence : $B%-10s\x1B[37;0m", inte); act (buf, ch, NULL, NULL, TO_CHAR); sprintf (buf, "\x1B[37;0m Wisdom : $1$B%-10s", wis); act (buf, ch, NULL, NULL, TO_CHAR); act ("$B$2+$1---------------------------------------$2+", ch, NULL, NULL, TO_CHAR); send_to_char ("\x1B[37;0m", ch); ch->position = position; } else { position = ch->position; ch->position = POSITION_STANDING; act ("$B$2+$1---------------------------------------$2+", ch, NULL, NULL, TO_CHAR); sprintf (buf, "\x1B[37;0m Strength : $2$B%d\x1B[37;0m", get_curr_str (ch)); act (buf, ch, NULL, NULL, TO_CHAR); sprintf (buf, "\x1B[37;0m Constitution : $4$B%d\x1B[37;0m", get_curr_con (ch)); act (buf, ch, NULL, NULL, TO_CHAR); sprintf (buf, "\x1B[37;0m Dexterity : $5$B%d\x1B[37;0m", get_curr_dex (ch)); act (buf, ch, NULL, NULL, TO_CHAR); sprintf (buf, "\x1B[37;0m Intelligence : $B%d\x1B[37;0m", get_curr_int (ch)); act (buf, ch, NULL, NULL, TO_CHAR); sprintf (buf, "\x1B[37;0m Wisdom : $1$B%d", get_curr_wis (ch)); act (buf, ch, NULL, NULL, TO_CHAR); act ("$B$2+$1---------------------------------------$2+", ch, NULL, NULL, TO_CHAR); send_to_char ("\x1B[37;0m", ch); ch->position = position; } return; } /* 109 [(Good/Evil/Neutral) Racename] NAME TITLE +--------------------------------------------------------------------------+ Hitpts: 14000/14000 Movement: 10000/10000 Mana: 981/981 (24/24 natural) TExper: 49348394839 Exp2Levl: 49348394839 Played: 5933 hours TKills: 943743 Killpnts: 943843 Warpts: 99999 InBank: 49384933 MoneyNow: 91824884 PlrAge: 94 years CWimpy: 25 TRemorts: 0 PagLen: 24 Learns: 94 Practces: 500 Wanted/Not Wanted Hungry Thirsty Drunk +-------------------------------------------------------------------------+ Bonuses: Offensive: 100 Attack Power: 100 Evasion: 100 Str: 25 Int: 25 Wis: 25 Dex: 25 Con: 25 Alignmt: -9431 Status: Arena/Battleground/Normal Position: Sleeping/(flying/standing) +-------------------------------------------------------------------------+ You are carrying 9484kg (You are trying to forget the pain!) Armor Rating: You armor is superbly durable and tough! Member of The Mithril Knights of Xylar clan. Guilds: Ranger's Guild, Tinker's Guild, Assassin's Guild, Thief's Guild You are listening to Joe. */ void do_info (CHAR_DATA * ch, char *argy) { char buf[STD_LENGTH]; int ii; char tmpbuf[500]; CHAR_DATA *tvict; int bonushit; DEFINE_COMMAND ("information", do_info, POSITION_DEAD, 0, LOG_NORMAL, "This command shows you an info page about your character.") if (LEVEL (ch) < 110 && FIGHTING (ch) != NULL && !pow.score_while_fighting) { send_to_char ("You cannot info while fighting!\n\r", ch); return; } ansi_color (NTEXT, ch); bonushit = 0; if (argy == "" || argy[0] == '\0' || LEVEL (ch) < 110) tvict = ch; else { if ((tvict = get_char_world (ch, argy)) == NULL) tvict = ch; } /*if (IS_MOB(tvict)) { send_to_char("You may not INFO NPC's.\n\r",ch); return; } */ check_ced (tvict); check_ced (ch); sprintf (buf, "\x1B[32;1m%d \x1B[37m[%s %s\x1B[37m] \x1B[0m%s %s\x1B[37;0m\n\r", LEVEL (tvict), (IS_NEUTRAL (tvict) ? "\x1B[34mGood" : (IS_GOOD (tvict) ? "\x1B[36mGood" : "\x1B[30mEvil")), race_info[tvict->pcdata->race].name, NAME (tvict), tvict->pcdata->title); send_to_char (buf, ch); send_to_char ("+--------------------------------------------------------------------------+\n\r", ch); sprintf (buf, "\x1B[34;1m Hitpts: \x1B[37m%5d\x1B[34m/\x1B[36m%-5d \x1B[34mMovement: \x1B[37m%5d\x1B[34m/\x1B[36m%-5d\x1B[34m Mana: \x1B[37m%s\x1B[0m\n\r", tvict->hit, tvict->max_hit, tvict->move, tvict->max_move, string_mana (mana_now (tvict))); send_to_char (buf, ch); sprintf (buf, "\x1B[34;1m TKills: \x1B[31m%-12d \x1B[34mKillPnts: \x1B[31m%-12d \x1B[34mWarPts: \x1B[31m%d\n\r", tvict->pcdata->totalkills, tvict->pcdata->killpoints, tvict->pcdata->warpoints); send_to_char (buf, ch); sprintf (buf, "\x1B[34;1m InBank: \x1B[37m%-12ld \x1B[34mMoneyNow: \x1B[37m%-12d \x1B[34mPlrAge: \x1B[37m%d\n\r", tvict->pcdata->bank, tally_coins (tvict), get_age (tvict)); send_to_char (buf, ch); sprintf (buf, "\x1B[34;1m CWimpy: \x1B[37m%-12d \x1B[34mTRemorts: \x1B[37m%-12d \x1B[34mPagLen: \x1B[37m%d\x1B[0m\n\r", tvict->ced->wimpy, tvict->pcdata->remort_times, tvict->pcdata->pagelen); send_to_char (buf, ch); sprintf (tmpbuf, "\x1B[34;1mHeight: \x1B[37;1m%d' %d\"\x1B[0m", tvict->height / 12, tvict->height % 12); sprintf (buf, "\x1B[34;1m Learns: \x1B[37m%-12d \x1B[34mPractces: \x1B[37m%-12d \x1B[37;0m%s\n\r", tvict->pcdata->learn, tvict->pcdata->practice, tmpbuf); send_to_char (buf, ch); sprintf (buf, " %s %s %s %s\n\r", (tvict->pcdata->condition[COND_FULL] < 7 ? "\x1B[37;1m\x1B[5mHungry\x1B[0m" : " "), (tvict->pcdata->condition[COND_THIRST] < 7 ? "\x1B[37;1m\x1B[5mThirsty\x1B[0m" : " "), (tvict->pcdata->condition[COND_DRUNK] > 10 ? "\x1B[37;1m\x1B[5mDrunk\x1B[0m" : " "), (tvict->pcdata->bounty > 0 ? "\x1B[37;1mWanted Criminal\x1B[0m" : " ")); send_to_char (buf, ch); send_to_char ("+--------------------------------------------------------------------------+\n\r", ch); if (LEVEL (ch) > 100 && ch != tvict) { sprintf (buf, "\x1B[34;1m Str: \x1B[37m%-2d \x1B[34mInt: \x1B[37m%-2d \x1B[34mWis: \x1B[37m%-2d \x1B[34mDex: \x1B[37m%-2d \x1B[34mCon: \x1B[37m%-2d\x1B[37;0m Alignmt: \x1B[1m%d\n\r", get_curr_str (tvict), get_curr_int (tvict), get_curr_wis (tvict), get_curr_dex (tvict), get_curr_con (tvict), ALIGN (tvict)); send_to_char (buf, ch); } sprintf (buf, "\x1B[36;1m You are carrying \x1B[37;1m%d\x1B[36;1mkg \x1B[37;0m(", tvict->pcdata->carry_weight); send_to_char (buf, ch); if (tvict->pcdata->carry_weight < (get_curr_str (tvict))) sprintf (buf, "You are unburdened.)\n\r"); else if (tvict->pcdata->carry_weight < (get_curr_str (tvict) * 2)) sprintf (buf, "No problem carrying this weight.)\n\r"); else if (tvict->pcdata->carry_weight < (get_curr_str (tvict) * 3)) sprintf (buf, "A tad heavy, but you will manage.)\n\r"); else if (tvict->pcdata->carry_weight < (get_curr_str (tvict) * 4)) sprintf (buf, "Heavy, but not unbearable.)\n\r"); else if (tvict->pcdata->carry_weight < (get_curr_str (tvict) * 5)) sprintf (buf, "VERY HEAVY! Each step hurts!)\n\r"); else sprintf (buf, "You are trying to forget the pain!)\n\r"); send_to_char (buf, ch); ii = clan_number (tvict); if (ii > 0) { sprintf (buf, " \x1B[37;0mMember of \x1B[36;1m%s\x1B[37;0m clan.\n\r", get_clan_index (ii)->name); send_to_char (buf, ch); } if (tvict->pcdata->guilds != 0) { bool prev; prev = FALSE; send_to_char ("\x1B[37;0m Guild(s): \x1B[37;1m", ch); if (IS_SET (tvict->pcdata->guilds, GUILD_TINKER)) { send_to_char ("Tinker's Guild", ch); prev = TRUE; } if (IS_SET (tvict->pcdata->guilds, GUILD_WARRIOR)) { if (prev) send_to_char (", ", ch); send_to_char ("Warrior's Guild", ch); prev = TRUE; } if (IS_SET (tvict->pcdata->guilds, GUILD_HEALER)) { if (prev) send_to_char (", ", ch); send_to_char ("Healer's Guild", ch); prev = TRUE; } if (IS_SET (tvict->pcdata->guilds, GUILD_WIZARD)) { if (prev) send_to_char (", ", ch); send_to_char ("Wizard's Guild", ch); prev = TRUE; } if (IS_SET (tvict->pcdata->guilds, GUILD_THIEFG)) { if (prev) send_to_char (", ", ch); send_to_char ("Thief's Guild", ch); prev = TRUE; } if (IS_SET (tvict->pcdata->guilds, GUILD_RANGER)) { if (prev) send_to_char (", ", ch); send_to_char ("Ranger's Guild", ch); prev = TRUE; } if (IS_SET (tvict->pcdata->guilds, GUILD_ASSASSIN)) { if (prev) send_to_char (", ", ch); send_to_char ("Assassin's Guild", ch); prev = TRUE; } send_to_char ("\x1B[37;0m.\n\r", ch); } return; } void do_quickscore2 (CHAR_DATA * ch, char *argy) { DEFINE_COMMAND ("statistics", do_quickscore, POSITION_DEAD, 0, LOG_NORMAL, "This command shows a brief summary of your character.") return; } void do_quickscore (CHAR_DATA * ch, char *argy) { int pos; DEFINE_COMMAND ("sco", do_quickscore, POSITION_DEAD, 0, LOG_NORMAL, "This command shows a brief summary of your character.") if (FIGHTING (ch) && !pow.score_while_fighting) { send_to_char ("You cannot use this command during combat.\n\r", ch); return; } if (IS_JAVA(ch)) { java_package(ch); return; } pos = ch->position; ch->position = POSITION_STANDING; wwrap = FALSE; if (sh_score != NULL) act (interpret_line (sh_score, ch), ch, NULL, ch, TO_CHAR); else act (interpret_line (score, ch), ch, NULL, ch, TO_CHAR); wwrap = TRUE; ch->position = pos; return; } void do_vscore (CHAR_DATA * ch, char *argy) { int pos; DEFINE_COMMAND ("vscore", do_vscore, POSITION_DEAD, 0, LOG_NORMAL, "This command shows you complete information about your character.") if (IS_JAVA(ch)) { java_package(ch); return; } if (FIGHTING (ch) && !pow.score_while_fighting) { send_to_char ("You cannot use this command during combat.\n\r", ch); return; } pos = ch->position; ch->position = POSITION_STANDING; wwrap = FALSE; act (interpret_line (score, ch), ch, NULL, ch, TO_CHAR); wwrap = TRUE; ch->position = pos; return; } void do_score (CHAR_DATA * ch, char *argy) { int pos; DEFINE_COMMAND ("score", do_score, POSITION_DEAD, 0, LOG_NORMAL, "This command shows you complete information about your character.") if (FIGHTING (ch) && !pow.score_while_fighting) { send_to_char ("You cannot use this command during combat.\n\r", ch); return; } pos = ch->position; ch->position = POSITION_STANDING; wwrap = FALSE; act (interpret_line (score, ch), ch, NULL, ch, TO_CHAR); wwrap = TRUE; ch->position = pos; return; } void read_score (CHAR_DATA * ch, char *argy) { FILE *ff; DEFINE_COMMAND ("z_reload_score", read_score, POSITION_DEAD, 110, LOG_ALWAYS, "This command rereads score.dat from disk.") if (score) free (score); if (sh_score) free (sh_score); score = NULL; sh_score = NULL; if ((ff = fopen ("score.dat", "r")) == NULL) { fprintf (stderr, "Error on score.dat read.\n"); exit (20); } else { score = str_dup (fread_string2 (ff, NULL)); fclose (ff); } if ((ff = fopen ("sh_score.dat", "r")) == NULL) { fprintf (stderr, "Error on sh_score.dat read... generalizing to score.dat.\n"); sh_score = NULL; } else { sh_score = str_dup (fread_string2 (ff, NULL)); fclose (ff); } return; }