#include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "emlen.h" #define CTRL_R "" char update_char[400]; void do_afk (CHAR_DATA * ch, char *argy) { DEFINE_COMMAND ("afk", do_afk, POSITION_DEAD, 0, LOG_NORMAL, "This command logs you as away from the keyboard.") send_to_char ("You have been flagged as AFK. Typing any input will turn this off.\n\r", ch); send_to_char ("If you are away for too long, your character *will* autosave and autoquit.\n\r", ch); ch->timer = 50; return; } void upd_xp (CHAR_DATA * ch) { if (IS_PLAYER (ch) && ch->desc != NULL && IS_SET (ch->pcdata->act2, PLR_BLANKPROMPT)) { sprintf (update_char, "\x1B[%d;54fXp2L: \x1B[37;1m%ld\x1B[K\x1B[0m\x1B[%d;%df%s", ch->pcdata->pagelen - 1, ((FIND_EXP (ch->pcdata->level, ch->pcdata->race)) - ch->exp), ch->pcdata->pagelen - 3, 3 + strlen (ch->desc->inbuf), CTRL_R); write_to_descriptor2 (ch->desc, update_char, 0); } return; } void set_it_up (CHAR_DATA * ch) { if (IS_PLAYER (ch) && ch->desc != NULL && ch->pcdata->prompt == 2) { sprintf (update_char, "\x1B[2J\x1B[1;%dr\x1B[%d;1f\x1B[37;1;44m\x1B[2K", ch->pcdata->pagelen - 2, ch->pcdata->pagelen); send_to_char (update_char, ch); nupd_hps (ch); nupd_mps (ch); nupd_mana (ch); nupd_tps (ch); } if (IS_PLAYER (ch) && ch->desc != NULL && ch->pcdata->prompt == 1) { sprintf (update_char, "\x1B[2J\x1B[2;%dr\x1B[1;1f\x1B[37;1;44m\x1B[2K", ch->pcdata->pagelen); send_to_char (update_char, ch); nupd_hps (ch); nupd_mps (ch); nupd_mana (ch); nupd_tps (ch); } return; } #ifdef OLD_NOMOVE void scrn_upd (CHAR_DATA * ch) { if (IS_PLAYER (ch) && ch->desc != NULL && IS_SET (ch->pcdata->act2, PLR_BLANKPROMPT)) { sprintf (update_char, "\x1B[2J\x1B[1;%dr", ch->pcdata->pagelen - 3); write_to_descriptor2 (ch->desc, update_char, 0); sprintf (update_char, "\x1B[%d;1f-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-", ch->pcdata->pagelen - 2); write_to_descriptor2 (ch->desc, update_char, 0); upd_hps (ch); upd_mps (ch); upd_mana (ch); upd_xp (ch); upd_hunger (ch); upd_thirst (ch); } return; } void upd_hunger (CHAR_DATA * ch) { if (IS_PLAYER (ch) && ch->desc != NULL && IS_SET (ch->pcdata->act2, PLR_BLANKPROMPT)) { if (ch->pcdata->condition[COND_FULL] < 7) { sprintf (update_char, "\x1B[37;1m\x1B[%d;60f[Hungry]\x1B[%d;%df\x1B[0m%s", ch->pcdata->pagelen - 2, ch->pcdata->pagelen - 3, 3 + strlen (ch->desc->inbuf), CTRL_R); write_to_descriptor2 (ch->desc, update_char, 0); } else { sprintf (update_char, "\x1B[%d;60f=-=-=-=-=-\x1B[%d;%df%s", ch->pcdata->pagelen - 2, ch->pcdata->pagelen - 3, 3 + strlen (ch->desc->inbuf), CTRL_R); write_to_descriptor2 (ch->desc, update_char, 0); } } return; } void upd_hungert (CHAR_DATA * ch) { if (IS_PLAYER (ch) && ch->desc != NULL && IS_SET (ch->pcdata->act2, PLR_BLANKPROMPT)) { if (ch->pcdata->condition[COND_FULL] < 7) { sprintf (update_char, "\x1B[37;1m\x1B[%d;60f[Hungry]\x1B[%d;%df\x1B[0m%s", ch->pcdata->pagelen - 2, ch->pcdata->pagelen - 3, 3 + strlen (ch->desc->inbuf), CTRL_R); send_to_char (update_char, ch); } else { sprintf (update_char, "\x1B[%d;60f=-=-=-=-=-\x1B[%d;%df%s", ch->pcdata->pagelen - 2, ch->pcdata->pagelen - 3, 3 + strlen (ch->desc->inbuf), CTRL_R); send_to_char (update_char, ch); } } return; } void upd_thirst (CHAR_DATA * ch) { if (IS_PLAYER (ch) && ch->desc != NULL && IS_SET (ch->pcdata->act2, PLR_BLANKPROMPT)) { if (ch->pcdata->condition[COND_THIRST] < 7) { sprintf (update_char, "\x1B[37;1m\x1B[%d;70f[Thirsty]\x1B[%d;%df\x1B[0m%s", ch->pcdata->pagelen - 2, ch->pcdata->pagelen - 3, 3 + strlen (ch->desc->inbuf), CTRL_R); write_to_descriptor2 (ch->desc, update_char, 0); } else { sprintf (update_char, "\x1B[%d;70f=-=-=-=-=-\x1B[%d;%df%s", ch->pcdata->pagelen - 2, ch->pcdata->pagelen - 3, 3 + strlen (ch->desc->inbuf), CTRL_R); write_to_descriptor2 (ch->desc, update_char, 0); } } return; } #endif void nupd_tps (CHAR_DATA * ch) { if (IS_PLAYER (ch) && ch->desc != NULL && ch->pcdata->prompt == 2) { sprintf (update_char, "\x1B[%d;68f\x1B[37;1;44m Tps: %d \x1B[%d;1f\x1B[37;0m", ch->pcdata->pagelen, ch->pcdata->tps, ch->pcdata->pagelen - 2); send_to_char (update_char, ch); } if (IS_PLAYER (ch) && ch->desc != NULL && ch->pcdata->prompt == 1) { sprintf (update_char, "\x1B[1;68f\x1B[37;1;44m Tps: %d \x1B[%d;1f\x1B[37;0m", ch->pcdata->tps, ch->pcdata->pagelen); send_to_char (update_char, ch); } return; } void nupd_hps (CHAR_DATA * ch) { if (IS_PLAYER (ch) && ch->desc != NULL && ch->pcdata->prompt == 2) { sprintf (update_char, "\x1B[%d;1f\x1B[37;1;44m Hp: %s \x1B[%d;1f\x1B[37;0m", ch->pcdata->pagelen, STRING_HITS (ch), ch->pcdata->pagelen - 2); send_to_char (update_char, ch); } if (IS_PLAYER (ch) && ch->desc != NULL && ch->pcdata->prompt == 1) { sprintf (update_char, "\x1B[1;1f\x1B[37;1;44m Hp: %s \x1B[%d;1f\x1B[37;0m", STRING_HITS (ch), ch->pcdata->pagelen); send_to_char (update_char, ch); } return; } void nupd_mps (CHAR_DATA * ch) { if (IS_PLAYER (ch) && ch->desc != NULL && ch->pcdata->prompt == 2) { sprintf (update_char, "\x1B[%d;20f\x1B[37;1;44mMp: %s \x1B[%d;1f\x1B[37;0m", ch->pcdata->pagelen, STRING_MOVES (ch), ch->pcdata->pagelen - 2); send_to_char (update_char, ch); } if (IS_PLAYER (ch) && ch->desc != NULL && ch->pcdata->prompt == 1) { sprintf (update_char, "\x1B[1;20f\x1B[37;1;44mMp: %s \x1B[%d;1f\x1B[37;0m", STRING_MOVES (ch), ch->pcdata->pagelen); send_to_char (update_char, ch); } return; } void nupd_mana (CHAR_DATA * ch) { if (IS_PLAYER (ch) && ch->desc != NULL && ch->pcdata->prompt == 2) { sprintf (update_char, "\x1B[%d;44f\x1B[37;1;44mMana: %s \x1B[%d;1f\x1B[37;0m", ch->pcdata->pagelen, string_mana_p (mana_now (ch)), ch->pcdata->pagelen - 2); send_to_char (update_char, ch); } if (IS_PLAYER (ch) && ch->desc != NULL && ch->pcdata->prompt == 1) { sprintf (update_char, "\x1B[1;44f\x1B[37;1;44mMana: %s \x1B[%d;1f\x1B[37;0m", string_mana_p (mana_now (ch)), ch->pcdata->pagelen); send_to_char (update_char, ch); } return; } void upd_hps (CHAR_DATA * ch) { nupd_hps (ch); return; if (IS_PLAYER (ch) && ch->desc != NULL && IS_SET (ch->pcdata->act2, PLR_BLANKPROMPT)) { sprintf (update_char, "\x1B[%d;1fHp: \x1B[34;1m%d\x1B[32m/\x1B[34m%d \x1B[%d;%df\x1B[37;0m%s", ch->pcdata->pagelen, ch->hit, ch->max_hit, ch->pcdata->pagelen - 3, 3 + strlen (ch->desc->inbuf), CTRL_R); write_to_descriptor2 (ch->desc, update_char, 0); } return; } void upd_mps (CHAR_DATA * ch) { nupd_mps (ch); return; if (IS_PLAYER (ch) && ch->desc != NULL && IS_SET (ch->pcdata->act2, PLR_BLANKPROMPT)) { sprintf (update_char, "\x1B[%d;26fMp: \x1B[34;1m%d\x1B[32m/\x1B[34m%d \x1B[%d;%df\x1B[37;0m%s", ch->pcdata->pagelen, ch->move, ch->max_move, ch->pcdata->pagelen - 3, 3 + strlen (ch->desc->inbuf), CTRL_R); write_to_descriptor2 (ch->desc, update_char, 0); } return; } void upd_mana (CHAR_DATA * ch) { nupd_mana (ch); return; if (IS_PLAYER (ch) && ch->desc != NULL && IS_SET (ch->pcdata->act2, PLR_BLANKPROMPT)) { if (max_mana (ch) > ch->pcdata->n_max_mana) sprintf (update_char, "\x1B[%d;54fMana: \x1B[34;1m%d\x1B[32m/\x1B[34m%d \x1B[%d;%df\x1B[37;0m%s", ch->pcdata->pagelen, mana_now (ch), max_mana (ch), ch->pcdata->pagelen - 3, 3 + strlen (ch->desc->inbuf), CTRL_R); else sprintf (update_char, "\x1B[%d;54fMana: \x1B[34;1m%d\x1B[32m/\x1B[34m%d \x1B[%d;%df\x1B[37;0m%s", ch->pcdata->pagelen, ch->pcdata->n_mana, ch->pcdata->n_max_mana, ch->pcdata->pagelen - 3, 3 + strlen (ch->desc->inbuf), CTRL_R); write_to_descriptor2 (ch->desc, update_char, 0); } return; } void blank_prompt (CHAR_DATA * ch) { if (IS_MOB (ch)) return; if (IS_SET (ch->pcdata->act2, PLR_ANSI) && IS_SET (ch->pcdata->act2, PLR_BLANKPROMPT)) { sprintf (update_char, "\x1B[%d;%dr\x1B[J", ch->pcdata->pagelen - 2, ch->pcdata->pagelen); write_to_descriptor2 (ch->desc, update_char, 0); sprintf (update_char, "\x1B[1;%dr\x1B[%d;1f", ch->pcdata->pagelen - 3, ch->pcdata->pagelen - 3); write_to_descriptor2 (ch->desc, update_char, 0); } return; } void do_limited (CHAR_DATA * ch, char *argy) { int i; OBJ_PROTOTYPE *oid; int iHash; char arg1[128]; DEFINE_COMMAND ("limited", do_limited, POSITION_DEAD, 110, LOG_NORMAL, "This command can be used to modify and/or view limited objects in the game.") hugebuf_o[0] = '\0'; if (argy == "" || argy[0] == '\0') { send_to_char ("Limited items owned:\n\r", ch); for (i = 0; i < MAX_LIMITED; i++) { if (limited.limited_array[i] > 0) { if ((oid = get_obj_index (i)) == NULL) { limited.limited_array[i] = 0; } else { sprintf (hugebuf_o + strlen (hugebuf_o), "%5d [Owned: %2d] - %20s\x1B[37;0m\n\r", oid->vnum, limited.limited_array[i], oid->short_descr); } } } sprintf (hugebuf_o + strlen (hugebuf_o), "\n\rLimited items:\n\r"); for (iHash = 0; iHash < HASH_MAX; iHash++) { for (oid = obj_index_hash[iHash]; oid != NULL; oid = oid->next) { if (oid->how_many > 0) { sprintf (hugebuf_o + strlen (hugebuf_o), "%5d [Max %2d] - %20s\x1B[37;0m\n\r", oid->vnum, oid->how_many, oid->short_descr); if (strlen (hugebuf_o) > 29500) { hugebuf_o[29500] = '\0'; goto tooln; } } } } tooln: sprintf (hugebuf_o + strlen (hugebuf_o), "\n\r"); page_to_char (hugebuf_o, ch); return; } argy = one_argy (argy, arg1); if (is_number (arg1) && is_number (argy) && (i = atoi (arg1)) < MAX_LIMITED) { int amt; if (i < 0 || (amt = atoi (argy)) < 0) return; limited.limited_array[i] = amt; save_limited (i); send_to_char ("Set.\n\r", ch); } return; } void write_playerbase_to_file (void) { FILE *fff; char write_one_line[500]; PLAYERBASE_DATA *playerbase; int tps, np, rp, average_level, level_tot; tps = 0; np = 0; rp = 0; average_level = 0; level_tot = 0; if ((fff = fopen ("player.txt", "w+")) == NULL) { fprintf (stderr, "The write failed! Bad news!! VERY bad news!!!!\n\r"); return; } for (playerbase = playerbase_zero; playerbase != NULL; playerbase = playerbase->next) { if (playerbase->player_level != -1) { tps++; if (playerbase->player_level < 6) np++; if (playerbase->player_level > 190) rp++; level_tot += ((playerbase->player_level > 199) ? (playerbase->player_level - 200) : playerbase->player_level); sprintf (write_one_line, "%-17s R: %s Lvl: %3d Last_on: %4ld hrs NoD: %s\n", playerbase->player_name, (playerbase->player_level > 190 ? "y" : "n"), ((playerbase->player_level > 199) ? (playerbase->player_level - 200) : playerbase->player_level), ((current_time - playerbase->player_last_login) / 3600), (playerbase->player_nodelete ? "y" : "n")); fprintf (fff, write_one_line); } } if (tps == 0) average_level = 0; else average_level = level_tot / tps; fprintf (fff, "Total Playerbase size: %d. Max Playerbase size: Unlimited.\n\r", tps); fprintf (fff, "Newbies: %d. Remorted players: %d. Average Lvl: %d.\n\r", np, rp, average_level); fclose (fff); return; } void do_players (CHAR_DATA * ch, char *argy) { int tps, np, rp, average_level, level_tot; PLAYERBASE_DATA *playerbase; DEFINE_COMMAND ("players", do_players, POSITION_DEAD, 0, LOG_NORMAL, "This command lists the playerbase size, and gives some general info.") tps = 0; average_level = 0; level_tot = 0; np = 0; rp = 0; if (!str_cmp (argy, "file") && ch->pcdata->level > 109) write_playerbase_to_file (); for (playerbase = playerbase_zero; playerbase != NULL; playerbase = playerbase->next) { if (playerbase->player_level != -1) { if (playerbase->player_level > 99 && playerbase->player_level < 120) continue; tps++; if (playerbase->player_level < 6) np++; if (playerbase->player_level > 190) rp++; level_tot += ((playerbase->player_level > 199) ? (playerbase->player_level - 200) : playerbase->player_level); } } if (tps == 0) average_level = 0; else average_level = level_tot / tps; sprintf (update_char, "Total Playerbase size: \x1B[1m%d\x1B[0m. Max Playerbase size: \x1B[1mUnlimited\x1B[0m.\n\r", tps); send_to_char (update_char, ch); sprintf (update_char, "Newbies: \x1B[1m%d\x1B[0m. Average Lvl: \x1B[1m%d\x1B[0m.\n\r", np, average_level); send_to_char (update_char, ch); return; } void do_pdelete (CHAR_DATA * ch, char *argy) { PLAYERBASE_DATA *playerbase; CHAR_DATA *ccc; DEFINE_COMMAND ("pdelete", do_pdelete, POSITION_DEAD, 110, LOG_ALWAYS, "This command is used to delete characters.") if (IS_MOB (ch)) return; if (!IS_REAL_GOD (ch)) { return; } if (argy == "" || argy[0] == '\0') { send_to_char ("Syntax is PDELETE <playername>.\n\r", ch); return; } ccc = get_char_world (ch, argy); if (ccc != NULL && IS_PLAYER (ccc)) { do_delete (ccc, "character forever"); } for (playerbase = playerbase_zero; playerbase != NULL; playerbase = playerbase->next) { if (!str_cmp (argy, playerbase->player_name)) { sprintf (update_char, "%s%s.cor", PLAYER_DIR, playerbase->player_name); unlink (update_char); sprintf (update_char, "%s%s.p", PLAYER_DIR, playerbase->player_name); unlink (update_char); sprintf (update_char, "%s%s.tro", PLAYER_DIR, playerbase->player_name); unlink (update_char); sprintf (update_char, "%s%s", PLAYER_DIR, playerbase->player_name); unlink (update_char); /* sprintf(update_char,"rm \"%s%s\" &",PLAYER_DIR,jumble_name(playerbase->player_name,FALSE)); system(update_char); */ playerbase->player_level = -1; send_to_char ("Character deleted!\n\r", ch); save_playerbase (); return; } } send_to_char ("Player not found.\n\r", ch); return; } void do_nodelete (CHAR_DATA * ch, char *argy) { PLAYERBASE_DATA *playerbase; DEFINE_COMMAND ("z_nodelete", do_nodelete, POSITION_DEAD, 110, LOG_ALWAYS, "This toggles a no delete flag on/off for a given player.") if (argy == "" || argy[0] == '\0') { char line[3][17]; char outbuf[200]; line[0][0] = '\0'; line[1][0] = '\0'; line[2][0] = '\0'; send_to_char ("Syntax is NODELETE <charname>.\n\r", ch); send_to_char ("\n\rCurrent no_delete flags on:\n\r", ch); for (playerbase = playerbase_zero; playerbase != NULL; playerbase = playerbase->next) { if (playerbase->player_level == -1) continue; if (playerbase->player_nodelete) { if (line[0][0] == '\0') strcpy (line[0], playerbase->player_name); else if (line[1][0] == '\0') strcpy (line[1], playerbase->player_name); else if (line[2][0] == '\0') strcpy (line[2], playerbase->player_name); else { sprintf (outbuf, "%17s %17s %17s\n\r", line[0], line[1], line[2]); send_to_char (outbuf, ch); strcpy (line[0], playerbase->player_name); line[1][0] = '\0'; line[2][0] = '\0'; } } } sprintf (outbuf, "%17s %17s %17s\n\r", (line[0][0] == '\0' ? " " : line[0]), (line[1][0] == '\0' ? " " : line[1]), (line[2][0] == '\0' ? " " : line[2])); send_to_char (outbuf, ch); return; } for (playerbase = playerbase_zero; playerbase != NULL; playerbase = playerbase->next) { if (!str_cmp (argy, playerbase->player_name)) { if (playerbase->player_nodelete) { send_to_char ("PLAYER NOW CAN BE DELETED AFTER INACTIVITY!\n\r", ch); playerbase->player_nodelete = FALSE; save_playerbase (); return; } else { send_to_char ("Player is now safe from inactivity deletion.\n\r", ch); playerbase->player_nodelete = TRUE; save_playerbase (); return; } } } send_to_char ("I could not find that player in the database.\n\r", ch); return; } void show_remort (CHAR_DATA * ch) { send_to_char ("You should read help Transform first, before you go any further.\n\r", ch); send_to_char ("\n\rThe correct syntax for transforming is:\n\r", ch); send_to_char ("Transform <\x1B[37;1mstat\x1B[0m> <\x1B[37;1mstat\x1B[0m> <\x1B[37;1mstat\x1B[0m> <\x1B[37;1mstat\x1B[0m> <\x1B[37;1mstat\x1B[0m> <\x1B[34;1mdam\x1B[37;0m/\x1B[34;1mprac\x1B[37;0m>\n\r", ch); send_to_char ("<stat> is STR, DEX, CON, WIS, INT and last argy is DAM or PRAC.\n\r", ch); send_to_char ("\n\rDAM = +2 to attack power bonus perm. PRAC = +25 pracs to begin with.\n\r", ch); return; }