#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 Stones, %d Pebbles) - ", ch->pcdata->carry_number, (ch->pcdata->carry_weight/WGT_MULT), (ch->pcdata->carry_weight % WGT_MULT)); send_to_char (buf, ch); { int weightmult = (get_curr_str(ch)+ (IS_AUGMENTED(ch, AUG_BODY_POWER) ? 2 : 0)+ (IS_AUGMENTED(ch, AUG_LEG_POWER) ? 2 : 0)+ (IS_AUGMENTED(ch, AUG_FOOT_POWER) ? 1 : 0))*WGT_MULT; if (ch->pcdata->carry_weight < weightmult) sprintf (buf, "You are unburdened.\n\r"); else if (ch->pcdata->carry_weight < (weightmult * 2)) sprintf (buf, "No problem. \n\r"); else if (ch->pcdata->carry_weight < (weightmult * 3)) sprintf (buf, "It is a tad heavy. \n\r"); else if (ch->pcdata->carry_weight < (weightmult * 4)) sprintf (buf, "It is heavy now. \n\r"); else if (ch->pcdata->carry_weight < (weightmult * 5)) sprintf (buf, "VERY heavy! \n\r"); else sprintf (buf, "YOU ARE IN 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) < MAX_LEVEL) tvict = ch; else if ((tvict = get_char_world (ch, argy)) == NULL) tvict = ch; if (tvict->affected != NULL) { send_to_char ("\x1B[1;37m---> \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 = 0; int wdam = 0; int bonushit = 0; SINGLE_OBJECT *w_one; if (IS_MOB (ch)) return 0; check_ced (ch); if ((w_one = ch->hold1) == NULL) wdam += 1; else { if (w_one->pIndexData->item_type == ITEM_WEAPON) { wdam += (FIRSTDICE (w_one) * SECONDDICE (w_one)) / 2; bonushit += addoffense2(ch, w_one); } else if (w_one->pIndexData->item_type == ITEM_GEM) { int color = TYPEMANA(w_one); wdam += (TOPMANA(w_one))/10; wdam += (TOPLEVEL(w_one))/10; if (IS_SET(color, MANA_AIR)) wdam++; if (IS_SET(color, MANA_FIRE)) wdam++; if (IS_SET(color, MANA_EARTH)) wdam++; if (IS_SET(color, MANA_WATER)) wdam++; if (IS_SET(color, MANA_SPIRIT)) wdam++; } else wdam +=1; } if ((w_one = ch->hold2) ==NULL) wdam += 1; else { if (w_one->pIndexData->item_type == ITEM_WEAPON) { wdam += (FIRSTDICE (w_one) * SECONDDICE (w_one)) / 2; bonushit += addoffense2(ch, w_one); } else if (w_one->pIndexData->item_type == ITEM_GEM) { int color = TYPEMANA(w_one); wdam += (TOPMANA(w_one))/10; wdam += (TOPLEVEL(w_one))/10; if (IS_SET(color, MANA_AIR)) wdam++; if (IS_SET(color, MANA_FIRE)) wdam++; if (IS_SET(color, MANA_EARTH)) wdam++; if (IS_SET(color, MANA_WATER)) wdam++; if (IS_SET(color, MANA_SPIRIT)) wdam++; } else wdam +=1; } h = ((GET_AC (ch)) / 3) + get_curr_str (ch) + get_curr_int (ch) + get_curr_dex (ch) + get_curr_con (ch) + get_curr_wis (ch) + (wdam * 4) + (ch->max_hit / 18) + (max_mana (ch) / 4) + ((LEVEL(ch)*3)/2) + bonushit + GET_HITROLL(ch) + (GET_DAMROLL (ch)) - (ch->pcdata->deaths); return h; } /* The attribute command */ void do_attribute (CHAR_DATA * ch, char *argy) { char buf[500]; DEFINE_COMMAND ("attribute", do_attribute, POSITION_DEAD, 0, LOG_NORMAL, "This command shows you various info about your character.") if (IS_MOB (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 (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"); send_to_char("\x1b[1;32m+\x1b[1;34m---------------------------------------\x1b[1;32m+\x1b[0;37m\n\r", ch); sprintf (buf, " Strength : \x1b[1;37m%-10s\x1b[0;37m\n\r",strg); send_to_char(buf, ch); sprintf (buf, " Constitution : \x1b[1;32m%-10s\x1b[0;37m\n\r",con); send_to_char(buf, ch); sprintf (buf, " Dexterity : \x1b[1;35m%-10s\x1b[0;37m\n\r",dex); send_to_char(buf, ch); sprintf (buf, " Intelligence : \x1b[1;33m%-10s\x1b[0;37m\n\r",inte); send_to_char(buf, ch); sprintf (buf, " Wisdom : \x1b[1;31m%-10s\x1b[0;37m\n\r", wis); send_to_char(buf, ch); send_to_char("\x1b[1;32m+\x1b[1;34m---------------------------------------\x1b[1;32m+\x1b[0;37m\n\r", ch); } else { send_to_char("\x1b[1;32m+\x1b[1;34m---------------------------------------\x1b[1;32m+\x1b[0;37m\n\r", ch); sprintf (buf, " Strength : \x1b[1;37m%d\x1b[0;37m\n\r",get_curr_str(ch)); send_to_char(buf, ch); sprintf (buf, " Constitution : \x1b[1;32m%d\x1b[0;37m\n\r",get_curr_con(ch)); send_to_char(buf, ch); sprintf (buf, " Dexterity : \x1b[1;35m%d\x1b[0;37m\n\r",get_curr_dex(ch)); send_to_char(buf, ch); sprintf (buf, " Intelligence : \x1b[1;33m%d\x1b[0;37m\n\r",get_curr_int(ch)); send_to_char(buf, ch); sprintf (buf, " Wisdom : \x1b[1;31m%d\x1b[0;37m\n\r", get_curr_wis(ch)); send_to_char(buf, ch); send_to_char("\x1b[1;32m+\x1b[1;34m---------------------------------------\x1b[1;32m+\x1b[0;37m\n\r", ch); } return; } 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) < MAX_LEVEL && 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) < MAX_LEVEL) 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[1;32m%d \x1B[37m[%s %s\x1B[37m] \x1B[0m%s %s\x1B[37;0m\n\r", LEVEL (tvict), align_info[tvict->pcdata->alignment].name, 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[1;34m Hitpts: \x1B[37m%5ld\x1B[34m/\x1B[36m%-5ld \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[1;34m TKills: \x1B[31m%-12d \x1B[34mKillPnts: \x1B[31m%-12d \x1B[34mWarPts: \x1B[31m%ld\n\r", tvict->pcdata->totalkills, tvict->pcdata->killpoints, tvict->pcdata->warpoints); send_to_char (buf, ch); sprintf (buf, "\x1B[1;34m 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[1;34m 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[1;34mHeight: \x1B[1;37m%d' %d\"\x1B[0m", tvict->height / 12, tvict->height % 12); sprintf (buf, "\x1B[1;34m 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\n\r", (tvict->pcdata->condition[COND_FULL] < 7 ? "\x1B[1;37m\x1B[5mHungry\x1B[0m" : " "), (tvict->pcdata->condition[COND_THIRST] < 7 ? "\x1B[1;37m\x1B[5mThirsty\x1B[0m" : " "), (tvict->pcdata->condition[COND_DRUNK] > 10 ? "\x1B[1;37m\x1B[5mDrunk\x1B[0m" : " ")); send_to_char (buf, ch); send_to_char ("+--------------------------------------------------------------------------+\n\r", ch); if (LEVEL(ch) >= pow.level_to_see_numeric_stats){ sprintf (buf, "\x1B[1;34m 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[1;37m%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[1;36m You are carrying \x1B[1;36m%d\x1B[0;37m Stones and \x1b[1;36m%d\x1b[0;37m Pebbles \x1B[0;37m(", (tvict->pcdata->carry_weight/WGT_MULT), (tvict->pcdata->carry_weight % WGT_MULT)); send_to_char (buf, ch); { int weightmult = (get_curr_str(tvict)+ (IS_AUGMENTED(tvict, AUG_BODY_POWER) ? 2 : 0)+ (IS_AUGMENTED(tvict, AUG_LEG_POWER) ? 2 : 0)+ (IS_AUGMENTED(tvict, AUG_FOOT_POWER) ? 1 : 0))*WGT_MULT; if (tvict->pcdata->carry_weight < weightmult) sprintf (buf, "You are unburdened.)\n\r"); else if (tvict->pcdata->carry_weight < (weightmult * 2)) sprintf (buf, "No problem.) \n\r"); else if (tvict->pcdata->carry_weight < (weightmult * 3)) sprintf (buf, "It is a tad heavy.) \n\r"); else if (tvict->pcdata->carry_weight < (weightmult * 4)) sprintf (buf, "It is heavy now.) \n\r"); else if (tvict->pcdata->carry_weight < (weightmult * 5)) sprintf (buf, "VERY heavy!) \n\r"); else sprintf (buf, "YOU ARE IN PAIN!) \n\r"); send_to_char (buf, ch); } sprintf(buf,"Elemental Shards: %s\n\r",elemental_alignment_bit_name(tvict->pcdata->elemental_alignment)); send_to_char(buf,ch); ii = clan_number (tvict); if (ii > 0) { sprintf (buf, " \x1B[37;0mMember of \x1B[1;36m%s\x1B[0;37m clan.\n\r", get_clan_index (ii)->name); send_to_char (buf, ch); } if (tvict->pcdata->guilds != 0) { show_guilds(ch, tvict->pcdata->guilds); } 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; } 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 (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, MAX_LEVEL, 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; }