00001
00002
00003
00004
00005 #include <stdlib.h>
00006
00007 #include "config.h"
00008 #include "copyright.h"
00009 #include "mudconf.h"
00010 #include "externs.h"
00011 #include "mguests.h"
00012 #include "config.h"
00013 #include "db.h"
00014 #include "interface.h"
00015 #include "mail.h"
00016 #include "attrs.h"
00017 #include "powers.h"
00018
00019 extern void destroy_player(dbref);
00020 extern void do_lock(dbref player, dbref cause, int key, char *name,
00021 char *keytext);
00022 typedef int object_flag_type;
00023
00024 dbref create_guest(char *name, char *password)
00025 {
00026 dbref player;
00027 char *buff;
00028
00029 if(!Wizard(mudconf.guest_nuker) || !Good_obj(mudconf.guest_nuker))
00030 mudconf.guest_nuker = 1;
00031
00032 buff = alloc_lbuf("create_guest");
00033
00034
00035
00036
00037
00038 player = create_player(name, password, mudconf.guest_nuker, 0, 1);
00039
00040 if(player == NOTHING) {
00041 log_text("GUEST: failed in create_player\n");
00042 return NOTHING;
00043 }
00044
00045
00046
00047
00048 s_Guest(player);
00049 move_object(player, mudconf.start_room);
00050 s_Flags(player, Flags(player) & ~WIZARD);
00051 s_Pennies(player, Pennies(mudconf.guest_char));
00052 s_Zone(player, Zone(mudconf.guest_char));
00053 s_Parent(player, Parent(mudconf.guest_char));
00054
00055
00056
00057
00058 do_lock(player, player, A_LOCK, tprintf("#%d", player), "me");
00059 do_lock(player, player, A_LENTER, tprintf("#%d", player), "me");
00060
00061
00062
00063
00064 atr_cpy(GOD, player, mudconf.guest_char);
00065 free_lbuf(buff);
00066 return player;
00067 }
00068
00069 void destroy_guest(dbref guest)
00070 {
00071 if(!Wizard(mudconf.guest_nuker) || !Good_obj(mudconf.guest_nuker))
00072 mudconf.guest_nuker = 1;
00073
00074 if(!Guest(guest))
00075 return;
00076
00077 toast_player(guest);
00078 atr_add_raw(guest, A_DESTROYER, tprintf("%d", mudconf.guest_nuker));
00079 destroy_player(guest);
00080 destroy_obj(mudconf.guest_nuker, guest);
00081 }
00082
00083 char *make_guest(DESC * d)
00084 {
00085 int i;
00086 dbref player, p2;
00087 static char name[50];
00088
00089
00090
00091
00092
00093 for(i = 0; i < mudconf.number_guests; i++) {
00094 sprintf(name, "%s%d", mudconf.guest_prefix, i + 1);
00095 p2 = lookup_player(GOD, name, 0);
00096 if(p2 != NOTHING && !Connected(p2))
00097 destroy_guest(p2);
00098 }
00099
00100
00101
00102
00103
00104 for(i = 0; i < mudconf.number_guests; i++) {
00105 sprintf(name, "%s%d", mudconf.guest_prefix, i + 1);
00106 player = lookup_player(GOD, name, 0);
00107 if(player == NOTHING)
00108 break;
00109 }
00110
00111 if(i == mudconf.number_guests) {
00112 queue_string(d,
00113 "GAME: All guest ID's are busy, please try again later.\n");
00114 return NULL;
00115 }
00116 sprintf(name, "%s%d", mudconf.guest_prefix, i + 1);
00117 player = create_guest(name, mudconf.guest_prefix);
00118
00119 if(player == NOTHING) {
00120 queue_string(d,
00121 "GAME: Error creating guest ID, please try again later.\n");
00122 log_text(tprintf
00123 ("GUEST: Error creating guest ID. '%s' already exists.\n",
00124 name));
00125 return NULL;
00126 }
00127 return Name(player);
00128 }