src/mguests.c

Go to the documentation of this file.
00001 /*
00002  * mguests.c - multiguest code originally ported from DarkZone 
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          * Make the player. 
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          * Turn the player into a guest. 
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          * Make sure the guest is locked. 
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          * Copy all attributes. 
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          * Nuke extra guests as new guests connect. 
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          * Locate a free guest ID, and eat it. 
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 }

Generated on Mon May 28 04:25:25 2007 for BattletechMUX by  doxygen 1.4.7