/*************************************************************************** * 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. * ***************************************************************************/ /*************************************************************************** * God Wars Mud copyright (C) 1994, 1995, 1996 by Richard Woolcock * * * * Legend of Chrystancia copyright (C) 1999, 2000, 2001 by Matthew Little * * This mud is NOT to be copied in whole or in part, or to be run without * * the permission of Matthew Little. Nobody else has permission to * * authorise the use of this code. * ***************************************************************************/ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <ctype.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <assert.h> #include <unistd.h> #include <stdarg.h> #include <limits.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include "merc.h" #include "build.h" void initialise_email_list() { FILE *fp; email_list = NULL; if ((fp = fopen(EMAIL_DB,"r"))==NULL) return; for ( ; ; ) { EMAIL_DATA *s; char letter; if ( (letter = fread_letter( fp ) ) == '~' ) break; s = alloc_perm( sizeof(*s) ); s->address = fread_string( fp ); s->next = email_list; email_list = s; } fclose( fp ); } void add_email_to_list(char *address) { EMAIL_DATA *s; FILE *fp; if (address == NULL || !str_cmp(address, "END")) return; s = alloc_perm( sizeof(*s) ); s->address = str_dup(address); s->next = email_list; email_list = s; if ((fp = fopen(EMAIL_DB,"w"))==NULL) { bug("Error saving email.list!",0); return; } for (s = email_list; s != NULL; s = s->next) fprintf(fp, "-%s~\n", s->address); fprintf(fp, "~"); fclose( fp ); } bool check_email(char *address) { EMAIL_DATA *em; for (em = email_list; em != NULL; em = em->next) if (!str_cmp(em->address, address)) return TRUE; return FALSE; } void do_email_list( CHAR_DATA *ch, char *argument ) { emailing_to = email_list; } void email_next() { char buf[MAX_STRING_LENGTH]; if (emailing_to == NULL || dice(1, 10) != 4) return; sprintf(buf, "AutoEmailing %s", emailing_to->address); log_string(buf, NULL); sprintf(buf, "mail -s 'The Oracle - Automailer' %s < email.mesg&", emailing_to->address); system(buf); emailing_to = emailing_to->next; } void email_character( CHAR_DATA *ch ) { FILE *fp; char buf[MAX_STRING_LENGTH]; if (ch == NULL || ch->email_set != 1 || IS_NPC(ch)) return; if ((fp = fopen("email.tmp","w"))==NULL) return; fprintf(fp, "This is an automatic email from the MUD The Oracle\n\n"); fprintf(fp, "Character Registration Information:\n\n"); fprintf(fp, "Name: %s Registration Key: %d\n\n", ch->name, ch->registration_key); fprintf(fp, "This email was generated by : %s\n\n", ch->desc->host); fprintf(fp, "\nIf you have received this email in error please ignore.\n"); fclose( fp ); sprintf(buf, "mail -s 'The Oracle - Automailer' %s < email.tmp&",ch->pcdata->email); system(buf); } void do_register(CHAR_DATA *ch, char *argument) { char arg[MAX_INPUT_LENGTH]; if (IS_NPC(ch)) return; if (ch->registerred == 1 && !IS_IMMORTAL(ch)) { stc("You have already registerred.\n\r",ch); return; } if (ch->registration_key < 100000 && !IS_IMMORTAL(ch)) ch->registerred = 0; if (ch->pcdata->email == NULL) { stc("You must use the email command to enter your email address first.\n\r",ch); return; } if (argument[0] == '\0') { stc("Syntax: register email <address>\n\r",ch); stc(" register key <key code>\n\r",ch); if (IS_IMMORTAL(ch)) stc(" register player <name>\n\r",ch); return; } argument = one_argument(argument, arg); if (arg[0] == '\0' || (str_prefix(arg, "email") && str_prefix(arg, "key") && (!IS_IMMORTAL(ch) || str_prefix(arg, "player")))) { stc("Syntax: register email <address>\n\r",ch); stc(" register key <key code>\n\r",ch); if (IS_IMMORTAL(ch)) stc(" register player <name>\n\r",ch); return; } if (!str_prefix(arg, "player")) { CHAR_DATA *wch; if (argument[0] == '\0') { stc("Overide Registration on which character?\n\r",ch); return; } if ((wch = get_char_world(ch, argument)) != NULL) { wch->registerred = 1; wch->email_set = 2; save_char_obj( wch ); send_to_char("Character Registerred.\n\r",wch); send_to_char("You can now save.\n\r",wch); stc("They have now been registerred.\n\r",ch); return; } else { stc("They are not playing at the moment.\n\r",ch); return; } } if (!str_prefix(arg, "email")) { if (ch->email_set != 0) { stc("You have already registerred your email address.\n\r",ch); return; } if (!str_cmp(argument, ch->pcdata->email)) { // if (check_email(argument)) // { // stc("That email address has already been taken.\n\r",ch); // return; // } while (ch->registration_key < 100000) { ch->registration_key = dice(1,899999) + 100000; } ch->email_set = 1; email_character( ch ); ch->registerred = 3; save_char_obj( ch ); stc("Email address registerred. Registration Email sent.\n\r",ch); stc("Your character has been saved.\n\r",ch); return; } else { stc("Your two entered email addresses differ.\n\r",ch); stc("The one entered using the email command is:\n ",ch); stc(ch->pcdata->email,ch); stc("\n\rEither correct using the email command, or enter this address correctly\n\rwith the register command.\n\r",ch); return; } } if (!str_prefix(arg, "key")) { char buf[MAX_INPUT_LENGTH]; if (ch->registration_key < 100000) { stc("Invalid Registration Key.\n\r",ch); stc("Please re-register.\n\r",ch); ch->email_set = 0; return; } sprintf(buf, "%d", ch->registration_key); if (!str_cmp(argument, buf)) { ch->registerred = 1; ch->email_set = 2; save_char_obj( ch ); add_email_to_list( ch->pcdata->email ); send_to_char("Character Registered.\n\r",ch); send_to_char("You can now save.\n\r",ch); } else { stc("The registration key you have entered is not correct.\n\r",ch); } } } void do_reregister(CHAR_DATA *ch, char *argument) { CHAR_DATA *vch; if (argument[0] == '\0') { stc("Syntax: reregister <character>\n\rUsed if they used an invalid email account for registerring.\n\r", ch); return; } if ((vch = get_char_world(ch, argument)) == NULL) { stc("They are not logged on.\n\r",ch); return; } vch->registerred = 0; vch->email_set = 0; stc("They can now register.\n\r",ch); stc("You can now attempt to register again.\n\r",vch); }