/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ /*************************************************************************** * ROM 2.4 is copyright 1993-1996 Russ Taylor * * ROM has been brought to you by the ROM consortium * * Russ Taylor (rtaylor@efn.org) * * Gabrielle Taylor * * Brian Moore (zump@rom.org) * * By using this code, you have agreed to follow the terms of the * * ROM license, in the file Rom24/doc/rom.license * ***************************************************************************/ /* * The abominable Alanthia score screen, and assorted adjudicantum. */ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #include <sys/time.h> #endif #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <time.h> #include "merc.h" #include "utils.h" #include "magic.h" #include "recycle.h" #include "tables.h" #include "lookup.h" #include "olc.h" DECLARE_DO_FUN(do_affects); void do_rp_score( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; BUFFER *buffer; buffer = new_buf(); sprintf(buf, "{W\r\n You are {G%s{W, a %s %s.\r\n", NAME(ch), SEX_NAME(ch), RACE_NAME(ch)); add_buf(buffer, buf); sprintf(buf, " You are a %s follower of %s.\r\n", DEVOTION_NAME(ch), GOD_NAME(ch)); add_buf(buffer, buf); sprintf(buf, " You are %s as a follower of %s.\r\n\r\n", ALIGN_FAME(ch), ALIGN_NAME(ch)); add_buf(buffer, buf); sprintf(buf, " {gAge: {W%6d {gHours: {W%5d " "{gMkills: {W%6ld{g\r\n", get_age(ch), (ch->played + (int) (current_time - ch->logon)) / 3600, (IS_NPC(ch) ? 0 : ch->pcdata->mkills)); add_buf(buffer, buf); sprintf(buf, " Wimpy: {W%6d {gDeaths: {W%6d " "{gPkills: {W%3ld{g\r\n\r\n", ch->wimpy, (IS_NPC(ch) ? 0 : ch->pcdata->deaths), (IS_NPC(ch) ? 0 : ch->pcdata->pkills)); add_buf(buffer, buf); sprintf(buf, " {cHp:{W %5ld{C/{W%5ld {cStr:%s %-14s " "{cHearing : %s\r\n", ch->hit, ch->max_hit, fill_color[get_curr_stat(ch, STAT_STR)], str_name[get_curr_stat(ch, STAT_STR)], get_sense_name(ch, SENSE_HEA)); add_buf(buffer, buf); sprintf(buf, " {cMn:{W %5ld{C/{W%5ld {cInt:%s %-14s " "{cSmell : %s\r\n", ch->mana, ch->max_mana, fill_color[get_curr_stat(ch, STAT_INT)], int_name[get_curr_stat(ch, STAT_INT)], get_sense_name(ch, SENSE_SME)); add_buf(buffer, buf); sprintf(buf, " {cMv:{W %5ld{C/{W%5ld {cWil:%s %-14s " "{cEyesight : %s\r\n", ch->move, ch->max_move, fill_color[get_curr_stat(ch, STAT_WIS)], wis_name[get_curr_stat(ch, STAT_WIS)], get_sense_name(ch, SENSE_SIG)); add_buf(buffer, buf); sprintf(buf, " {cBp:{W %5d{C/{W%5d {cDex:%s %-14s " "{cTaste : %s\r\n", ch->blood, ch->max_blood, fill_color[get_curr_stat(ch, STAT_DEX)], dex_name[get_curr_stat(ch, STAT_DEX)], get_sense_name(ch, SENSE_TAS)); add_buf(buffer, buf); sprintf(buf, " {cSz: {W%-3d fingers {cCon:%s %-14s " "{cTouch : %s\r\n", ch->size, fill_color[get_curr_stat(ch, STAT_CON)], con_name[get_curr_stat(ch, STAT_CON)], get_sense_name(ch, SENSE_TOU)); add_buf(buffer, buf); sprintf(buf, " " "{cPerception : %s\r\n\r\n", get_sense_name(ch, SENSE_PER)); add_buf(buffer, buf); sprintf(buf, "{W You are carrying {w10{W stone and {w4{W pebble out " "of a total {w100{W stoneweight.\r\n"); add_buf(buffer, buf); sprintf(buf, " You have %s on hand.\r\n", expand_cost(ch->gold)); add_buf(buffer, buf); page_to_char(buf_string(buffer), ch); free_buf(buffer); return; } void do_score(CHAR_DATA * ch, char *argument) { // a bunch of buffer buckets to make counting spaces // for formatting easier char buf[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; char buf3[MAX_STRING_LENGTH]; char buf4[MAX_STRING_LENGTH]; char buf5[MAX_STRING_LENGTH]; #define HOR_BAR " {g+----------------------------------------------------------------------------+\n\r" send_to_char("\n\r", ch); send_to_char(HOR_BAR, ch); // Level, Sex, PKILL Status sprintf(buf2, "%d", ch->level); sprintf(buf3, "%d (%d)", ch->level, get_trust(ch)); sprintf(buf4, "%s", ch->sex == 0 ? "Sexless" : ch->sex == 1 ? "Male" : "Female"); sprintf(buf5, "%s", IS_SET(ch->act, PLR_PKILL) ? "Yes" : "No"); sprintf(buf, " | {wLevel:{c %-15s {wSex :{m %-15s {wPkill :{y %-15s {g|\n\r", ch->level == get_trust(ch) ? buf2 : buf3, buf4, buf5 ); send_to_char(buf, ch); // Age, Race, Clan sprintf(buf2, "%d", get_age(ch)); sprintf(buf3, "%s", capitalize(ch->race->name)); sprintf(buf4, "%s", (!is_clan(ch) || clan_table[ch->clan].independent) ? "None" : clan_table[ch->clan].name ); sprintf(buf, " | {wAge :{c %-15s {wRace :{m %-15s {wClan :{y %-15s {g|\n\r", buf2, buf3, buf4); send_to_char(buf, ch); // Hours, Class, EXP sprintf(buf2, "%d", (ch->played + (int) (current_time - ch->logon)) / 3600); sprintf(buf3, "%s", IS_NPC(ch) ? "Mobile" : capitalize(class_table[ch->class].name)); sprintf(buf4, "%ld", ch->exp); sprintf(buf, " | {wHours:{c %-15s {wClass:{m %-15s {wTotal XP:{y %-15s {g|\n\r", buf2, buf3, buf4); send_to_char(buf, ch); send_to_char(HOR_BAR, ch); // HMVB sprintf(buf2, "{g%ld{w/{G%ld", ch->hit, ch->max_hit); sprintf(buf3, "{g%ld{w/{G%ld", ch->mana, ch->max_mana); sprintf(buf4, "{g%ld{w/{G%ld", ch->move, ch->max_move); sprintf(buf5, "{g%d{w/{G%d", ch->blood, ch->max_blood); if (DOESNT_USE_BLOOD(ch)) { sprintf(buf, " | {wHit : %-21s {wMana : %-21s {wMove : %-21s {g|\n\r", buf2, buf3, buf4); send_to_char(buf, ch); } else { sprintf(buf, " | {wHit: %-19s{w Mana: %-19s{w Mv: %-19s{w Bl: %-18s{g|\n\r", buf2, buf3, buf4, buf5); send_to_char(buf, ch); } // pracs, qwest, items send_to_char(HOR_BAR, ch); sprintf(buf2, "%d", ch->practice ); sprintf(buf3, "%d", (!IS_NPC(ch) ? ch->pcdata->qwest : 0)); sprintf(buf4, "%d/%d", ch->carry_number, can_carry_n(ch)); sprintf(buf, " | {wPracs:{c %-15s {wQwest:{m %-15s {wItems :{y %-15s {g|\n\r", buf2, buf3, buf4); send_to_char(buf, ch); // trains, gold, weight carried sprintf(buf2, "%d", ch->train); sprintf(buf3, "%ld", ch->gold); sprintf(buf4, "%d/%d", get_carry_weight(ch) / 10, can_carry_w(ch) / 10); sprintf(buf, " | {wTrain:{c %-15s {wGold :{m %-15s {wWeight :{y %-15s {g|\n\r", buf2, buf3, buf4); send_to_char(buf, ch); // hunger, thirst, drunk sprintf(buf2, "%s", (GET_HUNGER(ch) < 10 && GET_HUNGER(ch) > -1) ? "Yes" : "No"); sprintf(buf3, "%s", (GET_THIRST(ch) < 10 && GET_THIRST(ch) > -1) ? "Yes" : "No"); sprintf(buf4, "%s", GET_DRUNK(ch) > 0 ? "Yes" : "No"); sprintf(buf, " | {wHunger:{c %-15s{wThirst:{m %-15s {wDrunk :{y %-15s {g|\n\r", buf2, buf3, buf4); send_to_char(buf, ch); send_to_char(HOR_BAR, ch); // str int dex con wis sprintf(buf, " | {wStr: {g%2d{w({G%2d{w) Int: {g%2d{w({G%2d{w) Wis: {g%2d{w({G%2d{w) Dex: {g%2d{w({G%2d{w) Con: {g%2d{w({G%2d{w) {g|\n\r", ch->perm_stat[STAT_STR], get_curr_stat(ch, STAT_STR), ch->perm_stat[STAT_INT], get_curr_stat(ch, STAT_INT), ch->perm_stat[STAT_WIS], get_curr_stat(ch, STAT_WIS), ch->perm_stat[STAT_DEX], get_curr_stat(ch, STAT_DEX), ch->perm_stat[STAT_CON], get_curr_stat(ch, STAT_CON)); send_to_char(buf, ch); send_to_char(HOR_BAR, ch); // pierce, HR, deaths sprintf(buf2, "%d", GET_AC(ch, AC_PIERCE)); sprintf(buf3, "%d", GET_HITROLL(ch)); sprintf(buf4, "%d", IS_NPC(ch) ? 0 : ch->pcdata->deaths); sprintf(buf, " | {wPierce:{c %-14s{wHitroll:{m %-15s {wDeaths :{y %-15s {g|\n\r", buf2, buf3, buf4); send_to_char(buf, ch); // bash, damroll, pkills sprintf(buf2, "%d", GET_AC(ch, AC_BASH)); sprintf(buf3, "%d", GET_DAMROLL(ch)); sprintf(buf4, "%d", IS_NPC(ch) ? 0 : ch->pcdata->kills); sprintf(buf, " | {wBash :{c %-14s{wDamroll:{m %-15s {wPkills :{y %-15s {g|\n\r", buf2, buf3, buf4); send_to_char(buf, ch); // slash, wimpy, tnl sprintf(buf2, "%d", GET_AC(ch, AC_SLASH)); sprintf(buf3, "%d", ch->wimpy); sprintf(buf4, "%ld", IS_NPC(ch) ? 0 : ((ch->level + 1) * exp_per_level(ch, ch->pcdata->points) - ch->exp)); sprintf(buf, " | {wSlash :{c %-14s{wWimpy :{m %-15s {wTo Level:{y %-15s {g|\n\r", buf2, buf3, buf4); send_to_char(buf, ch); // magic, align, last lvl sprintf(buf2, "%d", GET_AC(ch, AC_EXOTIC)); sprintf(buf3, "%d", ch->alignment); sprintf(buf4, "%d", (IS_NPC(ch) ? 0 : ch->pcdata->last_level)); sprintf(buf, " | {wMagic :{c %-14s{wAlign :{m %-15s {wLast Lvl:{y %-15s {g|\n\r", buf2, buf3, buf4); send_to_char(buf, ch); sprintf(buf, " | {wRemort:{c %-13d {wSlots :{m %-15d {g|\n\r", ch->remorts, ch->slots); send_to_char(buf, ch); if (IS_IMMORTAL(ch)) { send_to_char(HOR_BAR, ch); sprintf(buf, " | {wHoly light: {g%-3s {wWiznet: {g%-3s {wWizi: {g%-3d {wIncog: {g%-3d {wSecurity: {g%-2d {g|\n\r", IS_SET(ch->act, PLR_HOLYLIGHT) ? "On" : "Off", IS_SET(ch->wiznet, WIZ_ON) ? "On" : "Off", ch->invis_level ? ch->invis_level : 0, ch->incog_level ? ch->incog_level : 0, IS_NPC(ch) ? 0 : ch->pcdata->security); send_to_char(buf, ch); } send_to_char(HOR_BAR, ch); send_to_char("\n\r{y", ch); if (IS_SET(ch->comm, COMM_SHOW_AFFECTS)) do_affects(ch, ""); send_to_char("{x", ch); return; }