/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ /*********************************** * Dystopian Kingdom Code, by Jobo * ***********************************/ #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "merc.h" void imm_cset args (( CHAR_DATA *ch, char *argument )); void save_kingdoms() { int i; FILE *fp; if ((fp = fopen("../txt/kingdoms.txt","w")) == NULL) { log_string("Error writing to kingdoms.txt"); return; } for (i = 1; i <= MAX_KINGDOM; i++) { fprintf(fp, "%s~\n", kingdom_table[i].name); fprintf(fp, "%s~\n", kingdom_table[i].whoname); fprintf(fp, "%s~\n", kingdom_table[i].lord); fprintf(fp, "%s~\n", kingdom_table[i].general); fprintf(fp, "%s~\n", kingdom_table[i].colonel); fprintf(fp, "%s~\n", kingdom_table[i].major); fprintf(fp, "%s~\n", kingdom_table[i].captain); fprintf(fp, "%s~\n", kingdom_table[i].sergent); fprintf(fp, "%s~\n", kingdom_table[i].private); fprintf(fp, "%d %d %d\n", kingdom_table[i].kills, kingdom_table[i].deaths, kingdom_table[i].qps); } fclose(fp); } void load_kingdoms() { int i; FILE *fp; kingdom_table[0].name = ""; kingdom_table[0].whoname = ""; kingdom_table[0].lord = ""; kingdom_table[0].general = ""; kingdom_table[0].colonel = ""; kingdom_table[0].major = ""; kingdom_table[0].captain = ""; kingdom_table[0].sergent = ""; kingdom_table[0].private = ""; kingdom_table[0].kills = 0; kingdom_table[0].deaths = 0; kingdom_table[0].qps = 0; if ((fp = fopen("../txt/kingdoms.txt", "r")) == NULL) { log_string("Fatal Error: kingdoms.txt not found!"); exit(1); } for (i = 1; i <= MAX_KINGDOM; i++) { kingdom_table[i].name = fread_string(fp); kingdom_table[i].whoname = fread_string(fp); kingdom_table[i].lord = fread_string(fp); kingdom_table[i].general = fread_string(fp); kingdom_table[i].colonel = fread_string(fp); kingdom_table[i].major = fread_string(fp); kingdom_table[i].captain = fread_string(fp); kingdom_table[i].sergent = fread_string(fp); kingdom_table[i].private = fread_string(fp); kingdom_table[i].kills = fread_number(fp); kingdom_table[i].deaths = fread_number(fp); kingdom_table[i].qps = fread_number(fp); } fclose(fp); } void do_clans(CHAR_DATA *ch, char *argument) { char buf[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; char pkratio[20]; // perhaps some colors :) int i; if (IS_NPC(ch)) return; sprintf(buf, "Name Pkills Pdeaths Ratio REQS : QP \n\r"); for (i = 1; i <= MAX_KINGDOM; i++) { /* * calculation ratio */ if (kingdom_table[i].kills > 0) { if (100 * kingdom_table[i].kills/(kingdom_table[i].kills + kingdom_table[i].deaths) < 100) sprintf(pkratio, "0.%-2d", (100 * kingdom_table[i].kills/(kingdom_table[i].kills + kingdom_table[i].deaths))); else sprintf(pkratio, "1.00"); } else sprintf(pkratio, "0.00"); /* * buffering everything */ sprintf(buf2, "%-14s %3d %3d %s \n\r", kingdom_table[i].name, kingdom_table[i].kills, kingdom_table[i].deaths, pkratio); strcat(buf, buf2); } send_to_char(buf, ch); return; } void do_cinduct(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; one_argument(argument, arg); if (IS_NPC(ch)) return; if (ch->pcdata->kingdom == 0) { send_to_char("What kingdoms did you say you where from ?\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("That's silly.\n\r", ch); return; } if (victim->pcdata->kingdom != 0) { send_to_char("They are already a member of another kingdom.\n\r", ch); return; } if (victim->pcdata->quest < kingdom_table[ch->pcdata->kingdom].req_qps) { send_to_char("They don't have the QP to get inducted.\n\r", ch); return; } if (!IS_SET(victim->pcdata->jflags, JFLAG_WANT_KINGDOM)) { send_to_char("They don't want to be inducted.\n\r", ch); return; } victim->pcdata->kingdom = ch->pcdata->kingdom; victim->pcdata->quest -= kingdom_table[ch->pcdata->kingdom].req_qps; kingdom_table[ch->pcdata->kingdom].qps += kingdom_table[ch->pcdata->kingdom].req_qps; send_to_char("You induct them into your Clan.\n\r", ch); send_to_char("You have been inducted into a Clan.\n\r", victim); return; } void do_wantclan(CHAR_DATA *ch, char *argument) { if (IS_NPC(ch)) return; if (IS_SET(ch->pcdata->jflags, JFLAG_WANT_KINGDOM)) { REMOVE_BIT(ch->pcdata->jflags, JFLAG_WANT_KINGDOM); send_to_char("You can no longer be inducted.\n\r", ch); return; } SET_BIT(ch->pcdata->jflags, JFLAG_WANT_KINGDOM); send_to_char("You can now be inducted.\n\r", ch); return; } void do_cset(CHAR_DATA *ch, char *argument) { char keyword[MAX_INPUT_LENGTH]; char value[MAX_INPUT_LENGTH]; if (IS_NPC(ch)) return; if (ch->level > 6) { imm_cset(ch, argument); return; } argument = one_argument(argument, keyword); one_argument(argument, value); if (ch->pcdata->kingdom == 0) { send_to_char("But you are not a member of a kingdom.\n\r", ch); return; } if (str_cmp(kingdom_table[ch->pcdata->kingdom].lord, ch->name)) { send_to_char("Only the leader can change the kingdom settings.\n\r", ch); return; } if (ch->pcdata->kingdom == 1) { if (keyword[0] == '\0' || value[0] == '\0') { send_to_char("What do you want to change ?\n\r\n\r", ch); send_to_char("QP req, General, SS, SA, Private.\n\r", ch); return; } else if (!str_cmp(keyword, "general")) { free_string(kingdom_table[ch->pcdata->kingdom].general); kingdom_table[ch->pcdata->kingdom].general = str_dup(value); } else if (!str_cmp(keyword, "ss")) { free_string(kingdom_table[ch->pcdata->kingdom].colonel); kingdom_table[ch->pcdata->kingdom].colonel = str_dup(value); } else if (!str_cmp(keyword, "sa")) { free_string(kingdom_table[ch->pcdata->kingdom].major); kingdom_table[ch->pcdata->kingdom].major = str_dup(value); } else if (!str_cmp(keyword, "private")) { free_string(kingdom_table[ch->pcdata->kingdom].private); kingdom_table[ch->pcdata->kingdom].private = str_dup(value); } } if (ch->pcdata->kingdom == 2) { if (keyword[0] == '\0' || value[0] == '\0') { send_to_char("What do you want to change ?\n\r\n\r", ch); send_to_char("QP req, General, Colonel, Major, Captain, Sergent, Private.\n\r", ch); return; } else if (!str_cmp(keyword, "general")) { free_string(kingdom_table[ch->pcdata->kingdom].general); kingdom_table[ch->pcdata->kingdom].general = str_dup(value); } else if (!str_cmp(keyword, "colonel")) { free_string(kingdom_table[ch->pcdata->kingdom].colonel); kingdom_table[ch->pcdata->kingdom].colonel = str_dup(value); } else if (!str_cmp(keyword, "major")) { free_string(kingdom_table[ch->pcdata->kingdom].major); kingdom_table[ch->pcdata->kingdom].major = str_dup(value); } else if (!str_cmp(keyword, "captain")) { free_string(kingdom_table[ch->pcdata->kingdom].captain); kingdom_table[ch->pcdata->kingdom].captain = str_dup(value); } else if (!str_cmp(keyword, "sergent")) { free_string(kingdom_table[ch->pcdata->kingdom].sergent); kingdom_table[ch->pcdata->kingdom].sergent = str_dup(value); } else if (!str_cmp(keyword, "private")) { free_string(kingdom_table[ch->pcdata->kingdom].private); kingdom_table[ch->pcdata->kingdom].private = str_dup(value); } } if (ch->pcdata->kingdom == 3) { if (keyword[0] == '\0' || value[0] == '\0') { send_to_char("What do you want to change ?\n\r\n\r", ch); send_to_char("QP req, Director, Trustee, Dealer, Assassin, Mercenary, Merchant, Clerk.\n\r", ch); return; } else if (!str_cmp(keyword, "director")) { free_string(kingdom_table[ch->pcdata->kingdom].general); kingdom_table[ch->pcdata->kingdom].general = str_dup(value); } else if (!str_cmp(keyword, "trustee")) { free_string(kingdom_table[ch->pcdata->kingdom].colonel); kingdom_table[ch->pcdata->kingdom].colonel = str_dup(value); } else if (!str_cmp(keyword, "dealer")) { free_string(kingdom_table[ch->pcdata->kingdom].major); kingdom_table[ch->pcdata->kingdom].major = str_dup(value); } else if (!str_cmp(keyword, "assassin")) { free_string(kingdom_table[ch->pcdata->kingdom].captain); kingdom_table[ch->pcdata->kingdom].captain = str_dup(value); } else if (!str_cmp(keyword, "merchant")) { free_string(kingdom_table[ch->pcdata->kingdom].sergent); kingdom_table[ch->pcdata->kingdom].sergent = str_dup(value); } else if (!str_cmp(keyword, "mercenary")) { free_string(kingdom_table[ch->pcdata->kingdom].private); kingdom_table[ch->pcdata->kingdom].private = str_dup(value); } } if (ch->pcdata->kingdom == 4) { if (keyword[0] == '\0' || value[0] == '\0') { send_to_char("What do you want to change ?\n\r\n\r", ch); send_to_char("Warlord, Maurauder, Assassin, Raider, Warrior, Soldier.\n\r", ch); return; } else if (!str_cmp(keyword, "warlord")) { free_string(kingdom_table[ch->pcdata->kingdom].general); kingdom_table[ch->pcdata->kingdom].general = str_dup(value); } else if (!str_cmp(keyword, "maurauder")) { free_string(kingdom_table[ch->pcdata->kingdom].colonel); kingdom_table[ch->pcdata->kingdom].colonel = str_dup(value); } else if (!str_cmp(keyword, "assassin")) { free_string(kingdom_table[ch->pcdata->kingdom].major); kingdom_table[ch->pcdata->kingdom].major = str_dup(value); } else if (!str_cmp(keyword, "raider")) { free_string(kingdom_table[ch->pcdata->kingdom].captain); kingdom_table[ch->pcdata->kingdom].captain = str_dup(value); } else if (!str_cmp(keyword, "warrior")) { free_string(kingdom_table[ch->pcdata->kingdom].sergent); kingdom_table[ch->pcdata->kingdom].sergent = str_dup(value); } else if (!str_cmp(keyword, "soldier")) { free_string(kingdom_table[ch->pcdata->kingdom].private); kingdom_table[ch->pcdata->kingdom].private = str_dup(value); } } if (ch->pcdata->kingdom == 5) { if (keyword[0] == '\0' || value[0] == '\0') { send_to_char("What do you want to change Knight, Colonel, Major, Captain, Sergent, Soldier ?\n\r\n\r", ch); send_to_char("QP req, .\n\r", ch); return; } else if (!str_cmp(keyword, "knight")) { free_string(kingdom_table[ch->pcdata->kingdom].general); kingdom_table[ch->pcdata->kingdom].general = str_dup(value); } else if (!str_cmp(keyword, "colonel")) { free_string(kingdom_table[ch->pcdata->kingdom].colonel); kingdom_table[ch->pcdata->kingdom].colonel = str_dup(value); } else if (!str_cmp(keyword, "major")) { free_string(kingdom_table[ch->pcdata->kingdom].major); kingdom_table[ch->pcdata->kingdom].major = str_dup(value); } else if (!str_cmp(keyword, "captain")) { free_string(kingdom_table[ch->pcdata->kingdom].captain); kingdom_table[ch->pcdata->kingdom].captain = str_dup(value); } else if (!str_cmp(keyword, "sergent")) { free_string(kingdom_table[ch->pcdata->kingdom].sergent); kingdom_table[ch->pcdata->kingdom].sergent = str_dup(value); } else if (!str_cmp(keyword, "soldier")) { free_string(kingdom_table[ch->pcdata->kingdom].private); kingdom_table[ch->pcdata->kingdom].private = str_dup(value); } } if (ch->pcdata->kingdom == 5) { if (keyword[0] == '\0' || value[0] == '\0') { send_to_char("What do you want to change Prince, Primogen, Elder, Justicar, Childe, Neonate, Soldier' ?\n\r\n\r", ch); send_to_char("QP req, .\n\r", ch); return; } else if (!str_cmp(keyword, "prince")) { free_string(kingdom_table[ch->pcdata->kingdom].general); kingdom_table[ch->pcdata->kingdom].general = str_dup(value); } else if (!str_cmp(keyword, "elder")) { free_string(kingdom_table[ch->pcdata->kingdom].colonel); kingdom_table[ch->pcdata->kingdom].colonel = str_dup(value); } else if (!str_cmp(keyword, "justicar")) { free_string(kingdom_table[ch->pcdata->kingdom].major); kingdom_table[ch->pcdata->kingdom].major = str_dup(value); } else if (!str_cmp(keyword, "childe")) { free_string(kingdom_table[ch->pcdata->kingdom].captain); kingdom_table[ch->pcdata->kingdom].captain = str_dup(value); } else if (!str_cmp(keyword, "neonate")) { free_string(kingdom_table[ch->pcdata->kingdom].sergent); kingdom_table[ch->pcdata->kingdom].sergent = str_dup(value); } else if (!str_cmp(keyword, "soldier")) { free_string(kingdom_table[ch->pcdata->kingdom].private); kingdom_table[ch->pcdata->kingdom].private = str_dup(value); } } else { do_cset(ch, ""); return; } send_to_char("Done.\n\r", ch); save_kingdoms(); return; } void imm_cset(CHAR_DATA *ch, char *argument) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_INPUT_LENGTH]; int i; char value[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; argument = one_argument(argument, arg1); argument = one_argument(argument, arg2); one_argument(argument, arg3); if (arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0') { send_to_char("Syntax : cset <kingdom> <field> <value>\n\r", ch); send_to_char("Valid fields : Lord, name, whoname, kills, deaths\n\r", ch); return; } if (!is_number(arg1)) { send_to_char("Please pick a number as the kingdom.\n\r", ch); return; } i = atoi(arg1); if (i < 1 || i > MAX_KINGDOM) { send_to_char("Please pick a real kingdom.\n\r", ch); return; } if (!str_cmp(arg2, "lord")) { free_string(kingdom_table[i].lord); arg3[0] = UPPER(arg3[0]); kingdom_table[i].lord = str_dup(arg3); } else if (!str_cmp(arg2, "name")) { free_string(kingdom_table[i].name); // arg3[0] = UPPER(arg3[0]); arg3[0] = LOWER(arg3[0]); kingdom_table[i].name = str_dup(arg3); } // arg3[0] = UPPER(arg3[0]); // arg3[0] = LOWER(arg3[0]); // arg3[30] = ' '; // kingdom_table[i].whoname = str_dup(arg3); // smash_tilde( argument ); // strcpy(buf,argument); // set_prefix( ch, argument ); // send_to_char( "Prefix Set.\n\r", ch ); /* else if (!str_cmp(arg2, "whoname")) { free_string(kingdom_table[i].whoname); smash_tilde( arg3 ); sprintf(buf,"#n"); strcpy(buf,arg3); kingdom_table[i].whoname = arg3; send_to_char( "Whoname Set.\n\r", ch ); } */ else if (!str_cmp(arg2, "whoname")) { free_string(kingdom_table[i].whoname); // arg3[0] = UPPER(arg3[0]); kingdom_table[i].whoname = str_dup(arg3); } else if (!str_cmp(arg2, "kills")) { kingdom_table[i].kills = atoi(arg3); } else if (!str_cmp(arg2, "deaths")) { kingdom_table[i].deaths = atoi(arg3); } else { imm_cset(ch, ""); return; } send_to_char("Done.\n\r", ch); save_kingdoms(); return; } void do_coutcast(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; one_argument(argument, arg); if (IS_NPC(ch)) return; if (ch->pcdata->kingdom == 0) { send_to_char("What kingdoms did you say you where from ?\n\r", ch); return; } if (str_cmp(kingdom_table[ch->pcdata->kingdom].lord, ch->name) && str_cmp(kingdom_table[ch->pcdata->kingdom].general, ch->name)) { send_to_char("You are not allowed to outcast members.\n\r", ch); return; } if ((victim = get_char_room(ch, arg)) == NULL) { send_to_char("Outcast whom?\n\r", ch); return; } if (IS_NPC(victim)) { send_to_char("That's a monster, not a player.\n\r", ch); return; } if (ch == victim) { send_to_char("You cannot outcast yourself.\n\r", ch); return; } if (victim->pcdata->kingdom != ch->pcdata->kingdom) { send_to_char("They are not a member of your kingdom.\n\r", ch); return; } if (!str_cmp(victim->name, kingdom_table[ch->pcdata->kingdom].lord)) { send_to_char("That is not a good plan.\n\r", ch); return; } victim->pcdata->kingdom = 0; send_to_char("Done.\n\r", ch); send_to_char("You have been outcasted from your kingdom.\n\r", victim); return; } void do_cstats(CHAR_DATA *ch, char *argument) { char buf[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; int i; if (IS_NPC(ch)) return; if ((i = ch->pcdata->kingdom) == 0) { send_to_char("You are not a member of any kingdom.\n\r", ch); return; } sprintf(buf, " [***] The Kingdom stats of %s [***]\n\r\n\r", kingdom_table[i].whoname); sprintf(buf2, " Current Lord : %s\n\r", kingdom_table[i].lord); strcat(buf, buf2); sprintf(buf2, " Current General : %s\n\r", kingdom_table[i].general); strcat(buf, buf2); sprintf(buf2, " Treasury : %d qps\n\r", kingdom_table[i].qps); strcat(buf, buf2); send_to_char(buf, ch); return; } void do_clanset(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; int i; if (IS_NPC(ch) || ch->level < 7) { send_to_char("Huh?\n\r", ch); return; } argument = one_argument(argument, arg1); one_argument(argument, arg2); if (arg1[0] == '\0' || arg2[0] == '\0') { send_to_char("Syntax : clanset <player> <kingdom number>\n\r", ch); return; } if ((victim = get_char_world(ch, arg1)) == NULL) { send_to_char("They are not here.\n\r", ch); return; } if ((i = atoi(arg2)) < 1 || i > MAX_KINGDOM) { send_to_char("Please pick a valid kingdom.\n\r", ch); return; } if (IS_NPC(victim)) { send_to_char("Please pick a player.\n\r", ch); return; } victim->pcdata->kingdom = i; send_to_char("Ok.\n\r", ch); send_to_char("Your Clan has been changed.\n\r", victim); return; }