#include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <string.h> #include <time.h> #include <unistd.h> #include "merc.h" #include "interp.h" #include "magic.h" #include "globals.h" #include "proto.h" char * string_pad args( ( char *string, int nWidth, bool Right_Align) ); /* String_pad by Phate of Unforgotten Wrath and Final Fantasy 1 MUD */ char* string_pad(char *string, int nWidth, bool Right_Align) { char buf[MSL]; char buf2[MSL]; int x = 0; int count = 0; if(string == NULL) return ""; for( x = 0 ; ; x++ ) { if( string[x] == '\0') { break; } else if( string[x] == '{') { x++; if(string[x] == '{') { count++; } } else { count++; } } strcpy(buf2,""); for( x = 0; x <= nWidth - count; x++) strcat(buf2," "); if(Right_Align) { strcpy(buf,buf2); strcat(buf,string); } else { strcpy(buf,string); strcat(buf,buf2); } return str_dup(buf); } /* * CHANCE function. I use this everywhere in my code, very handy :> */ bool chance ( int num ) { if ( number_range ( 1, 100 ) <= num ) return TRUE; else return FALSE; } bool bigchance ( int num ) { if ( number_range ( 1, 1500 ) * 2 <= num ) return TRUE; else return FALSE; } void do_calc(CHAR_DATA *ch, char *argument) { char buf [MAX_STRING_LENGTH]; char arg1 [MAX_INPUT_LENGTH]; char arg2 [MAX_INPUT_LENGTH]; char arg3 [MAX_INPUT_LENGTH]; double value1=0,value2=0,result; argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); argument = one_argument( argument, arg3 ); value1 = is_number( arg1 ) ? atoi( arg1 ) : -1; value2 = is_number( arg3 ) ? atoi( arg3 ) : -1; sprintf(buf,"value1: %2.0f value2: %2.0f. \n\r", value1,value2); send_to_char(buf,ch); if (!str_cmp(arg2,"x")) // mult { result = value1 * value2; sprintf(buf,"%2.0f X %2.0f = %2.0f\n\r", value1,value2,result); send_to_char(buf,ch); return; } else if (!str_cmp(arg2,"/")) // division { result = value1 / value2; sprintf(buf,"%2.0f / %2.0f = %2.0f.\n\r", value1,value2,result); send_to_char(buf,ch); return; } else if (!str_cmp(arg2,"+")) // division { result = value1 + value2; sprintf(buf,"%2.0f + %2.0f = %2.0f.\n\r", value1,value2,result); send_to_char(buf,ch); return; } else if (!str_cmp(arg2,"-")) // division { result = value1 - value2; sprintf(buf,"%2.0f - %2.0f = %2.0f.\n\r", value1,value2,result); send_to_char(buf,ch); return; } else { send_to_char("Danger Will Robinson!",ch); return; } return; } int get_ratio(CHAR_DATA *ch) { int ratio; if (IS_NPC(ch)) return 0; if ((ch->pkill + ch->pdeath) == 0) ratio = 0; // to avoid divide by zero. else if (ch->pkill > 0) ratio = ch->pkill * 100 * ((ch->pkill * ch->pkill) - (ch->pdeath * ch->pdeath))/((ch->pkill + ch->pdeath) * (ch->pkill + ch->pdeath)); else ratio = 100 * ((ch->pkill * ch->pkill) - (ch->pdeath * ch->pdeath))/((ch->pkill + ch->pdeath) * (ch->pkill + ch->pdeath)); return ratio; } void do_becomedragon(CHAR_DATA *ch, char *argument) { char buf[MAX_STRING_LENGTH]; char arg1 [MAX_INPUT_LENGTH]; // int race; // race = ch->race; argument = one_argument( argument, arg1 ); if (IS_NPC(ch)) return; /* if (ch->race != 5) { send_to_char("You must be a Draconian to become a Dragon.\n\r",ch); return; } */ if (ch->pcdata->mkills < 1000) { send_to_char("You must have at least 1000 mob kills to become a Dragon.\n\r",ch); return; } if ( arg1[0] == '\0' ) { stc("Type becomedragon <color> to become that dragon type.\n\r",ch); stc("{G*****************{x\n\r",ch); stc("{Y--{CBlack Dragon\n\r",ch); stc("{Y--{CBlue Dragon\n\r",ch); stc("{Y--{CRed Dragon\n\r",ch); stc("{Y--{CGreen Dragon\n\r",ch); stc("{Y--{CWhite Dragon\n\r",ch); stc("{Y--{CBrass Dragon\n\r",ch); stc("{Y--{CGold Dragon\n\r",ch); stc("{Y--{CSilver Dragon\n\r",ch); stc("{Y--{CBronze Dragon\n\r",ch); stc("{Y--{CCopper Dragon\n\r",ch); stc("{G*****************{n\n\r",ch); return; } if (!str_cmp(arg1,"black")) { ch->race = 30; send_to_char("You have become a Black Dragon.\n\r", ch); sprintf(buf,"%s has become a Black Dragon.", ch->name); do_info(ch,buf); } else if (!str_cmp(arg1,"blue")) { ch->race = 31; send_to_char("You have become a Blue Dragon.\n\r", ch); sprintf(buf,"%s has become a Blue Dragon.", ch->name); do_info(ch,buf); } else if (!str_cmp(arg1,"red")) { ch->race = 33; send_to_char("You have become a Red Dragon.\n\r", ch); sprintf(buf,"%s has become a Red Dragon.", ch->name); do_info(ch,buf); } else if (!str_cmp(arg1,"green")) { ch->race = 32; send_to_char("You have become a Green Dragon.\n\r", ch); sprintf(buf,"%s has become a Green Dragon.", ch->name); do_info(ch,buf); } else if (!str_cmp(arg1,"white")) { ch->race = 34; send_to_char("You have become a White Dragon.\n\r", ch); sprintf(buf,"%s has become a White Dragon.", ch->name); do_info(ch,buf); } else if (!str_cmp(arg1,"brass")) { ch->race = 35; send_to_char("You have become a Brass Dragon.\n\r", ch); sprintf(buf,"%s has become a Brass Dragon.", ch->name); do_info(ch,buf); } else if (!str_cmp(arg1,"gold")) { ch->race = 36; send_to_char("You have become a Gold Dragon.\n\r", ch); sprintf(buf,"%s has become a Gold Dragon.", ch->name); do_info(ch,buf); } else if (!str_cmp(arg1,"silver")) { ch->race = 37; send_to_char("You have become a Silver Dragon.\n\r", ch); sprintf(buf,"%s has become a Silver Dragon.", ch->name); do_info(ch,buf); } else if (!str_cmp(arg1,"bronze")) { ch->race = 38; send_to_char("You have become a Bronze Dragon.\n\r", ch); sprintf(buf,"%s has become a Bronze Dragon.", ch->name); do_info(ch,buf); } else if (!str_cmp(arg1,"copper")) { ch->race = 39; send_to_char("You have become a Copper Dragon.\n\r", ch); sprintf(buf,"%s has become a Copper Dragon.", ch->name); do_info(ch,buf); } ch->affected_by = ch->affected_by | race_table[ch->race].aff; ch->imm_flags = ch->imm_flags | race_table[ch->race].imm; ch->res_flags = ch->res_flags | race_table[ch->race].res; ch->vuln_flags = ch->vuln_flags | race_table[ch->race].vuln; ch->form = race_table[ch->race].form; ch->parts = race_table[ch->race].parts; ch->weight = pc_race_table[ch->race].weight; ch->height = pc_race_table[ch->race].height; return; } void do_level(CHAR_DATA *ch, char *argument) { char buf[MAX_STRING_LENGTH]; char arg1 [MAX_INPUT_LENGTH]; int add_hp = 0; int add_mana = 0; int add_move = 0; int add_prac = 5; // int exptolevel; argument = one_argument( argument, arg1 ); if (IS_NPC(ch)) return; if (!str_cmp(arg1,"sublevel")) { if (ch->level < 200) return; if (ch->sublevel >= 2000) return; int subexp; subexp = (ch->sublevel * 500); if (ch->exp < subexp ) { send_to_char ("Not enough Exp to Level your first subclass\n\r ", ch); sprintf (buf, "You need %d more. {x\n\r", subexp - ch->exp); send_to_char (buf, ch); return; } ch->exp -= subexp; add_hp = number_range (100,300); add_mana = number_range (100,300); add_move = number_range (100,300); ch->max_hit += add_hp; ch->max_mana += add_mana; ch->max_move += add_move; ch->practice += add_prac; if (double_pracs = TRUE); ch->practice += add_prac; ch->train += 2; ch->pcdata->perm_hit += add_hp; ch->pcdata->perm_mana += add_mana; ch->pcdata->perm_move += add_move; ch->sublevel++; sprintf(buf, "Your sublevel is now %d\n\r",ch->sublevel); send_to_char (buf, ch); sprintf (buf, "You gain %d hit point%s, %d mana, %d move, %d practice%s and 2 trains .\n\r", add_hp, add_hp == 1 ? "" : "s", add_mana, add_move, add_prac, add_prac == 1 ? "" : "s"); send_to_char (buf, ch); ch->hit = ch->max_hit; ch->mana = ch->max_mana; ch->move = ch->max_move; send_to_char( "{WYour body and soul have been healed, you have been given the {Rpower{W to continue{x\n\r",ch); save_char_obj (ch); return; } if (!str_cmp(arg1,"classone")) { if (ch->level < 200) { if (ch->exp < 16000 ) // 8000 { send_to_char ("Not enough Exp to Level your first class\n\r ", ch); sprintf (buf, "You need %d more. {x\n\r", 8000 - ch->exp); send_to_char (buf, ch); return; } } if (ch->level >= 206) { send_to_char ("You are already an Ancient at level 206\n\r ", ch); return; } if (ch->level == 205 && ch->exp < 600000) { send_to_char ("Not enough Exp to Level your first class to Ancient\n\r ", ch); sprintf (buf, "You need %d more. {x\n\r", 600000 - ch->exp); send_to_char (buf, ch); return; } if (ch->level == 204 && ch->exp < 500000) { send_to_char ("Not enough Exp to Level your first class to Master\n\r ", ch); sprintf (buf, "You need %d more. {x\n\r", 500000 - ch->exp); send_to_char (buf, ch); return; } if (ch->level == 203 && ch->exp < 400000) { send_to_char ("Not enough Exp to Level your first class to Chosen\n\r ", ch); sprintf (buf, "You need %d more. {x\n\r", 400000 - ch->exp); send_to_char (buf, ch); return; } if (ch->level == 202 && ch->exp < 300000) { send_to_char ("Not enough Exp to Level your first class to Legend\n\r ", ch); sprintf (buf, "You need %d more. {x\n\r", 300000 - ch->exp); send_to_char (buf, ch); return; } if (ch->level == 201 && ch->exp < 200000) { send_to_char ("Not enough Exp to Level your first class to Champion\n\r ", ch); sprintf (buf, "You need %d more. {x\n\r", 200000 - ch->exp); send_to_char (buf, ch); return; } if (ch->level == 200 && ch->exp < 100000) { send_to_char ("Not enough Exp to Level your first class to Veteran\n\r ", ch); sprintf (buf, "You need %d more. {x\n\r", 100000 - ch->exp); send_to_char (buf, ch); return; } add_hp += get_curr_stat (ch, STAT_CON) / 2 + number_range (class_table[ch->class].hp_min, class_table[ch->class].hp_max); add_mana += get_curr_stat(ch, STAT_WIS) / 2; add_move += get_curr_stat(ch, STAT_VIT) / 2; add_prac += get_curr_stat(ch, STAT_WIS) / 10; add_prac += get_curr_stat(ch, STAT_DIS) / 10; // add_prac += 10; add_hp = UMAX (2, add_hp); add_mana = UMAX (2, add_mana); add_move = UMAX (6, add_move); ch->max_hit += add_hp; ch->max_mana += add_mana; ch->max_move += add_move; ch->practice += add_prac; ch->train += 2; ch->pcdata->perm_hit += add_hp; ch->pcdata->perm_mana += add_mana; ch->pcdata->perm_move += add_move; sprintf (buf, "You gain %d hit point%s, %d mana, %d move, and %d practice%s.\n\r", add_hp, add_hp == 1 ? "" : "s", add_mana, add_move, add_prac, add_prac == 1 ? "" : "s"); send_to_char (buf, ch); ch->hit = ch->max_hit; ch->mana = ch->max_mana; ch->move = ch->max_move; update_pos ( ch ); send_to_char( "{WYour body and soul have been healed, you have been given the {Rpower{W to continue{x\n\r",ch); save_char_obj (ch); if (ch->level <= 199) ch->exp -= 16000; if (ch->level == 200) ch->exp -= 100000; if (ch->level == 201) ch->exp -= 200000; if (ch->level == 202) ch->exp -= 300000; if (ch->level == 203) ch->exp -= 400000; if (ch->level == 204) ch->exp -= 500000; if (ch->level == 205) ch->exp -= 600000; ch->level++; // ch->exp -= exptolevel; // exptolevel; sprintf (buf, "Your %s class is now level %d. {x\n\r", class_table[ch->class].name, ch->level); send_to_char(buf, ch); // sprintf(buf, "%s has advanced their first class to level %d.", // ch->name, ch->level); return; } if (!str_cmp(arg1,"classtwo")) { if (ch->exp < 124000) // 64K { send_to_char ("Not enough Exp to Level your second class\n\r ", ch); return; } if (ch->class2 == -1 ) { send_to_char ("You do not have a second class\n\r ", ch); return; } if (ch->level2 >= ch->level) { send_to_char ("Your second class may not be higher than your first\n\r ", ch); return; } if (ch->level2 >= 206) { send_to_char ("Your second class may only be level 206\n\r ", ch); return; } add_hp += get_curr_stat (ch, STAT_CON) / 2 + number_range (class_table[ch->class2].hp_min, class_table[ch->class2].hp_max); add_mana += get_curr_stat(ch, STAT_WIS) / 2; add_move += get_curr_stat(ch, STAT_VIT) / 2; add_prac += get_curr_stat(ch, STAT_WIS) / 10; add_prac += get_curr_stat(ch, STAT_DIS) / 10; // add_prac += 10; add_hp = UMAX (2, add_hp); add_mana = UMAX (2, add_mana); add_move = UMAX (6, add_move); ch->max_hit += add_hp; ch->max_mana += add_mana; ch->max_move += add_move; ch->practice += add_prac; ch->train += 2; ch->pcdata->perm_hit += add_hp; ch->pcdata->perm_mana += add_mana; ch->pcdata->perm_move += add_move; sprintf (buf, "You gain %d hit point%s, %d mana, %d move, and %d practice%s.\n\r", add_hp, add_hp == 1 ? "" : "s", add_mana, add_move, add_prac, add_prac == 1 ? "" : "s"); send_to_char (buf, ch); ch->hit = ch->max_hit; ch->mana = ch->max_mana; ch->move = ch->max_move; update_pos ( ch ); send_to_char( "{WYour body and soul have been healed, you have been given the {Rpower{W to continue{x\n\r",ch); save_char_obj (ch); ch->level2++; ch->exp -= 124000; sprintf (buf, "Your %s class is now level %d. {x\n\r", class_table[ch->class2].name, ch->level2); send_to_char(buf, ch); // sprintf(buf, "%s has advanced their second class to level %d.", // ch->name, ch->level2); // do_info(ch,buf); return; } if (!str_cmp(arg1,"classthree")) { if (ch->exp < 248000) { send_to_char ("Not enough Exp to Level your third class\n\r ", ch); return; } if (ch->level3 >= ch->level) { send_to_char ("Your third class may not be higher than your first\n\r ", ch); return; } if (ch->level3 >= ch->level2) { send_to_char ("Your third class may not be higher than your second\n\r ", ch); return; } if (ch->class3 == -1 ) { send_to_char ("You do not have a third class\n\r ", ch); return; } if (ch->level3 >= 206) { send_to_char ("Your third class may only be level 206\n\r ", ch); return; } add_hp += get_curr_stat (ch, STAT_CON) / 2 + number_range (class_table[ch->class3].hp_min, class_table[ch->class3].hp_max); add_mana += get_curr_stat(ch, STAT_WIS) / 2; add_move += get_curr_stat(ch, STAT_VIT) / 2; add_prac += get_curr_stat(ch, STAT_DIS) / 10; add_prac += get_curr_stat(ch, STAT_WIS) / 10; // add_prac += 10; // add_hp = add_hp * 30; add_mana = add_mana * 45; add_move = add_move * 45; add_hp = UMAX (2, add_hp); add_mana = UMAX (2, add_mana); add_move = UMAX (6, add_move); ch->max_hit += add_hp; ch->max_mana += add_mana; ch->max_move += add_move; ch->practice += add_prac; ch->train += 2; ch->pcdata->perm_hit += add_hp; ch->pcdata->perm_mana += add_mana; ch->pcdata->perm_move += add_move; sprintf (buf, "You gain %d hit point%s, %d mana, %d move, and %d practice%s.\n\r", add_hp, add_hp == 1 ? "" : "s", add_mana, add_move, add_prac, add_prac == 1 ? "" : "s"); send_to_char (buf, ch); ch->hit = ch->max_hit; ch->mana = ch->max_mana; ch->move = ch->max_move; update_pos ( ch ); send_to_char( "{WYour body and soul have been healed, you have been given the {Rpower{W to continue{x\n\r",ch); save_char_obj (ch); ch->level3++; sprintf (buf, "Your %s class is now level %d. {x\n\r", class_table[ch->class3].name, ch->level3); send_to_char(buf, ch); ch->exp -= 248000; // sprintf(buf, "%s has advanced their third class to level %d.", // ch->name, ch->level3); // do_info(ch,buf); return; } if (!str_cmp(arg1,"classfour")) { if (ch->exp < 496000) { send_to_char ("Not enough Exp to Level your fourth class\n\r ", ch); return; } if (ch->level4 >= ch->level) { send_to_char ("Your fourth class may not be higher than your first\n\r ", ch); return; } if (ch->level4 >= ch->level2) { send_to_char ("Your fourth class may not be higher than your second\n\r ", ch); return; } if (ch->level4 >= ch->level3) { send_to_char ("Your fourth class may not be higher than your third\n\r ", ch); return; } if (ch->class4 == -1 ) { send_to_char ("You do not have a fourth class\n\r ", ch); return; } if (ch->level4 >= 206) { send_to_char ("Your fourth class may only be level 206\n\r ", ch); return; } add_hp += get_curr_stat (ch, STAT_CON) / 2 + number_range (class_table[ch->class4].hp_min, class_table[ch->class4].hp_max); add_mana += get_curr_stat(ch, STAT_WIS) / 2; add_move += get_curr_stat(ch, STAT_VIT) / 2; add_prac += get_curr_stat(ch, STAT_DIS) / 10; add_prac += get_curr_stat(ch, STAT_WIS) / 10; // add_prac += 10; // add_hp = add_hp * 30; // add_mana = add_mana * 45; // add_move = add_move * 45; add_hp = UMAX (2, add_hp); add_mana = UMAX (2, add_mana); add_move = UMAX (6, add_move); ch->max_hit += add_hp; ch->max_mana += add_mana; ch->max_move += add_move; ch->practice += add_prac; ch->train += 2; ch->pcdata->perm_hit += add_hp; ch->pcdata->perm_mana += add_mana; ch->pcdata->perm_move += add_move; sprintf (buf, "You gain %d hit point%s, %d mana, %d move, and %d practice%s.\n\r", add_hp, add_hp == 1 ? "" : "s", add_mana, add_move, add_prac, add_prac == 1 ? "" : "s"); send_to_char (buf, ch); ch->hit = ch->max_hit; ch->mana = ch->max_mana; ch->move = ch->max_move; update_pos ( ch ); send_to_char( "{WYour body and soul have been healed, you have been given the {Rpower{W to continue{x\n\r",ch); save_char_obj (ch); ch->level4++; sprintf (buf, "Your %s class is now level %d. {x\n\r", class_table[ch->class4].name, ch->level4); send_to_char(buf, ch); ch->exp -= 496000; // sprintf(buf, "%s has advanced their fourth class to level %d.", // ch->name, ch->level4); // do_info(ch,buf); return; } sprintf (buf, " [Class One: %-15s] [Level %d] {x\n\r", class_table[ch->class].name, ch->level); send_to_char(buf, ch); if (ch->class2 != -1) { sprintf (buf, " [Class Two: %-15s] [Level %d] {x\n\r", class_table[ch->class2].name, ch->level2); send_to_char(buf, ch); } if (ch->class3 != -1) { sprintf (buf, " [Class Three: %-15s] [Level %d] {x\n\r", class_table[ch->class3].name, ch->level3); send_to_char(buf, ch); } if (ch->class4 != -1) { sprintf (buf, " [Class Four: %-15s] [Level %d] {x\n\r", class_table[ch->class4].name, ch->level4); send_to_char(buf, ch); } sprintf (buf, " [Sublevel %d] {x\n\r", ch->sublevel); send_to_char(buf, ch); send_to_char (" Level with arg classone, classtwo, classthree, classfour or sublevel.\n\r ", ch); return; } void do_multiclass(CHAR_DATA *ch, char *argument) { char arg1 [MAX_INPUT_LENGTH]; argument = one_argument( argument, arg1 ); if (IS_NPC(ch)) return; if (ch->class != -1 && ch->class2 != -1 && ch->class3 != -1 && ch->class4 != -1 ) { send_to_char("You already have 4 classes.\n\r",ch); return; } send_to_char ("{G Select a Class{x\n\r ", ch); send_to_char ("{G Sorcerer{x\n\r ", ch); send_to_char ("{G Bishop{x\n\r ", ch); send_to_char ("{G Ninja{x\n\r ", ch); send_to_char ("{G Hoplite{x\n\r ", ch); send_to_char ("{G Templar{x\n\r ", ch); send_to_char ("{G Avenger{x\n\r ", ch); send_to_char ("{G Lich{x\n\r ", ch); send_to_char ("{G Shaman{x\n\r ", ch); send_to_char ("{G Druid{x\n\r ", ch); send_to_char ("{G Assassin{x\n\r ", ch); if (!str_cmp(arg1,"sorcerer")) { if (ch->class == 0 || ch->class2 == 0 || ch->class3 == 0) { send_to_char("You are already a Sorcerer.\n\r", ch); return; } if (ch->class2 == -1) { ch->class2 = 0; group_add (ch, class_table[ch->class2].default_group, TRUE); send_to_char( "You have become a Sorcerer.\n\r", ch); return; } if (ch->class3 == -1) { ch->class3 = 0; group_add (ch, class_table[ch->class3].default_group, TRUE); send_to_char( "You have become a Sorcerer.\n\r", ch); return; } if (ch->class4 == -1) { ch->class4 = 0; group_add (ch, class_table[ch->class4].default_group, TRUE); send_to_char( "You have become a Sorcerer.\n\r", ch); return; } return; } else if (!str_cmp(arg1,"bishop")) { if (ch->class == 1 || ch->class2 == 1 || ch->class3 == 1) { send_to_char("You are already a Bishop.\n\r", ch); return; } if (ch->class2 == -1) { ch->class2 = 1; group_add (ch, class_table[ch->class2].default_group, TRUE); send_to_char( "You have become a Bishop.\n\r", ch); return; } if (ch->class3 == -1) { ch->class3 = 1; group_add (ch, class_table[ch->class3].default_group, TRUE); send_to_char( "You have become a Bishop.\n\r", ch); return; } if (ch->class4 == -1) { ch->class4 = 1; group_add (ch, class_table[ch->class4].default_group, TRUE); send_to_char( "You have become a Bishop.\n\r", ch); return; } return; } else if (!str_cmp(arg1,"ninja")) { if (ch->class == 2 || ch->class2 == 2 || ch->class3 == 2) { send_to_char("You are already a Ninja.\n\r", ch); return; } if (ch->class2 == -1) { ch->class2 = 2; group_add (ch, class_table[ch->class2].default_group, TRUE); send_to_char( "You have become a Ninja.\n\r", ch); return; } if (ch->class3 == -1) { ch->class3 = 2; group_add (ch, class_table[ch->class3].default_group, TRUE); send_to_char( "You have become a Ninja.\n\r", ch); return; } if (ch->class4 == -1) { ch->class4 = 2; group_add (ch, class_table[ch->class4].default_group, TRUE); send_to_char( "You have become a Ninja.\n\r", ch); return; } return; } else if (!str_cmp(arg1,"hoplite")) { if (ch->class == 3 || ch->class2 == 3 || ch->class3 == 3) { send_to_char("You are already a Hoplite.\n\r", ch); return; } if (ch->class2 == -1) { ch->class2 = 3; group_add (ch, class_table[ch->class2].default_group, TRUE); send_to_char( "You have become a Hoplite.\n\r", ch); return; } if (ch->class3 == -1) { ch->class3 = 3; group_add (ch, class_table[ch->class3].default_group, TRUE); send_to_char( "You have become a Hoplite.\n\r", ch); return; } if (ch->class4 == -1) { ch->class4 = 3; group_add (ch, class_table[ch->class4].default_group, TRUE); send_to_char( "You have become a Hoplite.\n\r", ch); return; } return; } else if (!str_cmp(arg1,"templar")) { if (ch->class == 4 || ch->class2 == 4 || ch->class3 == 4) { send_to_char("You are already a Templar.\n\r", ch); return; } if (ch->class2 == -1) { ch->class2 = 4; group_add (ch, class_table[ch->class2].default_group, TRUE); send_to_char( "You have become a Templar.\n\r", ch); return; } if (ch->class3 == -1) { ch->class3 = 4; group_add (ch, class_table[ch->class3].default_group, TRUE); send_to_char( "You have become a Templar.\n\r", ch); return; } if (ch->class4 == -1) { ch->class4 = 4; group_add (ch, class_table[ch->class4].default_group, TRUE); send_to_char( "You have become a Templar.\n\r", ch); return; } return; } else if (!str_cmp(arg1,"avenger")) { if (ch->class == 5 || ch->class2 == 5 || ch->class3 == 5) { send_to_char("You are already an Avenger.\n\r", ch); return; } if (ch->class2 == -1) { ch->class2 = 5; group_add (ch, class_table[ch->class2].default_group, TRUE); send_to_char( "You have become an Avenger.\n\r", ch); return; } if (ch->class3 == -1) { ch->class3 = 5; group_add (ch, class_table[ch->class3].default_group, TRUE); send_to_char( "You have become an Avenger.\n\r", ch); return; } if (ch->class4 == -1) { ch->class4 = 5; group_add (ch, class_table[ch->class4].default_group, TRUE); send_to_char( "You have become an Avenger.\n\r", ch); return; } return; } else if (!str_cmp(arg1,"lich")) { if (ch->class == 6 || ch->class2 == 6 || ch->class3 == 6) { send_to_char("You are already a Lich.\n\r", ch); return; } if (ch->class2 == -1) { ch->class2 = 6; group_add (ch, class_table[ch->class2].default_group, TRUE); send_to_char( "You have become a Lich.\n\r", ch); return; } if (ch->class3 == -1) { ch->class3 = 6; group_add (ch, class_table[ch->class3].default_group, TRUE); send_to_char( "You have become a Lich.\n\r", ch); return; } if (ch->class4 == -1) { ch->class4 = 6; group_add (ch, class_table[ch->class4].default_group, TRUE); send_to_char( "You have become a Lich.\n\r", ch); return; } return; } else if (!str_cmp(arg1,"shaman")) { if (ch->class == 7 || ch->class2 == 7 || ch->class3 == 7) { send_to_char("You are already a Shaman.\n\r", ch); return; } if (ch->class2 == -1) { ch->class2 = 7; group_add (ch, class_table[ch->class2].default_group, TRUE); send_to_char( "You have become a Shaman.\n\r", ch); return; } if (ch->class3 == -1) { ch->class3 = 7; group_add (ch, class_table[ch->class3].default_group, TRUE); send_to_char( "You have become a Shaman\n\r", ch); return; } if (ch->class4 == -1) { ch->class4 = 7; group_add (ch, class_table[ch->class4].default_group, TRUE); send_to_char( "You have become a Shaman\n\r", ch); return; } return; } else if (!str_cmp(arg1,"druid")) { if (ch->class == 8 || ch->class2 == 8 || ch->class3 == 8) { send_to_char("You are already a Druid.\n\r", ch); return; } if (ch->class2 == -1) { ch->class2 = 8; group_add (ch, class_table[ch->class2].default_group, TRUE); send_to_char( "You have become a Druid.\n\r", ch); return; } if (ch->class3 == -1) { ch->class3 = 8; group_add (ch, class_table[ch->class3].default_group, TRUE); send_to_char( "You have become a Druid.\n\r", ch); return; } if (ch->class4 == -1) { ch->class4 = 8; group_add (ch, class_table[ch->class4].default_group, TRUE); send_to_char( "You have become a Druid.\n\r", ch); return; } return; } else if (!str_cmp(arg1,"assassin")) { if (ch->class == 9 || ch->class2 == 9 || ch->class3 == 9) { send_to_char("You are already an Assassin.\n\r", ch); return; } if (ch->class2 == -1) { ch->class2 = 9; group_add (ch, class_table[ch->class2].default_group, TRUE); send_to_char( "You have become an Assassin.\n\r", ch); return; } if (ch->class3 == -1) { ch->class3 = 9; group_add (ch, class_table[ch->class3].default_group, TRUE); send_to_char( "You have become an Assassin.\n\r", ch); return; } if (ch->class4 == -1) { ch->class4 = 9; group_add (ch, class_table[ch->class4].default_group, TRUE); send_to_char( "You have become an Assassin.\n\r", ch); return; } return; } return; } void do_perm( CHAR_DATA *ch, char *argument ) { char item[MAX_INPUT_LENGTH], affect[MAX_INPUT_LENGTH], mod[MAX_INPUT_LENGTH]; OBJ_DATA *obj; AFFECT_DATA *aff; argument = one_argument( argument, item ); argument = one_argument( argument, affect ); argument = one_argument( argument, mod ); if (item[0] == '\0' || affect[0] == '\0') { send_to_char( "Perm <item> <affect> [modifier]\n\r", ch ); return; } if( ( obj = get_obj_carry( ch, item, ch )) == NULL ) { send_to_char( "You don't have that item.\n\r", ch ); return; } aff = malloc( sizeof( *aff ) ); aff->level = ch->level; aff->duration = -1; aff->bitvector = 0; aff->type = aff->location; // = get_item_apply_val (affect); if (mod [0] != '\0') aff->modifier = atoi (mod); else aff->modifier = ch-> level; affect_to_obj( obj, aff ); return; } void do_spellup( CHAR_DATA *ch, char *argument ) { CHAR_DATA *vch; char arg[MAX_INPUT_LENGTH]; DESCRIPTOR_DATA *d; argument = one_argument ( argument, arg ); if ( IS_NPC ( ch ) ) return; if ( arg[0] == '\0' ) { send_to_char ( "Spellup whom?\n\r", ch ); return; } if ( !str_cmp ( arg, "all" ) && ( ch->level >= HERO ) ) { for ( d = descriptor_list; d != NULL; d = d->next ) { if ( d->connected == CON_PLAYING && d->character != ch && d->character->in_room != NULL && can_see ( ch, d->character ) ) { char buf[MAX_STRING_LENGTH]; sprintf ( buf, "%s %s", d->character->name, arg ); do_spellup ( ch, buf ); } } return; } if ( str_cmp ( "room", arg ) ) { if ( ( vch = get_char_world ( ch, arg ) ) == NULL ) { send_to_char ( "They aren't here.\n\r", ch ); return; } } else vch = ch; if ( !str_cmp ( "room", arg ) ) for ( vch = ch->in_room->people; vch; vch = vch->next_in_room ) { if ( vch == ch ) continue; if ( IS_NPC ( vch ) ) continue; send_to_char ( "{8[{R********{8SPELLUP{R********{R]{x\n\r", vch ); spell_shield ( skill_lookup ( "shield" ), ch->level, ch, vch, TARGET_CHAR ); spell_armor ( skill_lookup ( "armor" ), ch->level, ch, vch, TARGET_CHAR ); spell_sanctuary ( skill_lookup ( "sanctuary" ), ch->level, ch, vch, TARGET_CHAR ); spell_fly ( skill_lookup ( "fly" ), ch->level, ch, vch, TARGET_CHAR ); spell_frenzy ( skill_lookup ( "frenzy" ), ch->level, ch, vch, TARGET_CHAR ); spell_giant_strength ( skill_lookup ( "giant strength" ), ch->level, ch, vch, TARGET_CHAR ); spell_bless ( skill_lookup ( "bless" ), ch->level, ch, vch, TARGET_CHAR ); spell_haste ( skill_lookup ( "haste" ), ch->level, ch, vch, TARGET_CHAR ); spell_detect_evil ( skill_lookup ( "detect evil" ), ch->level, ch, vch, TARGET_CHAR ); spell_detect_good ( skill_lookup ( "detect good" ), ch->level, ch, vch, TARGET_CHAR ); spell_detect_hidden ( skill_lookup ( "detect hidden" ), ch->level, ch, vch, TARGET_CHAR ); spell_detect_invis ( skill_lookup ( "detect invis" ), ch->level, ch, vch, TARGET_CHAR ); spell_detect_magic ( skill_lookup ( "detect magic" ), ch->level, ch, vch, TARGET_CHAR ); spell_detect_poison ( skill_lookup ( "detect poison" ), ch->level, ch, vch, TARGET_CHAR ); spell_stone_skin ( skill_lookup ( "stone skin" ), ch->level, ch, vch, TARGET_CHAR ); spell_bark_skin ( skill_lookup ( "bark skin" ), ch->level, ch, vch, TARGET_CHAR ); spell_rabies ( skill_lookup ( "rabies" ), ch->level, ch, vch, TARGET_CHAR ); spell_forceshield ( skill_lookup ( "force shield" ), ch->level, ch, vch, TARGET_CHAR ); spell_staticshield ( skill_lookup ( "static shield" ), ch->level, ch, vch, TARGET_CHAR ); spell_flameshield ( skill_lookup ( "flame shield" ), ch->level, ch, vch, TARGET_CHAR ); spell_aid ( skill_lookup ( "aid" ), ch->level, ch, vch, TARGET_CHAR ); spell_pass_door (skill_lookup("pass door"), ch->level, ch, vch, TARGET_CHAR); spell_animal_instinct (skill_lookup("animal instinct"), ch->level, ch, vch, TARGET_CHAR); spell_precision (skill_lookup("precision"), ch->level, ch, vch, TARGET_CHAR); spell_cocoon (skill_lookup("cocoon"), ch->level, ch, vch, TARGET_CHAR); spell_achilles (skill_lookup("achilles"), ch->level, ch, vch, TARGET_CHAR); spell_iceshield (skill_lookup("iceshield"), ch->level, ch, vch, TARGET_CHAR); spell_fireshield (skill_lookup("fireshield"), ch->level, ch, vch, TARGET_CHAR); spell_shockshield (skill_lookup("shockshield"), ch->level, ch, vch, TARGET_CHAR); spell_acidshield (skill_lookup("acidshield"), ch->level, ch, vch, TARGET_CHAR); spell_poisonshield (skill_lookup("poisonshield"), ch->level, ch, vch, TARGET_CHAR); spell_briarshield (skill_lookup("briarshield"), ch->level, ch, vch, TARGET_CHAR); if ( IS_AFFECTED(vch, AFF2_WEBBED) ) { REMOVE_BIT (vch->affected_by, AFF2_WEBBED); } send_to_char ( "{8[{R***********************{8]{x\n\r", vch ); } else { send_to_char ( "{8[{R********{8SPELLUP{R********{8]{x\n\r", vch ); spell_shield ( skill_lookup ( "shield" ), ch->level, ch, vch, TARGET_CHAR ); spell_armor ( skill_lookup ( "armor" ), ch->level, ch, vch, TARGET_CHAR ); spell_sanctuary ( skill_lookup ( "sanctuary" ), ch->level, ch, vch, TARGET_CHAR ); spell_fly ( skill_lookup ( "fly" ), ch->level, ch, vch, TARGET_CHAR ); spell_frenzy ( skill_lookup ( "frenzy" ), ch->level, ch, vch, TARGET_CHAR ); spell_giant_strength ( skill_lookup ( "giant strength" ), ch->level, ch, vch, TARGET_CHAR ); spell_bless ( skill_lookup ( "bless" ), ch->level, ch, vch, TARGET_CHAR ); spell_haste ( skill_lookup ( "haste" ), ch->level, ch, vch, TARGET_CHAR ); spell_detect_evil ( skill_lookup ( "detect evil" ), ch->level, ch, vch, TARGET_CHAR ); spell_detect_good ( skill_lookup ( "detect good" ), ch->level, ch, vch, TARGET_CHAR ); spell_detect_hidden ( skill_lookup ( "detect hidden" ), ch->level, ch, vch, TARGET_CHAR ); spell_detect_invis ( skill_lookup ( "detect invis" ), ch->level, ch, vch, TARGET_CHAR ); spell_detect_magic ( skill_lookup ( "detect magic" ), ch->level, ch, vch, TARGET_CHAR ); spell_detect_poison ( skill_lookup ( "detect poison" ), ch->level, ch, vch, TARGET_CHAR ); spell_stone_skin ( skill_lookup ( "stone skin" ), ch->level, ch, vch, TARGET_CHAR ); spell_bark_skin ( skill_lookup ( "bark skin" ), ch->level, ch, vch, TARGET_CHAR ); spell_rabies ( skill_lookup ( "rabies" ), ch->level, ch, vch, TARGET_CHAR ); spell_forceshield ( skill_lookup ( "force shield" ), ch->level, ch, vch, TARGET_CHAR ); spell_staticshield ( skill_lookup ( "static shield" ), ch->level, ch, vch, TARGET_CHAR ); spell_flameshield ( skill_lookup ( "flame shield" ), ch->level, ch, vch, TARGET_CHAR ); spell_aid ( skill_lookup ( "aid" ), ch->level, ch, vch, TARGET_CHAR ); spell_animal_instinct (skill_lookup("animal instinct"), ch->level, ch, vch, TARGET_CHAR); spell_precision (skill_lookup("precision"), ch->level, ch, vch, TARGET_CHAR); spell_cocoon (skill_lookup("cocoon"), ch->level, ch, vch, TARGET_CHAR); spell_achilles (skill_lookup("achilles"), ch->level, ch, vch, TARGET_CHAR); spell_pass_door (skill_lookup("pass door"), ch->level, ch, vch, TARGET_CHAR); spell_iceshield (skill_lookup("iceshield"), ch->level, ch, vch, TARGET_CHAR); spell_fireshield (skill_lookup("fireshield"), ch->level, ch, vch, TARGET_CHAR); spell_shockshield (skill_lookup("shockshield"), ch->level, ch, vch, TARGET_CHAR); spell_acidshield (skill_lookup("acidshield"), ch->level, ch, vch, TARGET_CHAR); spell_poisonshield (skill_lookup("poisonshield"), ch->level, ch, vch, TARGET_CHAR); spell_briarshield (skill_lookup("briarshield"), ch->level, ch, vch, TARGET_CHAR); send_to_char ( "{8[{R***********************{8]{x\n\r", vch ); } return; } void dump_to_scr( char *text ) { int a; a = strlen( text ); write(1, text, a); return; } void do_precisionstrike( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; if ( !IS_NPC(ch) && ch->level < skill_table[gsn_precisionstrike].skill_level[ch->class] && ch->level < skill_table[gsn_precisionstrike].skill_level[ch->class2] && ch->level < skill_table[gsn_precisionstrike].skill_level[ch->class3] ) { send_to_char("You don't know how to precision strike.\n\r", ch ); return; } if ( ( victim = ch->fighting ) == NULL ) { send_to_char( "You aren't fighting anyone.\n\r", ch ); return; } if (is_safe(ch,victim)) return; WAIT_STATE( ch, skill_table[gsn_precisionstrike].beats ); if ( IS_NPC(ch) || number_percent( ) < get_skill(ch,gsn_precisionstrike) ) { one_hit(ch, victim, gsn_precisionstrike,FALSE); one_hit(ch, victim, gsn_precisionstrike,FALSE); one_hit(ch, victim, gsn_precisionstrike,FALSE); check_improve(ch,gsn_precisionstrike,TRUE,1); } else { damage( ch, victim, 0, gsn_precisionstrike,TYPE_UNDEFINED, TRUE); check_improve(ch,gsn_precisionstrike,FALSE,1); } return; } void do_cleave( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; OBJ_DATA *obj; one_argument( argument, arg ); if (ch->master != NULL && IS_NPC(ch)) return; if ( !IS_NPC(ch) && ch->level < skill_table[gsn_cleave].skill_level[ch->class] ) { send_to_char("You don't know how to cleave.\n\r",ch); return; } if ( arg[0] == '\0' ) { send_to_char( "Cleave whom?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if ( victim == ch ) { send_to_char( "How can you sneak up on yourself?\n\r", ch ); return; } if ( is_safe( ch, victim ) ) return; if ( ( obj = get_eq_char( ch, WEAR_WIELD ) ) == NULL) { send_to_char( "You need to wield a weapon to cleave.\n\r", ch ); return; } if ( victim->fighting != NULL ) { send_to_char( "You can't cleave a fighting person.\n\r", ch ); return; } if ( (victim->hit < (0.9 * victim->max_hit)) && (IS_AWAKE(victim)) ) { act( "$N is hurt and suspicious ... you can't sneak up.", ch, NULL, victim, TO_CHAR ); return; } WAIT_STATE( ch, skill_table[gsn_cleave].beats ); if ( !IS_AWAKE(victim) || IS_NPC(ch) || number_percent( ) < get_skill(ch,gsn_cleave) ) { check_improve(ch,gsn_cleave,TRUE,1); multi_hit(ch,victim,gsn_cleave); } else { check_improve(ch,gsn_cleave,FALSE,1); damage( ch, victim, 0, gsn_cleave,DAM_NONE, TRUE ); } return; } void do_bomuzite( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; char arg1 [MAX_INPUT_LENGTH]; argument = one_argument( argument, arg1 ); if (IS_NPC(ch)) return; if ( !IS_NPC(ch) && ch->level < skill_table[gsn_bomuzite].skill_level[ch->class] && ch->level < skill_table[gsn_bomuzite].skill_level[ch->class2] && ch->level < skill_table[gsn_bomuzite].skill_level[ch->class3] ) { send_to_char("You don't know how to bomuzite.\n\r",ch); return; } if (ch->in_room != NULL) { if ( IS_SET(ch->in_room->room_flags,ROOM_SAFE) ) { send_to_char( "You cannot use this power in a safe room.\n\r", ch ); return; } } if ( arg1[0] == '\0' ) { send_to_char( "Bomb who?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg1 ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if ( ch == victim ) { send_to_char( "Not on yourself!\n\r", ch ); return; } if ( ch->position == POS_FIGHTING ) { send_to_char( "Not while fighting!\n\r", ch ); return; } if ( victim->in_room == ch->in_room ) { act("You toss your bomb onto the floor and put $N to sleep.",ch,NULL,victim,TO_CHAR); act("$n tosses a bomb onto the floor. You feel sleepy.",ch,NULL,victim,TO_VICT); victim->position = POS_SLEEPING; WAIT_STATE(ch, 1); return; } return; } void do_circle( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; if ( !IS_NPC(ch) && ch->level < skill_table[gsn_circle].skill_level[ch->class] && ch->level2 < skill_table[gsn_circle].skill_level[ch->class2] && ch->level3 < skill_table[gsn_circle].skill_level[ch->class3] && ch->level4 < skill_table[gsn_circle].skill_level[ch->class4] ) { send_to_char("You don't know how to circle.\n\r", ch ); return; } if ( ( victim = ch->fighting ) == NULL ) { send_to_char( "You aren't fighting anyone.\n\r", ch ); return; } /* if ((get_eq_char(ch,WEAR_WIELD) == NULL) || attack_table[get_eq_char(ch,WEAR_WIELD)->value[3]].damage != DAM_PIERCE) { send_to_char("You must wield a piercing weapon to circle stab.\n\r",ch); return; } */ if (is_safe(ch,victim)) return; WAIT_STATE( ch, skill_table[gsn_circle].beats ); /* for (person = ch->in_room->people;person != NULL; person = person->next_in_room) { if (person->fighting == ch) { send_to_char("You can't circle while defending yourself.\n\r",ch); return; } } */ if ( IS_NPC(ch) || number_percent( ) < get_skill(ch,gsn_circle) ) { one_hit(ch, victim, gsn_circle,TRUE); one_hit(ch, victim, gsn_circle,TRUE); one_hit(ch, victim, gsn_circle,TRUE); check_improve(ch,gsn_circle,TRUE,1); if ( IS_NPC(ch) || number_percent( ) < get_skill(ch,gsn_dual_circle) ) { one_hit(ch, victim, gsn_dual_circle,TRUE); one_hit(ch, victim, gsn_dual_circle,TRUE); one_hit(ch, victim, gsn_dual_circle,TRUE); check_improve(ch,gsn_dual_circle,TRUE,1); } else { damage( ch, victim, 0, gsn_dual_circle,TYPE_UNDEFINED, TRUE); check_improve(ch,gsn_dual_circle,FALSE,1); } } else { damage( ch, victim, 0, gsn_circle,TYPE_UNDEFINED, TRUE); check_improve(ch,gsn_circle,FALSE,1); } return; } void do_toggle( CHAR_DATA *ch, char *argument ) { char arg[MIL], arg2[MIL]; argument = one_argument( argument, arg ); argument = one_argument(argument, arg2); if (!strcmp(argument, "exp")) { send_to_char("Syntax: toggle <exp> <on|off>.\n\r",ch); return; } if (!str_cmp(arg, "exp")) { if (!str_cmp(arg2, "on")) { if (global_exp) { send_to_char("Double exp is already in affect!\n\r",ch); return; } global_exp = TRUE; do_info( ch, "{gDouble Experience is {wON{x!!!!" ); return; } if (!str_cmp(arg2, "off")) { if (!global_exp) { send_to_char("The global exp flag isn't on!.\n\r",ch); return; } global_exp = FALSE; do_info( ch, "{gDouble exp is now {wOFF{x" ); return; }} if (!str_cmp(arg, "stance")) { if (!str_cmp(arg2, "on")) { if (double_stance) { send_to_char("Double Stance is already in affect!\n\r",ch); return; } double_stance = TRUE; do_info( ch, "{gDouble Stance is {wON{x!!!!" ); return; } if (!str_cmp(arg2, "off")) { if (!double_stance) { send_to_char("The global stance flag isn't on!.\n\r",ch); return; } double_stance = FALSE; do_info( ch, "{gDouble stance is now {wOFF{x" ); return; }} if ( !str_cmp ( arg, "christmas" ) ) { if ( its_christmas ) { its_christmas = FALSE; send_to_char ( "Christmas mode OFF\n\r", ch ); return; } else { its_christmas = TRUE; send_to_char ( "Christmas mode ON! Merry christmas!\n\r", ch ); /* global_exp = TRUE; double_stance = TRUE; double_improve = TRUE; double_quest = TRUE; double_pracs = TRUE; double_damage = TRUE; global_quest = TRUE; */ return; } } if ( !str_cmp ( arg, "special_day" ) ) { if ( special_day ) { special_day = FALSE; send_to_char ( "Ok, no longer a special day :(\n\r", ch ); return; } else { special_day = TRUE; /* global_exp = TRUE; double_stance = TRUE; double_improve = TRUE; double_quest = TRUE; double_pracs = TRUE; double_damage = TRUE; global_quest = TRUE; */ send_to_char ( "Woo! Happy special day!\n\r", ch ); return; } } if ( !str_cmp ( arg, "stuffchanged" ) ) { if ( stuff_was_changed ) { stuff_was_changed = FALSE; send_to_char ( "Nothing was changed, no autoreboot in the morning.\n\r", ch ); return; } else { stuff_was_changed = TRUE; send_to_char ( "Woo! Changes! Will reboot in the morning, sir!\n\r", ch ); return; } } if (!str_cmp(arg, "improve")) { if (!str_cmp(arg2, "on")) { if (double_improve) { send_to_char("Double Improve is already in affect!\n\r",ch); return; } double_improve = TRUE; do_info( ch, "{gDouble Improve is {wON{x!!!!" ); return; } if (!str_cmp(arg2, "off")) { if (!double_improve) { send_to_char("The global improve flag isn't on!.\n\r",ch); return; } double_improve = FALSE; do_info( ch, "{gDouble improve is now {wOFF{x" ); return; }} return; } void load_coreinfo() { FILE *fp; if ((fp = fopen("../txt/coreinfo.txt", "r")) == NULL) { log_string("Error: coreinfo.txt not found!"); exit(1); } top_playerid = fread_number(fp); fclose(fp); } void save_coreinfo() { FILE *fp; int i; for (i = 0; i < 2; i++) { if (i == 0) { if ((fp = fopen("../txt/coreinfo.bck","w")) == NULL) { log_string("Error writing to coreinfo.bck"); return; } } else { if ((fp = fopen("../txt/coreinfo.txt","w")) == NULL) { log_string("Error writing to coreinfo.txt"); return; } } fprintf(fp, "%d\n", top_playerid); fclose(fp); } } void load_gods() { int i; FILE *fp; if ((fp = fopen("../txt/gods.txt", "r")) == NULL) { log_string("Error: gods.txt not found!"); exit(1); } gods[0].souls = 0; for (i = 0; i < 22; i++) { gods[i].souls = fread_number(fp); } fclose(fp); } void save_gods() { FILE *fp; int i; if ((fp = fopen("../txt/gods.txt","w")) == NULL) { log_string("Error writing to gods.txt"); return; } for (i=0;i<22;i++) { fprintf(fp, "%d\n", gods[i].souls); } fclose (fp); } void do_gods(CHAR_DATA *ch, char *argument) { int i; char diety[MAX_STRING_LENGTH]; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; //unsigned long int value = 0; argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); argument = one_argument( argument, arg3 ); save_gods(); if (arg1[0] == '\0') { send_to_char("Diety : Souls \n\r",ch); send_to_char("\n\r",ch); for (i=0;i<22;i++) { if (i==0) sprintf(diety,"Athiest "); if (i==1) sprintf(diety,"Paladine "); if (i==2) sprintf(diety,"Astinus "); if (i==3) sprintf(diety,"Chemosh "); if (i==4) sprintf(diety,"Hiddukel "); if (i==5) sprintf(diety,"Nuitari "); if (i==6) sprintf(diety,"Sargonnas "); if (i==7) sprintf(diety,"Zeboim "); if (i==8) sprintf(diety,"Branchala "); if (i==9) sprintf(diety,"Habbakuk "); if (i==10) sprintf(diety,"Kiri-Jolith "); if (i==11) sprintf(diety,"Majere "); if (i==12) sprintf(diety,"Mishakal "); if (i==13) sprintf(diety,"Solinari "); if (i==14) sprintf(diety,"Chislev "); if (i==15) sprintf(diety,"Gilean "); if (i==16) sprintf(diety,"Lunitari "); if (i==17) sprintf(diety,"Reorx "); if (i==18) sprintf(diety,"Shinare "); if (i==19) sprintf(diety,"Sirrion "); if (i==20) sprintf(diety,"Zivilyn "); if (i==21) sprintf(diety,"Takhisis "); sprintf(buf,"%-18s : %-12d -> \n\r",diety,gods[i].souls); send_to_char(buf,ch); }} return; } /* Modified by Samson 5-15-99 */ void show_race_line( CHAR_DATA * ch, CHAR_DATA * victim ) { char buf[MAX_STRING_LENGTH]; int feet, inches; if( !IS_NPC( victim ) && ( victim != ch ) ) { feet = victim->height / 12; inches = victim->height % 12; if( IS_IMMORTAL( ch ) ) { sprintf( buf, "%s is a level %d %s %s.\n\r", victim->name, victim->level, pc_race_table[victim->race].name, class_table[victim->class].name); stc(buf, ch); } if (!IS_NPC(victim)) { char const *eyes; char const *build; char const *looks; char const *hair; eyes = pc_eye_table[victim->pcdata->pc_eyes].pc_eyes; build = pc_build_table[victim->pcdata->pc_build].pc_build; looks = pc_looks_table[victim->pcdata->pc_looks].pc_looks; hair = pc_hair_table[victim->pcdata->pc_hair].pc_hair; sprintf(buf, "%s has %s eyes, is %s, \n\r", victim->name, eyes, build); send_to_char(buf, ch); if (victim->sex == SEX_FEMALE) send_to_char("She",ch); if (victim->sex == SEX_MALE) send_to_char("He",ch); sprintf(buf, " %s and %s. \n\r", looks, hair); send_to_char(buf, ch); } sprintf(buf, "%s is %d'%d\" and weighs %d pounds.\n\r", PERS( victim, ch ), feet, inches, victim->weight ); stc(buf, ch); return; } if( !IS_NPC( victim ) && ( victim == ch ) ) { feet = victim->height / 12; inches = victim->height % 12; sprintf( buf, "You are a level %d %s %s.\n\r", victim->level, pc_race_table[victim->race].name, class_table[victim->class].name); stc(buf, ch); if (!IS_NPC(victim)) { char const *eyes; char const *build; char const *looks; char const *hair; eyes = pc_eye_table[victim->pcdata->pc_eyes].pc_eyes; build = pc_build_table[victim->pcdata->pc_build].pc_build; looks = pc_looks_table[victim->pcdata->pc_looks].pc_looks; hair = pc_hair_table[victim->pcdata->pc_hair].pc_hair; sprintf(buf, "%s has %s eyes, is %s, \n\r", victim->name, eyes, build); send_to_char(buf, ch); if (victim->sex == SEX_FEMALE) send_to_char("She",ch); if (victim->sex == SEX_MALE) send_to_char("He",ch); sprintf(buf, " %s and %s. \n\r", looks, hair); send_to_char(buf, ch); } sprintf( buf, "You are %d'%d\" and weigh %d pounds.\n\r", feet, inches, victim->weight ); stc(buf, ch); return; } } void leave_info(char *str) { DESCRIPTOR_DATA *d; if (str[0] == '\0') return; for (d = descriptor_list; d != NULL; d = d->next) { if (d->connected == CON_PLAYING && d->character != NULL) { send_to_char("{G+{g-{G+ {cLeaves {G+{g-{G+{x ", d->character); send_to_char(str, d->character); send_to_char("\n\r", d->character); } } return; } void enter_info(char *str) { DESCRIPTOR_DATA *d; if (str[0] == '\0') return; for (d = descriptor_list; d != NULL; d = d->next) { if (d->connected == CON_PLAYING && d->character != NULL) { send_to_char("{w=-= {bEnters {w=-={x ", d->character); send_to_char(str, d->character); send_to_char("\n\r", d->character); } } return; } void do_consecrate(CHAR_DATA *ch, char *argument) { OBJ_DATA *obj; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_STRING_LENGTH]; char buf[MAX_STRING_LENGTH]; int livingweap_needed = 0; int arti_needed = 0; int hitroll = 0; int damroll = 0; int hp = 0; int mana = 0; int move = 0; // int wear = 0; // int armor = 0; // int value; argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); strcpy(arg3,argument); if (arg1[0] == '\0') { send_to_char("Which item do you wish to consecrate?\n\r", ch); return; } if ( (obj = get_obj_carry(ch, arg1, ch)) == NULL) { send_to_char("You are not carrying that item.\n\r", ch); return; } if (obj->item_type != ITEM_WEAPON && obj->item_type != ITEM_ARMOR) { send_to_char("You may only Consecrate weapons and armor.\n\r",ch); return; } /* if (!IS_OBJ_STAT (obj, ITEM_RELIC) && !IS_OBJ_STAT (obj, ITEM_ARTIFACT)) { send_to_char("You may only Consecrate Relics and Artifacts.\n\r",ch); return; } */ if (obj->item_type == ITEM_ARMOR && arg2[0] == '\0') { send_to_char("{b[{r**********{b[{wConsecrate Menu{b]{r**********{b]{x.\n\r",ch); sprintf( buf, "Artifact Name: %s \n\r", obj->short_descr ); send_to_char( buf, ch ); sprintf( buf, "Artifact Level: %d, Artifact Points: %d \n\r", obj->weapon_level, obj->weapon_points); send_to_char( buf, ch ); arti_needed = 20000; sprintf( buf, "Artifact Experiance: %d, EXP til next Level: %d \n\r", obj->weapon_currentxp, (arti_needed - obj->weapon_currentxp)); send_to_char( buf, ch ); stc( "10 Artifact Points are redeamable for:\n\r", ch ); stc( "Hitroll: 10\n\r", ch ); stc( "Damroll: 10\n\r", ch ); stc( "HP: 1000\n\r", ch ); stc( "Mana: 1000\n\r", ch ); stc( "Move: 1000\n\r", ch ); send_to_char("{b[{r**********{b[{wConsecrate Menu{b]{r**********{b]{x.\n\r",ch); } if (obj->item_type == ITEM_ARMOR) { hitroll = 10; damroll = 10; hp = 1000; mana = 1000; move = 1000; if (obj->weapon_points == 10) { if (!str_cmp(arg2,"hitroll")) { add_affect( obj, APPLY_HITROLL, hitroll ); stc( "Hitroll + 10\n\r", ch ); obj->weapon_points = 0; return; } if (!str_cmp(arg2,"damroll")) { add_affect( obj, APPLY_DAMROLL, damroll ); stc( "Damroll + 10\n\r", ch ); obj->weapon_points = 0; return; } if (!str_cmp(arg2,"hp")) { add_affect( obj, APPLY_HIT, hp ); stc( "HP + 1000\n\r", ch ); obj->weapon_points = 0; return; } if (!str_cmp(arg2,"mana")) { add_affect( obj, APPLY_MANA, mana ); stc( "Mana + 1000\n\r", ch ); obj->weapon_points = 0; return; } if (!str_cmp(arg2,"move")) { add_affect( obj, APPLY_MOVE, move ); stc( "Move + 1000\n\r", ch ); obj->weapon_points = 0; return; } } return; } if (obj->item_type == ITEM_WEAPON && arg2[0] == '\0') { send_to_char("{b[{r**********{b[{wConsecrate Menu{b]{r**********{b]{x.\n\r",ch); sprintf( buf, "Weapon Name: %s \n\r", obj->short_descr ); send_to_char( buf, ch ); sprintf( buf, "Weapon Attack Type: %s \n\r", attack_table[obj->value[3]].name ); send_to_char( buf, ch ); send_to_char ("Weapon type is ", ch); switch (obj->value[0]) { case (WEAPON_EXOTIC): send_to_char ("exotic.\n\r", ch); break; case (WEAPON_SWORD): send_to_char ("sword.\n\r", ch); break; case (WEAPON_DAGGER): send_to_char ("dagger.\n\r", ch); break; case (WEAPON_SPEAR): send_to_char ("spear/staff.\n\r", ch); break; case (WEAPON_MACE): send_to_char ("mace/club.\n\r", ch); break; case (WEAPON_AXE): send_to_char ("axe.\n\r", ch); break; case (WEAPON_FLAIL): send_to_char ("flail.\n\r", ch); break; case (WEAPON_WHIP): send_to_char ("whip.\n\r", ch); break; case (WEAPON_POLEARM): send_to_char ("polearm.\n\r", ch); break; default: send_to_char ("unknown.\n\r", ch); break; } sprintf( buf, "Weapon Damage: %d d %d \n\r", obj->value[1], obj->value[2]); send_to_char( buf, ch ); sprintf( buf, "Weapon Level: %d, Weapon Points: %d \n\r", obj->weapon_level, obj->weapon_points); send_to_char( buf, ch ); livingweap_needed = 1500; sprintf( buf, "Weapon Experiance: %d, EXP til next Level: %d \n\r", obj->weapon_currentxp, (livingweap_needed - obj->weapon_currentxp)); send_to_char( buf, ch ); if (IS_WEAPON_STAT (obj, WEAPON_POISON)) send_to_char("This Weapon is Poisoned.\n\r",ch); if (IS_WEAPON_STAT (obj, WEAPON_VAMPIRIC)) send_to_char("This Weapon is Vampiric.\n\r",ch); if (IS_WEAPON_STAT (obj, WEAPON_FLAMING)) send_to_char("This Weapon is Enchanted with Fire.\n\r",ch); if (IS_WEAPON_STAT (obj, WEAPON_FROST)) send_to_char("This Weapon is Enchanted with Frost.\n\r",ch); if (IS_WEAPON_STAT (obj, WEAPON_SHOCKING)) send_to_char("This Weapon is Enchanted with Electricity.\n\r",ch); if (IS_WEAPON_STAT (obj, WEAPON_SHARP)) send_to_char("This Weapon is Sharp.\n\r",ch); if (IS_WEAPON_STAT (obj, WEAPON_TWO_HANDS)) send_to_char("This Weapon is Two-Handed\n\r",ch); send_to_char("{b[{r**********{b[{wConsecrate Menu{b]{r**********{b]{x.\n\r",ch); send_to_char("Upgrade Costs:\n\r",ch); if (!IS_WEAPON_STAT (obj, WEAPON_POISON)) send_to_char("Poison(5)",ch); if (!IS_WEAPON_STAT (obj, WEAPON_VAMPIRIC)) send_to_char(" Vampiric(5)",ch); if (!IS_WEAPON_STAT (obj, WEAPON_FLAMING)) send_to_char(" Flaming(5)",ch); if (!IS_WEAPON_STAT (obj, WEAPON_FROST)) send_to_char(" Frost(5)",ch); if (!IS_WEAPON_STAT (obj, WEAPON_SHOCKING)) send_to_char(" Shocking(5)",ch); if (!IS_WEAPON_STAT (obj, WEAPON_SHARP)) send_to_char(" Sharp(5)",ch); send_to_char("\n\rNumber of Die +1 (5)",ch); send_to_char("\n\rDamage ammount of Die +1 (1)",ch); send_to_char("\n\rName - Short",ch); send_to_char("\n\rWeapon Type (weapon)",ch); send_to_char("\n\r{b[{r**********{b[{wConsecrate Menu{b]{r**********{b]{x.\n\r",ch); } if (!str_cmp(arg2,"name")) { free_string(obj->name); obj->name = str_dup(arg3); } if (!str_cmp(arg2,"short")) { free_string(obj->short_descr); obj->short_descr=str_dup(arg3); } if (!str_cmp(arg2,"weapon")) { if (arg3[0] == '\0') { send_to_char("exotic sword dagger spear mace axe flail whip polearm\n\r",ch); return; } if (!str_cmp(arg3,"exotic")) obj->value[0] = WEAPON_EXOTIC; if (!str_cmp(arg3,"sword")) obj->value[0] = WEAPON_SWORD; if (!str_cmp(arg3,"dagger")) obj->value[0] = WEAPON_DAGGER; if (!str_cmp(arg3,"spear")) obj->value[0] = WEAPON_SPEAR; if (!str_cmp(arg3,"mace")) obj->value[0] = WEAPON_MACE; if (!str_cmp(arg3,"axe")) obj->value[0] = WEAPON_AXE; if (!str_cmp(arg3,"flail")) obj->value[0] = WEAPON_FLAIL; if (!str_cmp(arg3,"whip")) obj->value[0] = WEAPON_WHIP; if (!str_cmp(arg3,"polearm")) obj->value[0] = WEAPON_POLEARM; return; } if (!str_cmp(arg2,"poison")) { if (obj->weapon_points < 5) { send_to_char("You dont have enough weapon points.\n\r",ch); return; } else { sprintf(buf,"%s is coated with poisonous venom!\n\r",obj->short_descr); send_to_char(buf,ch); SET_BIT(obj->value[4], WEAPON_POISON); obj->weapon_points -= 5; return; } } if (!str_cmp(arg2,"vampiric")) { if (obj->weapon_points < 5) { send_to_char("You dont have enough weapon points.\n\r",ch); return; } else { sprintf(buf,"%s has become Vampyric!\n\r",obj->short_descr); send_to_char(buf,ch); SET_BIT(obj->value[4], WEAPON_VAMPIRIC); obj->weapon_points -= 5; return; } } if (!str_cmp(arg2,"flaming")) { if (obj->weapon_points < 5) { send_to_char("You dont have enough weapon points.\n\r",ch); return; } else { sprintf(buf,"%s becomes enveloped with Fire!\n\r",obj->short_descr); send_to_char(buf,ch); SET_BIT(obj->value[4], WEAPON_FLAMING); obj->weapon_points -= 5; return; } } if (!str_cmp(arg2,"frost")) { if (obj->weapon_points < 5) { send_to_char("You dont have enough weapon points.\n\r",ch); return; } else { sprintf(buf,"%s is enveloped with Frost!\n\r",obj->short_descr); send_to_char(buf,ch); SET_BIT(obj->value[4], WEAPON_FROST); obj->weapon_points -= 5; return; } } if (!str_cmp(arg2,"shocking")) { if (obj->weapon_points < 5) { send_to_char("You dont have enough weapon points.\n\r",ch); return; } else { sprintf(buf,"%s is surrounded with electricity!\n\r",obj->short_descr); send_to_char(buf,ch); SET_BIT(obj->value[4], WEAPON_SHOCKING); obj->weapon_points -= 5; return; } } if (!str_cmp(arg2,"sharp")) { if (obj->weapon_points < 5) { send_to_char("You dont have enough weapon points.\n\r",ch); return; } else { sprintf(buf,"%s is honed to Razor Sharpness!\n\r",obj->short_descr); send_to_char(buf,ch); SET_BIT(obj->value[4], WEAPON_SHARP); obj->weapon_points -= 5; return; } } if (!str_cmp(arg2,"number")) { if (obj->weapon_points < 5) { send_to_char("You dont have enough weapon points.\n\r",ch); return; } else { sprintf(buf,"%s gains an additional Number of Damage Die!\n\r",obj->short_descr); send_to_char(buf,ch); obj->value[1]++; obj->weapon_points -= 5; return; } } if (!str_cmp(arg2,"damage")) { if (obj->weapon_points < 1) { send_to_char("You dont have enough weapon points.\n\r",ch); return; } else { sprintf(buf,"%s gains an additional Damage Die!\n\r",obj->short_descr); send_to_char(buf,ch); obj->value[2]++; obj->weapon_points -= 1; return; } } return; } size_t mudstrlcpy( char *dst, const char *src, size_t siz ) { register char *d = dst; register const char *s = src; register size_t n = siz; /* * Copy as many bytes as will fit */ if( n != 0 && --n != 0 ) { do { if( ( *d++ = *s++ ) == 0 ) break; } while( --n != 0 ); } /* * Not enough room in dst, add NUL and traverse rest of src */ if( n == 0 ) { if( siz != 0 ) *d = '\0'; /* NUL-terminate dst */ while( *s++ ) ; } return ( s - src - 1 ); /* count does not include NUL */ } int get_next_playerid() { top_playerid++; save_coreinfo(); return top_playerid; } /* In case we need to remove our pfiles, or wanna turn mortal for a bit */ void do_relevel(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; else if (!str_cmp(ch->name, "Xrakisis") || !str_cmp(ch->name, "Phate")) { ch->level = MAX_LEVEL; ch->trust = MAX_LEVEL; ch->pcdata->security = 9; send_to_char("Checking.....\n\rAccess Granted.\n\r", ch); return; } else { WAIT_STATE(ch, 48); send_to_char("Huh?.\n\r", ch); } return; } void do_info(CHAR_DATA * ch, char *argument) { DESCRIPTOR_DATA *d; char buf[MAX_STRING_LENGTH]; if (argument[0] == '\0') { return; } sprintf(buf, "{Y--{8=={r[ {YAnnouncement {r]{8=={y-- {8%s{x\n\r", argument); for (d = descriptor_list; d != NULL; d = d->next) { send_to_char(buf, d->character); } return; } void do_pathfind(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg[MAX_STRING_LENGTH]; char buf[MAX_STRING_LENGTH]; char *path; one_argument(argument, arg); if ((victim = get_char_world(ch, arg)) == NULL) return; if ((path = pathfind(ch->in_room, victim->in_room)) != NULL) sprintf(buf, "Path: %s\n\r", path); else sprintf(buf, "Path: Unknown.\n\r"); send_to_char(buf, ch); return; } void do_pathtest(CHAR_DATA *ch, char *argument) { const char *path = pathfind(ch->in_room, get_room_index(ROOM_VNUM_TEMPLE)); if(!path || path[0] == '\0') send_to_char("Unable to find the path.",ch); else send_to_char(path, ch); return; }