/*Offline Player editor */ #include <sys/types.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "emlen.h" char *itoa (int); /* True is character is fine with payment, false if not. */ char * augmentss (int augment) { int num; static char tttb[256]; bool prev = FALSE; tttb[0] = '\0'; for (num = 0 ; str_cmp (augment_flagss[num].what_you_type, "end_of_list"); num++) { if (IS_SET(augment, augment_flagss[num].flagname)) { if (prev) strcat (tttb, ","); strcat (tttb, augment_flagss[num].how_it_appears); prev = TRUE; } } if (tttb[0] == '\0') strcat (tttb, "None"); return tttb; } char * itoa (int n) { static char t[50]; sprintf (t, "%d", n); return t; } char * natural_abilities (int affect) { int num; static char tttb[256]; bool prev = FALSE; tttb[0] = '\0'; for (num = 0 ; str_cmp (affect_flagss[num].what_you_type, "end_of_list"); num++) { if (IS_SET(affect, affect_flagss[num].flagname)) { if (prev) strcat (tttb, ","); strcat (tttb, affect_flagss[num].how_it_appears); prev = TRUE; } } if (tttb[0] == '\0') strcat (tttb, "None"); return tttb; } char * natural_abilities2 (int affect) { int num; static char tttb[256]; bool prev = FALSE; tttb[0] = '\0'; for (num = 0 ; str_cmp(affect_flags_2[num].what_you_type,"end_of_list"); num++) { if (IS_SET(affect, affect_flags_2[num].flagname)) { if (prev) strcat (tttb, ","); strcat (tttb, affect_flags_2[num].how_it_appears); prev = TRUE; } } if (tttb[0] == '\0') strcat (tttb, "None"); return tttb; } void show_player (CHAR_DATA * god, CHAR_DATA * victim) { char buf[1024]; sprintf (buf, "[\x1B[1;35m%d\x1B[37;0m] Name: \x1B[1;37m%s\x1B[37;0m (\x1B[1;37m%s #%d\x1B[37;0m) Gender: %s Email: %s\n\r", LEVEL (victim), NAME (victim), race_info[victim->pcdata->race].name, victim->pcdata->race, (victim->pcdata->sex == SEX_MALE ? "M" : victim->pcdata->sex == SEX_FEMALE ? "F" : "N"), victim->pcdata->email); send_to_char (buf, god); sprintf (buf, "Align: %d Remorts: %d NatAC: %d Deaths: %d Warpts: %ld Height: %d\n\r", victim->pcdata->alignment, victim->pcdata->remort_times, victim->pcdata->nat_armor, victim->pcdata->deaths, victim->pcdata->warpoints, victim->height); send_to_char (buf, god); sprintf (buf, "Clan: %s Clan2: %s Room #%d BankMoney: %ld Pracs: %d Learns: %d\n\r", (clan_number (victim) < 0) ? "None" : (itoa (clan_number (victim))), (clan_number_2 (victim) < 0) ? "None" : (itoa (clan_number_2 (victim))), (victim->in_room ? victim->in_room->vnum : 0), victim->pcdata->bank, victim->pcdata->practice, victim->pcdata->learn); send_to_char (buf, god); sprintf (buf, "Total kills: %d Kill points: %d HP: \x1B[1;37m%ld/%ld\x1B[37;0m MV: \x1B[1;37m%d/%d\x1B[37;0m\n\r", victim->pcdata->totalkills, victim->pcdata->killpoints, victim->hit, victim->max_hit, victim->move, victim->max_move); send_to_char (buf, god); sprintf (buf, "Hitroll: %d Damroll: %d Thirst: %d/50 Full: %d/50 Drunk: %d/0\n\r", GET_HITROLL (victim), GET_DAMROLL (victim), victim->pcdata->condition[COND_THIRST], victim->pcdata->condition[COND_FULL], victim->pcdata->condition[COND_DRUNK]); send_to_char (buf, god); sprintf (buf, "Saving_throw: %d Items Car: %d Weight Car: %d Stones, %d Pebbles Age: %d Dntn: %d\n\r", victim->pcdata->saving_throw, victim->pcdata->carry_number, (victim->pcdata->carry_weight/WGT_MULT),(victim->pcdata->carry_weight % WGT_MULT), get_age (victim), victim->pcdata->donated); send_to_char (buf, god); sprintf (buf, "\x1B[1;34m----- Stats and Extras ------------ (%s) ----------\x1B[37;0m\n\r", victim->desc ? "Player currently online" : "Player not logged in"); send_to_char (buf, god); sprintf (buf, "Str: %2d/%2d Con: %2d/%2d Dex: %2d/%2d Int: %2d/%2d Wis: %2d/%2d\n\r", get_curr_str (victim), victim->pcdata->stat[0], get_curr_con (victim), victim->pcdata->stat[4], get_curr_dex (victim), victim->pcdata->stat[3], get_curr_int (victim), victim->pcdata->stat[1], get_curr_wis (victim), victim->pcdata->stat[2]); send_to_char (buf, god); sprintf (buf, "Use Smd, Cmd, Dmd, Imd, and Wmd to set stat modifiers. Exp: %ld\n\r", victim->exp); send_to_char (buf, god); if (victim->pcdata->cool_skills != 0) { bool prev; prev = FALSE; send_to_char ("Cool Skills: ", god); send_to_char (".\n\r", god); } if (victim->pcdata->nat_abilities != 0) { bool prev; prev = FALSE; send_to_char ("Natural Abilities: ", god); send_to_char (natural_abilities (victim->pcdata->nat_abilities), god); send_to_char (".\n\r", god); send_to_char ("Natural Abilities2: ", god); send_to_char (natural_abilities2 (victim->pcdata->nat_abilities2), god); send_to_char (".\n\r", god); send_to_char ("Augments: ", god); send_to_char (augmentss (victim->pcdata->augments), god); send_to_char (".\n\r", god); } show_guilds (god, victim->pcdata->guilds); send_to_char ("Type EXTRA to see more data. Other bits: ", god); if (IS_SET (victim->pcdata->act2, PLR_SILENCE)) { send_to_char ("Silenced ", god); } if (IS_SET (victim->act, PLR_FREEZE)) { send_to_char ("Frozen ", god); } if (IS_SET(victim->act, ACT_CRASHER)) { send_to_char ("Crasher ", god); } if (IS_SET (victim->act, ACT_UNVAL)) { send_to_char ("UNVALIDATED ", god); } send_to_char ("\n\r", god); return; } void show_extras (CHAR_DATA * god, CHAR_DATA * victim) { int i = 0; int tt; SINGLE_OBJECT *prev; SINGLE_OBJECT *obj; SPELL_DATA *s; hugebuf_o[0] = '\0'; strcpy (hugebuf_o, "\x1B[1;37mSkills...\x1B[37;0m"); for (tt = 0; tt < SKILL_COUNT; tt++) { if (victim->pcdata->learned[tt] > 0) { if ((s = skill_lookup (NULL, tt)) != NULL) { if (i % 2 == 0) strcat (hugebuf_o, "\n\r"); i++; sprintf (hugebuf_o + strlen (hugebuf_o), " [%17s #%3d %3d%%] ", s->spell_name, tt, victim->pcdata->learned[tt]); } } } strcat (hugebuf_o, "\n\r"); strcat (hugebuf_o, "\x1B[1;37m\n\rInventory...\x1B[37;0m"); prev = FALSE; i = 0; for (obj = victim->carrying; obj != NULL; obj = obj->next_content) { if (i % 11 == 0) strcat (hugebuf_o, "\n\r"); i++; if (obj->wear_loc == -1) sprintf (hugebuf_o + strlen (hugebuf_o), "%-6d ", obj->pIndexData->vnum); else sprintf (hugebuf_o + strlen (hugebuf_o), "*%-5d ", obj->pIndexData->vnum); } strcat (hugebuf_o, "\n\r"); i = 0; strcat (hugebuf_o, "\x1B[1;37m\n\rStorage...\x1B[37;0m"); prev = FALSE; for (tt = 0; tt < MAXST; tt++) { if (victim->pcdata->storage[tt] == NULL) continue; if (i % 11 == 0) strcat (hugebuf_o, "\n\r"); i++; sprintf (hugebuf_o + strlen (hugebuf_o), "%6d ", victim->pcdata->storage[tt]->pIndexData->vnum); } strcat (hugebuf_o, "\n\r"); page_to_char (hugebuf_o, god); return; } void pedit (CHAR_DATA * ch, char *argy) { CHAR_DATA *victim; char buf[1024]; char arg1[512]; char arg2[512]; char arg3[512]; char arg4[512]; static char store_arg[SML_LENGTH]; int value; strcpy (store_arg, argy); victim = (CHAR_DATA *) ch->desc->pEdit; if (!victim) { ch->desc->connected = CON_PLAYING; ch->desc->pEdit = NULL; return; } arg1[0] = '\0'; arg2[0] = '\0'; arg3[0] = '\0'; arg4[0] = '\0'; value = -1; argy = one_argy (argy, arg1); if (arg1[0] == '\0' || !str_cmp (arg1, "show")) { show_player (ch, victim); return; } if (!str_prefix ("extra", arg1)) { show_extras (ch, victim); return; } if (argy && argy != "") argy = one_argy (argy, arg2); if (argy && argy != "") argy = one_argy (argy, arg3); if (argy && argy != "") argy = one_argy (argy, arg4); if (arg2[0] == '-') value = atoi (arg2); else value = is_number (arg2) ? atoi (arg2) : -1; if (!str_prefix ("valid", arg1)) { if (IS_SET (victim->act, ACT_UNVAL)) REMOVE_BIT (victim->act, ACT_UNVAL); else SET_BIT (victim->act, ACT_UNVAL); send_to_char ("Validated flag toggled.\n\r", ch); if(victim->pcdata->level == 0) victim->pcdata->level = 1; return; } if (!str_prefix ("lamer", arg1)) { if (IS_SET (victim->act, PLR_LAMER)) REMOVE_BIT (victim->act, PLR_LAMER); else SET_BIT (victim->act, PLR_LAMER); send_to_char ("Lamer flag toggled.\n\r", ch); return; } if (!str_prefix ("frozen", arg1) || !str_prefix("freeze", arg1)) { if (IS_SET (victim->act, PLR_FREEZE)) REMOVE_BIT (victim->act, PLR_FREEZE); else SET_BIT (victim->act, PLR_FREEZE); send_to_char ("Freeze flag toggled.\n\r", ch); return; } if (!str_cmp (arg1, "height") && value >= 0) { if (value < 1 || value > 32000) { send_to_char ("Valid range for height is 1 - 32000.\n\r", ch); return; } victim->height = value; send_to_char ("Victim height set.\n\r", ch); return; } if (!str_cmp (arg1, "name") && arg2[0] != '\0') { sprintf (buf, "%s%s", PLAYER_DIR, NAME (victim)); unlink (buf); free_string (victim->pcdata->name); victim->pcdata->name = str_dup (capitalize (arg2)); save_char_obj (victim); send_to_char ("Name changed.\n\r", ch); return; } if (!str_cmp (arg1, "race") && value >= 0 && value < RACE_COUNT) { raceswitch(victim, value); send_to_char ("Race changed.\n\r", ch); return; } if (!str_cmp (arg1, "sex") && value >= 0 && value < 3) { victim->pcdata->sex = value; send_to_char ("Victim's sex set.\n\r", ch); return; } if (!str_prefix ("remort", arg1) && value >= 0) { victim->pcdata->remort_times = value; send_to_char ("Victim remort times set.\n\r", ch); return; } if (!str_cmp(arg1, "password") && arg2[0] != '\0' && strlen(arg2) > 4) { char buff[100]; char *pwdnew; char *p; free_string(pwdnew); pwdnew = arg2; for (p = pwdnew; *p != '\0'; p++) { if (*p == '~') { send_to_char("The new password is not acceptable, try again.\n\r", ch); return; } } free_string(victim->pcdata->pwd); victim->pcdata->pwd = str_dup(pwdnew); if (victim->pcdata->rpwd) free_string(victim->pcdata->rpwd); victim->pcdata->rpwd = str_dup(arg2); sprintf(buff, "Ok password reset to crypt of %s \n\r", arg2); send_to_char(buff, ch); return; } if (!str_cmp ("email", arg1) && arg2[0] != '\0') { strcpy (victim->pcdata->email, arg2); send_to_char ("Victim email set.\n\r", ch); return; } if (!str_prefix ("nat", arg1) && value != -1) { victim->pcdata->nat_armor = value; send_to_char ("Victim natural armor set.\n\r", ch); return; } if (!str_prefix ("death", arg1) && value >= 0) { victim->pcdata->deaths = value; send_to_char ("Victim deaths set.\n\r", ch); return; } if (!str_prefix ("war", arg1) && value >= 0) { victim->pcdata->warpoints = value; send_to_char ("Victim warpoints set.\n\r", ch); return; } if (!str_cmp ("room", arg1) && value > 1) { CHAR_DATA *ii; ROOM_DATA *rd; for (ii = char_list; ii != NULL; ii = ii->next) { if (ii == victim) { send_to_char ("You can't change a player's room while they are online!\n\r", ch); return; } } if ((rd = get_room_index (value)) == NULL) { send_to_char ("That room doesn't exist.\n\r", ch); return; } victim->in_room = rd; send_to_char ("Victim in_room changed.\n\r", ch); return; } if (!str_cmp ("bank", arg1) && value >= 0) { victim->pcdata->bank = value; send_to_char ("Victim bank amount set.\n\r", ch); return; } if (!str_prefix ("prac", arg1) && value >= 0) { victim->pcdata->practice = value; send_to_char ("Victim practices set.\n\r", ch); return; } if (!str_prefix ("learn", arg1) && value >= 0) { victim->pcdata->learn = value; send_to_char ("Victim learns set.\n\r", ch); return; } if ((!str_cmp ("tkills", arg1) || !str_cmp ("kills", arg1)) && value >= 0) { victim->pcdata->totalkills = value; send_to_char ("Total kills set.\n\r", ch); return; } if ((!str_cmp ("kpts", arg1) || !str_prefix ("killpo", arg1)) && value >= 0) { victim->pcdata->killpoints = value; send_to_char ("Killpoints set.\n\r", ch); return; } if (!str_cmp ("ac", arg1)) { if (str_cmp ("yes", arg2)) { send_to_char ("Make sure the chracter is NAKED before you do this, and that\n\r", ch); send_to_char ("NO AFFECTS are present on him/her (use noaffect). Then type ac yes\n\r", ch); return; } victim->armor = 100; send_to_char ("Victim's armor set to 100.\n\r", ch); return; } if (!str_cmp ("hpnow", arg1) && value >= 0) { victim->hit = value; send_to_char ("Hit points now set.\n\r", ch); return; } if (!str_cmp ("hp", arg1) && value >= 0) { victim->max_hit = value; send_to_char ("Hit points max set.\n\r", ch); return; } if (!str_cmp ("mvnow", arg1) && value >= 0) { victim->move = value; send_to_char ("Move points now set.\n\r", ch); return; } if (!str_cmp ("mv", arg1) && value >= 0) { victim->max_move = value; send_to_char ("Move points max set.\n\r", ch); return; } if (!str_cmp (arg1, "wis") && value >= 0) { if (value < 3 || value > 36) { send_to_char ("Wisdom range is 3 to 32.\n\r", ch); return; } send_to_char ("Wisdom set.\n\r", ch); victim->pcdata->stat[2] = value; return; } if (!str_cmp (arg1, "dex") && value >= 0) { if (value < 3 || value > 36) { send_to_char ("Dexterity range is 3 to 32.\n\r", ch); return; } send_to_char ("Dexterity set.\n\r", ch); victim->pcdata->stat[3] = value; return; } if (!str_cmp (arg1, "con") && value >= 0) { if (value < 3 || value > 36) { send_to_char ("Constitution range is 3 to 32.\n\r", ch); return; } send_to_char ("Constitution set.\n\r", ch); victim->pcdata->stat[4] = value; return; } if (!str_cmp (arg1, "int") && value >= 0) { if (value < 3 || value > 36) { send_to_char ("Intelligence range is 3 to 32.\n\r", ch); return; } send_to_char ("Intelligence set.\n\r", ch); victim->pcdata->stat[1] = value; return; } if (!str_cmp (arg1, "str") && value >= 0) { if (value < 3 || value > 36) { send_to_char ("Strength range is 3 to 32.\n\r", ch); return; } send_to_char ("Strength set.\n\r", ch); victim->pcdata->stat[0] = value; return; } if (!str_cmp (arg1, "wmd")) { send_to_char ("Wisdom mod set.\n\r", ch); victim->pcdata->stat_mod[2] = value; return; } if (!str_cmp (arg1, "dmd")) { send_to_char ("Dexterity mod set.\n\r", ch); victim->pcdata->stat_mod[3] = value; return; } if (!str_cmp (arg1, "imd")) { send_to_char ("Intelligence mod set.\n\r", ch); victim->pcdata->stat_mod[1] = value; return; } if (!str_cmp (arg1, "cmd")) { send_to_char ("Constitution mod set.\n\r", ch); victim->pcdata->stat_mod[4] = value; return; } if (!str_cmp (arg1, "smd")) { send_to_char ("Strength mod set.\n\r", ch); victim->pcdata->stat_mod[0] = value; return; } if (!str_cmp (arg1, "Sec") && value > 0 && value < 10) { send_to_char ("Security set.\n\r", ch); victim->pcdata->security = value; return; } if (!str_cmp (arg1, "hitrl")) { send_to_char ("Hitroll set.\n\r", ch); victim->hitroll = value; return; } if (!str_cmp (arg1, "damrl")) { send_to_char ("Damroll set.\n\r", ch); victim->damroll = value; return; } if (!str_cmp (arg1, "thirst")) { send_to_char ("Thirst set.\n\r", ch); victim->pcdata->condition[COND_THIRST] = value; return; } if (!str_cmp (arg1, "full")) { send_to_char ("Full set.\n\r", ch); victim->pcdata->condition[COND_FULL] = value; return; } if (!str_cmp (arg1, "drunk")) { send_to_char ("Drunk set.\n\r", ch); victim->pcdata->condition[COND_DRUNK] = value; return; } if (!str_prefix ("sav", arg1)) { send_to_char ("Saving throw set.\n\r", ch); victim->pcdata->saving_throw = value; return; } if (!str_cmp (arg1, "cool") && arg2[0] != '\0') { return; } if (!str_cmp (arg1, "guild") && arg2[0] != '\0') { int i; for (i = 0; str_cmp(guild_data[i].what_you_type, "end_of_list"); i++) { if (!str_cmp(guild_data[i].what_you_type, arg2)) { char buf[100]; sprintf(buf, guild_data[i].what_you_see); if (IS_SET(victim->pcdata->guilds, guild_data[i].mob_guildmaster_bit)) strcat(buf, " Removed.\n\r"); else strcat(buf, " Added.\n\r"); send_to_char(buf, ch); victim->pcdata->guilds ^= guild_data[i].mob_guildmaster_bit; return; } } send_to_char ("Unknown guild.\n\r", ch); return; } if (!str_cmp (arg1, "level")) { if (value < 1 || value > 99) return; victim->exp = (FIND_EXP ((value - 1), 1)); send_to_char ("Level set.\n\r", ch); return; } if (!str_cmp (arg1, "align") || !str_cmp (arg1, "alignment")) { if (value < 0 || value >= NUM_ALIGN) return; alignswitch(victim, value); send_to_char ("Alignment set.\n\r", ch); return; } if (!str_cmp (arg1, "affect")) { char bufff[200]; bool isoff = FALSE; int num = 0; bool found = FALSE; int affect = victim->pcdata->nat_abilities; for (num = 0; str_cmp(affect_flagss[num].what_you_type, "end_of_list") && (!found) ; num++) { if (!str_cmp(arg2, affect_flagss[num].what_you_type )) { found = TRUE; isoff =((IS_SET(affect,affect_flagss[num].flagname))? FALSE : TRUE); sprintf(bufff, " %s bit toggled %s\n\r",affect_flagss[num].what_you_type ,(isoff ? "On" : "Off") ); TOGGLE_BIT(victim->pcdata->nat_abilities, affect_flagss[num].flagname); } } if (!found) { sprintf(bufff, "Which affect????\n\r."); send_to_char(bufff, ch); } else { send_to_char(bufff, ch); return; } } if (!str_cmp (arg1, "affect2")) { char bufff[200]; bool isoff = FALSE; int num = 0; bool found = FALSE; int affect = victim->pcdata->nat_abilities2; for (num = 0; str_cmp(affect_flags_2[num].what_you_type, "end_of_list") && (!found); num++) { if (!str_cmp(arg2, affect_flags_2[num].what_you_type )) { found = TRUE; isoff =((IS_SET(affect,affect_flags_2[num].flagname))? FALSE : TRUE); sprintf(bufff, " %s bit toggled %s\n\r",affect_flags_2[num].what_you_type ,(isoff ? "On" : "Off") ); TOGGLE_BIT(victim->pcdata->nat_abilities2, affect_flags_2[num].flagname); } } if (!found) { sprintf(bufff, "Which affect????\n\r."); send_to_char(bufff, ch); } else { send_to_char(bufff, ch); return; } } if (!str_prefix ("skill", arg1) && value > 0 && value < SKILL_COUNT && is_number (arg3)) { int set_to; set_to = atoi (arg3); if (set_to < 0 || set_to > 100) { send_to_char ("Valid ranges are 0 (unlearned) to 100 (perfect).\n\r", ch); return; } if (set_to == 0) set_to = -100; victim->pcdata->learned[value] = set_to; send_to_char ("Skill/Spell set.\n\r", ch); return; } if (!str_prefix ("obj", arg1) && value != -1) { SINGLE_OBJECT *otr; SINGLE_OBJECT *ofnd; OBJ_PROTOTYPE *crobj; ofnd = NULL; if (value < 0) /*Take away an object */ { value = 0 - value; for (otr = victim->carrying; otr != NULL; otr = otr->next_content) if (otr->pIndexData->vnum == value) { ofnd = otr; break; } if (ofnd == NULL) { send_to_char ("Obj not found.\n\r", ch); return; } if (ofnd->wear_loc != -1) { unequip_char (victim, ofnd); } obj_from (ofnd); free_it (ofnd); send_to_char ("Object removed.\n\r", ch); return; } if ((crobj = get_obj_index (value)) == NULL) { send_to_char ("Invalid object.\n\r", ch); return; } ofnd = create_object (crobj, 1); obj_to (ofnd, victim); ofnd->wear_loc = -1; send_to_char ("Object added.\n\r", ch); return; } if (!str_prefix ("stor", arg1) && value != -1) { int otr; SINGLE_OBJECT *ofnd; ofnd = NULL; if (value < 0) /*Take away an object */ { value = 0 - value; for (otr = 0; otr < MAXST; otr++) { if (victim->pcdata->storage[otr] == NULL) continue; if (victim->pcdata->storage[otr]->pIndexData->vnum == value) { ofnd = victim->pcdata->storage[otr]; break; } } if (ofnd == NULL) { send_to_char ("Obj not found.\n\r", ch); return; } free_it (victim->pcdata->storage[otr]); victim->pcdata->storage[otr] = NULL; send_to_char ("Object removed.\n\r", ch); return; } send_to_char ("You can only remove personal storage items, not give.\n\r", ch); return; } if (!str_prefix ("silence", arg1)) { victim->pcdata->act2 ^= PLR_SILENCE; send_to_char ("Toggled.\n\r", ch); return; } if (!str_prefix ("frozen", arg1)) { victim->act ^= PLR_FREEZE; send_to_char ("Toggled.\n\r", ch); return; } if (!str_prefix ("crasher", arg1)) { victim->act ^= ACT_CRASHER; send_to_char ("Toggled.\n\r", ch); return; } if (!str_cmp ("done", arg1)) { CHAR_DATA *iii; ch->desc->connected = CON_PLAYING; ch->desc->pEdit = NULL; fix_char(victim); save_char_obj (victim); for (iii = char_list; iii != NULL; iii = iii->next) { if (iii == victim) return; } extract_char (victim, TRUE); return; } if (!str_suffix ("edit", arg1)) { send_to_char ("Please type done before you go to another editor.\n\r", ch); return; } interpret (ch, store_arg); return; } void do_pedit (CHAR_DATA * ch, char *argy) { CHAR_DATA *victim; CHAR_DATA *cy; char edbuf[500]; DEFINE_COMMAND ("pedit", do_pedit, POSITION_DEAD, 110, LOG_ALWAYS, "Allows you to edit a player online or offline.") if (!IS_REAL_GOD (ch)) { send_to_char ("Huh?\n\r", ch); return; } if (!argy || argy == "" || argy[0] == '\0') { send_to_char ("Pedit who?", ch); return; } pedit_found = NULL; victim = NULL; for (cy = char_list; cy != NULL; cy = cy->next) { if (IS_MOB (cy)) continue; if (!str_cmp (NAME (cy), argy)) { victim = cy; break; } } sprintf (edbuf, "%s", argy); if (victim == NULL) { if (!load_char_obj (NULL, edbuf, TRUE)) { send_to_char ("That character was not found.\n\r", ch); return; } } if (victim == NULL) victim = pedit_found; ch->desc->pEdit = (void *) victim; ch->desc->connected = CON_PEDITOR; return; } void raceswitch(CHAR_DATA * ch, int newrace) { int i; char buf[SML_LENGTH]; int oldrace = ch->pcdata->race; if (IS_MOB(ch)) return; /* Check to see if the choice of the new race is valid. */ if ( newrace < 0 || newrace >= RACE_COUNT || !str_cmp(race_info[newrace].name, "blank")) { return; } if (ch->pcdata->race >=0 && ch->pcdata->race < RACE_COUNT && str_cmp(race_info[ch->pcdata->race].name, "blank")) { /* Get rid of the old races natural stuff and modify stats down or up */ REMOVE_BIT(ch->pcdata->nat_abilities,race_info[ch->pcdata->race].affect_bits); REMOVE_BIT(ch->pcdata->nat_abilities2, race_info[ch->pcdata->race].affect_bits2); REMOVE_BIT( ch->affected_by,race_info[ch->pcdata->race].affect_bits); REMOVE_BIT(ch->more_affected_by, race_info[ch->pcdata->race].affect_bits2); REMOVE_BIT(ch->pcdata->augments, race_info[ch->pcdata->race].nat_augments); for (i = 0; i < NUM_STATS; i++) { ch->pcdata->stat[i] -= race_info[ch->pcdata->race].limits[i]; } ch->max_hit -= (LEVEL(ch) * race_info[ch->pcdata->race].hps_bonus); if (ch->max_hit < 10) ch->max_hit = 10; MAXHIT(ch); ch->damroll -= race_info[ch->pcdata->race].combat_damage_bonus; } /* Wipe skills */ for (i = 0; i < SKILL_COUNT; i++) ch->pcdata->learned[i] = -100; /* Give pracs back. */ ch->pcdata->learn = LEVEL(ch) +2; ch->pcdata->practice = 1+(LEVEL(ch)-1)*(wis_app[get_curr_wis(ch)-1].practice); /* Now add in the new stuff from alignment and race */ ch->pcdata->race = newrace; { int i; for (i = 0; i < NUM_STATS; i++) { ch->pcdata->stat[i] += race_info[ch->pcdata->race].limits[i]; } } ch->pcdata->nat_abilities |= race_info[ch->pcdata->race].affect_bits; ch->pcdata->nat_abilities |= align_info[ch->pcdata->alignment].affect_bits; ch->affected_by |= ch->pcdata->nat_abilities; ch->pcdata->nat_abilities2 |= race_info[ch->pcdata->race].affect_bits2; ch->pcdata->nat_abilities2 |= align_info[ch->pcdata->alignment].affect_bits2; ch->more_affected_by |= ch->pcdata->nat_abilities2; ch->pcdata->augments |= race_info[ch->pcdata->race].nat_augments; ch->pcdata->augments |= align_info[ch->pcdata->alignment].nat_augments; ch->max_hit += (LEVEL(ch) * race_info[ch->pcdata->race].hps_bonus); if (ch->max_hit < 10) ch->max_hit = 10; MAXHIT(ch); ch->damroll += race_info[ch->pcdata->race].combat_damage_bonus; ch->height = number_range (race_info[ch->pcdata->race].height_min, race_info[ch->pcdata->race].height_max); natural_mana(ch); fix_char(ch); sprintf(buf, "You went from being a %s to being a %s.\n\r", ((oldrace >= 0 && oldrace < RACE_COUNT && str_cmp(race_info[oldrace].name, "blank")) ? race_info[oldrace].name : "Something"), ((ch->pcdata->race >= 0 && ch->pcdata->race < RACE_COUNT && str_cmp(race_info[ch->pcdata->race].name, "blank")) ? race_info[ch->pcdata->race].name : "Something")); send_to_char(buf, ch); return; } void alignswitch(CHAR_DATA * ch, int newalign) { int i; char buf[SML_LENGTH]; int oldalign = ch->pcdata->alignment; if (IS_MOB(ch)) return; /* Check to see if the choice of the new align is valid. */ if ( newalign < 0 || newalign >= NUM_ALIGN || !str_cmp(align_info[newalign].name, "blank")) { return; } if (ch->pcdata->alignment >=0 && ch->pcdata->alignment < NUM_ALIGN && str_cmp(align_info[ch->pcdata->alignment].name, "blank")) { /* Get rid of the old aligns natural stuff and modify stats down or up */ REMOVE_BIT(ch->pcdata->nat_abilities,race_info[ch->pcdata->race].affect_bits); REMOVE_BIT(ch->pcdata->nat_abilities2, race_info[ch->pcdata->race].affect_bits2); REMOVE_BIT(ch->affected_by,race_info[ch->pcdata->race].affect_bits); REMOVE_BIT(ch->more_affected_by, race_info[ch->pcdata->race].affect_bits2); REMOVE_BIT(ch->pcdata->augments, race_info[ch->pcdata->race].nat_augments); for (i = 0; i < NUM_STATS; i ++) { ch->pcdata->stat[i] -= align_info[ch->pcdata->alignment].limits[i]; } ch->max_hit -= (LEVEL(ch) * align_info[ch->pcdata->alignment].hps_bonus); if (ch->max_hit < 10) ch->max_hit = 10; MAXHIT(ch); ch->damroll -= align_info[ch->pcdata->alignment].combat_damage_bonus; } /* Wipe skills */ if( LEVEL(ch) != pow.level_to_choose || ch->pcdata->remort_times > 0) for (i = 0; i < SKILL_COUNT; i++) ch->pcdata->learned[i] = -100; /* Give pracs back */ ch->pcdata->learn = LEVEL(ch) +2; ch->pcdata->practice = 1+(LEVEL(ch)-1)*(wis_app[get_curr_wis(ch)-1].practice); /* Now add in the new stuff from alignment and align */ ch->height = number_range (race_info[ch->pcdata->race].height_min, race_info[ch->pcdata->race].height_max); ch->pcdata->alignment = newalign; for (i = 0; i < NUM_STATS; i ++) { ch->pcdata->stat[i] += align_info[ch->pcdata->alignment].limits[i]; } ch->pcdata->nat_abilities |= race_info[ch->pcdata->race].affect_bits; ch->pcdata->nat_abilities |= align_info[ch->pcdata->alignment].affect_bits; ch->affected_by |= ch->pcdata->nat_abilities; ch->pcdata->nat_abilities2 |= race_info[ch->pcdata->race].affect_bits2; ch->pcdata->nat_abilities2 |= align_info[ch->pcdata->alignment].affect_bits2; ch->more_affected_by |= ch->pcdata->nat_abilities2; ch->pcdata->augments |= align_info[ch->pcdata->alignment].nat_augments; ch->pcdata->augments |= race_info[ch->pcdata->race].nat_augments; ch->max_hit += (LEVEL(ch) * align_info[ch->pcdata->alignment].hps_bonus); if (ch->max_hit < 10) ch->max_hit = 10; MAXHIT(ch); ch->damroll += align_info[ch->pcdata->alignment].combat_damage_bonus; natural_mana(ch); fix_char(ch); sprintf(buf, "You went from being a %s to being a %s.\n\r", ((oldalign >= 0 && oldalign < NUM_ALIGN && str_cmp(align_info[oldalign].name, "blank")) ? align_info[oldalign].name : "Something"), ((newalign >= 0 && newalign < NUM_ALIGN && str_cmp(align_info[newalign].name, "blank")) ? align_info[newalign].name : "Something")); send_to_char(buf, ch); return; }