#include <sys/time.h> #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "merc.h" #include "commands.h" void load_kingdoms(void) { FILE *fp; int i; int vnum; king_table[0].name = str_dup(""); king_table[0].who_name = str_dup(""); king_table[0].leader_name = str_dup(""); king_table[0].pk = 0; king_table[0].pd = 0; king_table[0].num = 0; king_table[0].recall = 0; king_table[0].altar = 0; if ((fp = fopen("../data/kingdom.dat", "r")) == NULL) { log_string("Error: kingdom.dat not found!"); exit(1);} for (i = 1; i < MAX_KINGDOM; i++) { vnum = 90000 + i*100; king_table[i].name = fread_string(fp); king_table[i].who_name = fread_string(fp); king_table[i].leader_name = fread_string(fp); king_table[i].pk = fread_number(fp); king_table[i].pd = fread_number(fp); king_table[i].num = i; king_table[i].recall = fread_number(fp); king_table[i].altar = fread_number(fp); } fclose(fp); return; } void save_kingdoms(void) { FILE *fp; int i; if ((fp = fopen("../data/kingdom.dat","w")) == NULL) { log_string("Error writing to kingdom.dat"); } for (i = 1; i < MAX_KINGDOM; i++) { fprintf(fp,"%s~\n", king_table[i].name); fprintf(fp,"%s~\n", king_table[i].who_name); fprintf(fp,"%s~\n", king_table[i].leader_name); fprintf(fp, "%d\n%d\n",king_table[i].pk, king_table[i].pd); fprintf(fp, "%d\n%d\n",king_table[i].recall,king_table[i].altar); } fclose(fp); return; } void do_kinglist(CHAR_DATA *ch, char *argument) { char buf[MAX_STRING_LENGTH]; char rep[MAX_STRING_LENGTH]; int KRatio; int i; if (IS_NPC(ch)) return; sprintf(buf, "{WClan Leader PKs PDs Ratio Symbol{x\n\r" ); send_to_char(buf,ch); sprintf(buf, "{R---- ------ --- --- ----- ------{x\n\r" ); send_to_char(buf,ch); for (i = 1; i < MAX_KINGDOM; i++) { if ((king_table[i].pk + king_table[i].pd) != 0) { KRatio = (int)((float)king_table[i].pk/(float)(king_table[i].pk + king_table[i].pd)*100); sprintf(rep, "%4d#+", KRatio); } else { KRatio = 100; sprintf(rep, "%4d#+", KRatio); } sprintf(buf, "{C%-25s {W%-12s {R%-7d {B%-7d {W%-4s {w%-5s{x\n\r", king_table[i].name, king_table[i].leader_name, king_table[i].pk, king_table[i].pd, rep, king_table[i].who_name); send_to_char(buf,ch); } send_to_char("\n\r", ch ); return; } void do_induct(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg[MAX_STRING_LENGTH]; char buf[MAX_STRING_LENGTH]; argument = one_argument(argument,arg); if (IS_NPC(ch)) return; if (ch->pcdata->kingdom == 0) { send_to_char("You are not in a clan.\n\r", ch ); return;} if (str_cmp(ch->name,king_table[ch->pcdata->kingdom].leader_name) && !IS_SET(ch->special, SPC_PRINCE) && !IS_SET(ch->special, SPC_LEADER)) { send_to_char("You cannot induct people.\n\r", ch ); return; } if ((victim = get_char_room(ch, arg)) == NULL) { send_to_char("They are not here.\n\r", ch ); return;} if (IS_NPC(victim)) { send_to_char("Not on NPCs.\n\r", ch ); return;} if (!IS_SET(victim->newbits, NEW_CLANNABLE)) { send_to_char("That person is not CLANNABLE.\n\r", ch ); return;} if (victim->pcdata->kingdom != 0) { send_to_char("That person is already clanned.\n\r", ch ); return;} victim->pcdata->kingdom = ch->pcdata->kingdom; if (IS_SET(victim->special, SPC_PRINCE)) REMOVE_BIT(victim->special, SPC_PRINCE); send_to_char("They are now in your clan.\n\r", ch); send_to_char("You are now in a clan.\n\r", victim); sprintf(buf, "%s has joined %s!", victim->name, king_table[ch->pcdata->kingdom].who_name); do_info(ch, buf); save_char_obj(victim); return; } void do_outcast(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg[MAX_STRING_LENGTH]; char buf[MAX_STRING_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (ch->pcdata->kingdom == 0) { send_to_char("You are not in a clan.\n\r", ch ); return;} /* if (str_cmp(ch->name,king_table[ch->pcdata->kingdom].leader_name)) { send_to_char("You are not a clan leader.\n\r", ch ); return;}*/ if ( IS_SET(ch->special, SPC_LEADER) && str_cmp(ch->name,king_table[ch->pcdata->kingdom].leader_name)) { send_to_char("You are not a King or Queen.\n\r", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL ) { send_to_char("They are not here.\n\r", ch ); return;} if (IS_NPC(victim)) { send_to_char("Not on NPCs.\n\r", ch ); return;} if (victim->pcdata->kingdom != ch->pcdata->kingdom) { send_to_char("They are not in your clan.\n\r", ch ); return;} if (ch == victim) { send_to_char("You can't outcast yourself.\n\r", ch ); return;} victim->pcdata->kingdom = 0; if (IS_SET(victim->special, SPC_PRINCE)) REMOVE_BIT(victim->special, SPC_PRINCE); send_to_char("You remove them from your clan.\n\r", ch ); send_to_char("You have been outcasted from your clan!\n\r",victim); sprintf(buf, "%s has been outcasted from %s!", victim->name, king_table[ch->pcdata->kingdom].who_name); do_info(ch, buf); return; } void do_prince(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg[MAX_STRING_LENGTH]; char buf[MAX_STRING_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (ch->pcdata->kingdom == 0) { send_to_char("You are not in a clan.\n\r", ch ); return;} /* if (str_cmp(ch->name,king_table[ch->pcdata->kingdom].leader_name)) { send_to_char("You are not the leader of your clan.\n\r", ch ); return;}*/ if (!IS_SET(ch->special, SPC_LEADER) || (str_cmp(ch->name,king_table[ch->pcdata->kingdom].leader_name))) { send_to_char("You are not a King or Queen.\n\r", ch); return; } if ((victim = get_char_room(ch, arg)) == NULL) { send_to_char("They are not here.\n\r", ch ); return;} if (IS_NPC(victim)) { send_to_char("Not on NPCs.\n\r", ch ); return;} if (victim->pcdata->kingdom != ch->pcdata->kingdom) { send_to_char("They are not in your clan.\n\r", ch ); return;} if (ch == victim) { send_to_char("You can't do that.\n\r", ch ); return;} if (IS_SET(victim->special, SPC_PRINCE)) { REMOVE_BIT(victim->special, SPC_PRINCE); send_to_char("You are no longer a prince.\n\r", victim); send_to_char("They are no longer a prince.\n\r", ch ); sprintf(buf, "%s is no longer prince of %s!", victim->name, king_table[ch->pcdata->kingdom].who_name); do_info(ch, buf); save_char_obj(victim); return;} SET_BIT(victim->special, SPC_PRINCE); send_to_char("You are now a prince!\n\r", victim); send_to_char("You make them a prince.\n\r", ch ); sprintf(buf, "%s is now Prince of %s!", victim->name, king_table[ch->pcdata->kingdom].who_name); do_info(ch, buf); save_char_obj(victim); return; } void do_clannable(CHAR_DATA *ch, char *argument) { if (IS_NPC(ch)) return; if (ch->pcdata->kingdom != 0) { send_to_char("You already are in a clan.\n\r", ch ); return;} if (IS_SET(ch->newbits, NEW_CLANNABLE)) { REMOVE_BIT(ch->newbits, NEW_CLANNABLE); send_to_char("You can no longer be clanned.\n\r", ch ); return;} SET_BIT(ch->newbits, NEW_CLANNABLE); send_to_char("You can now be clanned.\n\r", ch ); return; } void do_kingdom(CHAR_DATA *ch, char *argument) { char buf[MAX_STRING_LENGTH]; CHAR_DATA *gch; char rankname[9]; if (IS_NPC(ch)) return; if (ch->pcdata->kingdom == 0) { send_to_char("You are not in a kingdom.\n\r", ch ); return;} sprintf(buf, "%s's Kingdom of %s:\n\r", king_table[ch->pcdata->kingdom].leader_name, king_table[ch->pcdata->kingdom].name); send_to_char( buf, ch ); send_to_char("#2[ Name ] [ Hits ] [ HPmax ] [ Mana ] [ Move ] [ Status ] [ Rank ]#n\n\r",ch ); for ( gch = char_list; gch != NULL; gch = gch->next ) { if ( IS_NPC(gch) ) continue; if ( gch->pcdata->kingdom != ch->pcdata->kingdom) continue; if ((!str_cmp(king_table[ch->pcdata->kingdom].leader_name,gch->name) || IS_SET( gch->special, SPC_LEADER)) && gch->sex == 1 ) sprintf(rankname,"King"); else if ((!str_cmp(king_table[ch->pcdata->kingdom].leader_name,gch->name) || IS_SET( gch->special, SPC_LEADER)) && gch->sex == 2 ) sprintf(rankname,"Queen"); else if (IS_SET(gch->special, SPC_PRINCE) && gch->sex == 1 ) sprintf(rankname, "Prince"); else if ( IS_SET( gch->special, SPC_PRINCE) && gch->sex == 2 ) sprintf(rankname, "Princess"); else sprintf(rankname,"Member"); /* if (ch->pcdata->stats[KINGDOM_RANK] == 1) sprintf(rankname, "%s",king_table[ch->pcdata->kingdom].rank1); else if (ch->pcdata->stats[KINGDOM_RANK] == 2) sprintf(rankname, "Jew"); else sprintf(rankname,"Blah");*/ sprintf( buf, "#2[#n%-12s#2] [#n%6ld#2] [#n%7ld#2] [#n%6ld#2] [#n%6ld#2] [#n %-2d #2] [ #n%-9s #2]#n\n\r", gch->name , gch->hit,gch->max_hit,gch->mana,gch->move, gch->race, rankname); send_to_char( buf, ch ); } return; } void do_krecall(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; CHAR_DATA *mount; ROOM_INDEX_DATA *location; if (IS_NPC(ch)) return; if (ch->fight_timer >0) { send_to_char("Not until your fight timer expires.\n\r", ch ); return; } if (ch->pcdata->kingdom == 0) { send_to_char("Huh?\n\r", ch ); return; } act("$n's body flickers with green energy.",ch,NULL,NULL,TO_ROOM); act("Your body flickers with green energy.",ch,NULL,NULL,TO_CHAR); if ( !(location = get_room_index(king_table[ch->pcdata->kingdom].recall))) { send_to_char("You are completely lost.\n\r", ch ); return; } if (ch->in_room == location) return; if (IS_SET(ch->in_room->room_flags, ROOM_NO_RECALL) || IS_AFFECTED(ch, AFF_CURSE)) { send_to_char("You are unable to recall.\n\r", ch ); return;} if ((victim = ch->fighting) != NULL) { if (number_bits(1) == 0) { WAIT_STATE(ch,4); send_to_char("You failed!\n\r", ch ); return;} send_to_char("You recall from combat!\n\r", ch ); stop_fighting(ch,TRUE); } act("$n dissapears.",ch,NULL,NULL,TO_ROOM); char_from_room(ch); char_to_room(ch,location); act("$n appears in the room.",ch,NULL,NULL,TO_ROOM); do_look(ch,"auto"); if ((mount = ch->mount) == NULL) return; char_from_room(mount); char_to_room(mount,ch->in_room); return; } void do_crown(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg[MAX_STRING_LENGTH]; char buf[MAX_STRING_LENGTH]; argument = one_argument( argument, arg); if (IS_NPC(ch)) return; if (ch->pcdata->kingdom == 0) { send_to_char("You are not in a clan.\n\r", ch ); return; } if (str_cmp(ch->name,king_table[ch->pcdata->kingdom].leader_name)) { send_to_char("You are not the leader of your clan.\n\r", ch ); return; } if ((victim = get_char_room(ch, arg)) == NULL) { send_to_char("They are not here.\n\r", ch ); return; } if (IS_NPC(victim)) { send_to_char("Not on NPCs.\n\r", ch ); return; } if (victim->pcdata->kingdom != ch->pcdata->kingdom) { send_to_char("They are not in your clan.\n\r", ch ); return; } if (ch == victim) { send_to_char("You can't do that.\n\r", ch ); return; } if (!str_cmp(ch->name, victim->pcdata->marriage) && !str_cmp(victim->name, ch->pcdata->marriage)) { if (!IS_EXTRA(ch,EXTRA_MARRIED) || !IS_EXTRA(victim,EXTRA_MARRIED)) { stc("You must be married with them to do this.\n\r",ch); return; } } if (IS_SET(victim->special, SPC_LEADER)) { REMOVE_BIT(victim->special, SPC_LEADER); if ( victim->sex == 1 ) { send_to_char("You are no longer a king.\n\r", victim); send_to_char("They are no longer a king.\n\r", ch ); sprintf(buf, "%s is no longer king of %s!", victim->name, king_table[ch->pcdata->kingdom].who_name ); do_info(ch, buf); } if ( victim->sex == 2 ) { stc("You are no longer a queen.\n\r",victim); stc("They are no longer a queen.\n\r",ch); sprintf(buf, "%s is no longer queen of %s!", victim->name, king_table[ch->pcdata->kingdom].who_name ); do_info( ch,buf ); } save_char_obj(victim); return; } SET_BIT(victim->special, SPC_LEADER); if ( victim->sex == 1 ) { send_to_char("You are now a King!\n\r", victim); send_to_char("You make them a king.\n\r", ch ); sprintf(buf, "%s is now King of %s!", victim->name, king_table[ch->pcdata->kingdom].who_name ); do_info(ch, buf); } if ( victim->sex == 2 ) { send_to_char("You are now a Queen!\n\r", victim); send_to_char("You make them a queen.\n\r", ch ); sprintf(buf, "%s is now Queen of %s!", victim->name, king_table[ch->pcdata->kingdom].who_name ); do_info(ch, buf); } save_char_obj(victim); return; } void do_removeclan(CHAR_DATA *ch, char *argument) { char buf[MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; if ( ch->pcdata->kingdom == -1 ) { stc("You are exiled!\n\r",ch); return; } ch->pcdata->kingdom = 0; if (IS_SET(ch->special, SPC_PRINCE)) REMOVE_BIT(ch->special, SPC_PRINCE); send_to_char("You have removed yourself from your kingdom.\n\r", ch ); send_to_char("You feel cold and empty without your once loved kingdom.!\n\r",ch); sprintf(buf, "%s has left their kingdom!", ch->name ); do_info(ch, buf); } void do_cpromote(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg[MAX_STRING_LENGTH]; argument = one_argument( argument, arg); if (IS_NPC(ch)) return; if (ch->pcdata->kingdom == 0) { send_to_char("You are not in a clan.\n\r", ch ); return; } if (str_cmp(ch->name,king_table[ch->pcdata->kingdom].leader_name)) { send_to_char("You are not the leader of your clan.\n\r", ch ); return; } if ((victim = get_char_room(ch, arg)) == NULL) { send_to_char("They are not here.\n\r", ch ); return; } if (IS_NPC(victim)) { send_to_char("Not on NPCs.\n\r", ch ); return; } if (victim->pcdata->kingdom != ch->pcdata->kingdom) { send_to_char("They are not in your clan.\n\r", ch ); return; } /* if (ch == victim) { send_to_char("You can't do that.\n\r", ch ); return; }*/ if (ch->pcdata->stats[KINGDOM_RANK] < 10) { send_to_char("You need to have level 10 rank to do this.\n\r",ch); return; } if (victim->pcdata->stats[KINGDOM_RANK] >= 10) { send_to_char("You cannot promote them anymore.\n\r",ch); return; } victim->pcdata->stats[KINGDOM_RANK] += 1; return; } void do_cdemote(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg[MAX_STRING_LENGTH]; argument = one_argument( argument, arg); if (IS_NPC(ch)) return; if (ch->pcdata->kingdom == 0) { send_to_char("You are not in a clan.\n\r", ch ); return; } if (str_cmp(ch->name,king_table[ch->pcdata->kingdom].leader_name)) { send_to_char("You are not the leader of your clan.\n\r", ch ); return; } if ((victim = get_char_room(ch, arg)) == NULL) { send_to_char("They are not here.\n\r", ch ); return; } if (IS_NPC(victim)) { send_to_char("Not on NPCs.\n\r", ch ); return; } if (victim->pcdata->kingdom != ch->pcdata->kingdom) { send_to_char("They are not in your clan.\n\r", ch ); return; } if (ch == victim) { send_to_char("You can't do that.\n\r", ch ); return; } if (ch->pcdata->stats[KINGDOM_RANK] < 10) { send_to_char("You need to have level 10 rank to do this.\n\r",ch); return; } if (victim->pcdata->stats[KINGDOM_RANK] == 1) { send_to_char("You cannot demote them anymore.\n\r",ch); return; } victim->pcdata->stats[KINGDOM_RANK] -= 1; return; } void do_kset(CHAR_DATA *ch, char *argument) { char arg1[MAX_STRING_LENGTH]; char arg2[MAX_STRING_LENGTH]; char arg3[MAX_STRING_LENGTH]; int value; smash_tilde(argument); argument = one_argument(argument, arg1); /* command */ strcpy( arg3, argument ); argument = one_argument(argument, arg2); /* value */ if (IS_NPC(ch)) return; if (arg1[0] == '\0' || arg2[0] == '\0') { send_to_char("Syntax: clanset [part] [value]\n\r", ch ); send_to_char("things: name, whoname, recall, rank[1-10]\n\r\n\r", ch ); return; } value = ch->pcdata->kingdom; if (!str_cmp(arg1,"name")) { free_string(king_table[value].name); king_table[value].name = str_dup(arg3); } else if (!str_cmp(arg1,"whoname")) { free_string(king_table[value].who_name); king_table[value].who_name = str_dup(arg2); } else if( !str_cmp(arg1,"recall")) { int x; if( !is_number( arg2 ) ) { stc( "Recall must be a valid room number.\n\r", ch); return; } x = atoi( arg2 ); if( !get_room_index( x ) ) { ch_printf( ch, "%d is not a valid room.\n\r", x ); return; } king_table[value].recall = x; } else { send_to_char("Nothing set.\n\r", ch ); return; } send_to_char("Done.\n\r", ch ); save_kingdoms(); return; }