I'll attach my clan file, and I hope SOMEONE can give me some
insight on this.
First problem:
It doesn't read the clan file at boot up... well,
it's SUPPOSE to, I've added load_clans(): after
load_banned(); but whenever I do clans(which shows all
the clans) it says no clans made. I've made the
#define FILE_CLANS "misc/clans" etc too..
Then whenever I do makeclan blah blah then do clans
it crashes. Any ideas why?
Second problem:
Shees, can't rember the second one... slipped my mind:P
Thanks for any help!
Corey Hoitsma AKA -= Myrddin =-
choitsma@netcom.com
Tazmania tazmania.ah.net 7000
==============================================================================
Content-ID: <Pine.3.89.9607012156.A29043@netcom18>
Content-Description:
/* * * * * *
A clan file, mayde by Myrddin
* * * * */
#include "conf.h"
#include "sysdep.h"
#include "structs.h"
#include "utils.h"
#include "comm.h"
#include "interpreter.h"
#include "handler.h"
#include "db.h"
struct clan_list_element *clan_list = NULL;
int number_clans = 0;
char *clan_types[] = {
"MAGE",
"WARRIOR",
"THIEF",
"CLERIC",
"KNIGHT",
"OPEN",
"*ERROR*"
};
void load_clans(void)
{
FILE *fl;
int i, clan_date, clan_num;
char clan_leader[80], clan_type[10];
char clan_name[80];
struct clan_list_element *next_node;
clan_list = 0;
if (!(fl = fopen(CLAN_FILE, "r"))) {
perror("Unable to open clan file");
return; }
/* NUM, TYPE, CLAN NAME, LEADER, MADE */
while(fscanf(fl, " %d %s %s %d %s ", &clan_num, clan_type, clan_name, &clan_date, clan_leader) == 4) {
CREATE(next_node, struct clan_list_element, 1);
strncpy(next_node->name, clan_name, 80);
next_node->name[80] = '\0';
strncpy(next_node->leader, clan_leader, MAX_NAME_LENGTH);
next_node->name[MAX_NAME_LENGTH] = '\0';
next_node->date = clan_date;
next_node->number = clan_num;
for (i = CLAN_MAGE; i <= CLAN_OPEN; i++)
if (!strcmp(clan_type, clan_types[i]))
next_node->type = i;
number_clans++;
next_node->next = clan_list;
clan_list = next_node;
}
fclose(fl);
}
void _write_one_clan_node(FILE * fp, struct clan_list_element * node)
{
if (node) {
_write_one_clan_node(fp, node->next);
fprintf(fp, " %d %s %s %ld %s\n", node->number, clan_types[node->type],
node->name, (long) node->date, node->leader);
}
}
void write_clan_list(void)
{
FILE *fl;
if (!(fl = fopen(CLAN_FILE, "w"))) {
perror("write_clan_list");
return;
}
_write_one_clan_node(fl, clan_list);/* recursively write from end to
start */
fclose(fl);
return;
}
ACMD(do_clans)
{
char clan[MAX_INPUT_LENGTH],
format[MAX_INPUT_LENGTH], *timestr;
struct clan_list_element *clan_node;
load_clans();
*buf = '\0';
if (!*argument) {
if (!clan_list) {
send_to_char("No clans are made.\r\n", ch);
return;
}
strcpy(format, "%-5.5s %-15.15s %-10.10s %-10.10s %-16.16s\r\n");
sprintf(buf, format,
"Clan Number",
"Clan Name",
"Clan Type",
"When Made",
"Clan Leader");
send_to_char(buf, ch);
sprintf(buf, format,
"---------------------------------",
"---------------------------------",
"---------------------------------",
"---------------------------------");
send_to_char(buf, ch);
for (clan_node = clan_list; clan_node; clan_node = clan_node->next) {
if (clan_node->date) {
timestr = asctime(localtime(&(clan_node->date)));
*(timestr + 10) = 0;
strcpy(clan, timestr);
} else
strcpy(clan, "Unknown");
sprintf(buf, format, (char)clan_node->number, clan_node->name,
clan_types[clan_node->type], clan, clan_node->leader);
send_to_char(buf, ch);
}
return;
}
}
ACMD (do_makeclan)
{
char flag[MAX_INPUT_LENGTH], clan[MAX_INPUT_LENGTH], leader[MAX_INPUT_LENGTH];
char *nextchar;
int i, number;
struct clan_list_element *clan_node;
*buf = '\0';
three_arguments(argument, flag, clan, leader);
if (!*clan || !*flag || !*leader) {
send_to_char("Usage: makeclan {CLASS | OPEN} clan_name leader\r\n", ch);
return;
}
if (!(!str_cmp(flag, "m") || !str_cmp(flag, "w") ||
!str_cmp(flag, "t") || !str_cmp(flag, "c") || !str_cmp(flag, "k") ||
!str_cmp(flag, "o"))) {
send_to_char("Flag must be M, W, T, C, K or O.\r\n", ch);
return;
}
for (clan_node = clan_list; clan_node; clan_node = clan_node->next) {
if (!str_cmp(clan_node->name, clan)) {
send_to_char("That clan is already made!\r\n", ch);
return;
}
}
number = number_clans;
number++;
CREATE(clan_node, struct clan_list_element, 1);
clan_node->number = number;
strncpy(clan_node->name, clan, 80);
/* for (nextchar = clan_node->name; *nextchar; nextchar++)
*nextchar = LOWER(*nextchar);*/
clan_node->name[80] = '\0';
strncpy(clan_node->leader, leader, MAX_NAME_LENGTH);
clan_node->leader[MAX_NAME_LENGTH] = '\0';
clan_node->date = time(0);
for (i = CLAN_MAGE; i <= CLAN_OPEN; i++)
if (!str_cmp(flag, clan_types[i]))
clan_node->type = i;
clan_node->next = clan_list;
clan_list = clan_node;
sprintf(buf, "%s has made a new clan [%s], leader [%s] for %s players.",
GET_NAME(ch), clan, leader,
clan_types[clan_node->type]);
mudlog(buf, NRM, MAX(LVL_GOD, GET_INVIS_LEV(ch)), TRUE);
send_to_char("Clan Made.\r\n", ch);
write_clan_list();
}
ACMD(do_rmclan)
{
char clan[80];
struct clan_list_element *clan_node, *temp;
int found = 0;
one_argument(argument, clan);
if (!*clan) {
send_to_char("A clan name might help.\r\n", ch);
return;
}
clan_node = clan_list;
while (clan_node && !found) {
if (!str_cmp(clan_node->name, clan))
found = 1;
else
clan_node = clan_node->next;
}
if (!found) {
send_to_char("That clan isn't even made yet!\r\n", ch);
return;
}
REMOVE_FROM_LIST(clan_node, clan_list, next);
send_to_char("Clan removed.\r\n", ch);
sprintf(buf, "%s removed the %s clan.",
GET_NAME(ch), clan_node->name);
mudlog(buf, NRM, MAX(LVL_GOD, GET_INVIS_LEV(ch)), TRUE);
free(clan_node);
write_clan_list();
}
This archive was generated by hypermail 2b30 : 12/07/00 PST