/***************************************************************************
* 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;
}