src/mguests.c File Reference

#include <stdlib.h>
#include "config.h"
#include "copyright.h"
#include "mudconf.h"
#include "externs.h"
#include "mguests.h"
#include "db.h"
#include "interface.h"
#include "mail.h"
#include "attrs.h"
#include "powers.h"

Include dependency graph for mguests.c:

Go to the source code of this file.

Typedefs

typedef int object_flag_type

Functions

void destroy_player (dbref)
void do_lock (dbref player, dbref cause, int key, char *name, char *keytext)
dbref create_guest (char *name, char *password)
void destroy_guest (dbref guest)
char * make_guest (DESC *d)


Typedef Documentation

typedef int object_flag_type

Definition at line 22 of file mguests.c.


Function Documentation

dbref create_guest ( char *  name,
char *  password 
)

Definition at line 24 of file mguests.c.

References A_LENTER, A_LOCK, alloc_lbuf, atr_cpy(), create_player(), do_lock(), Flags, free_lbuf, GOD, Good_obj, confdata::guest_char, confdata::guest_nuker, log_text(), move_object(), mudconf, NOTHING, Parent, Pennies(), s_Flags, s_Guest, s_Parent, s_Pennies(), s_Zone, confdata::start_room, tprintf(), Wizard, WIZARD, and Zone.

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 }

void destroy_guest ( dbref  guest  ) 

Definition at line 69 of file mguests.c.

References A_DESTROYER, atr_add_raw(), destroy_obj(), destroy_player(), Good_obj, Guest, confdata::guest_nuker, mudconf, toast_player(), tprintf(), and Wizard.

Referenced by make_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 }

void destroy_player ( dbref  victim  ) 

Destroys a player.

Definition at line 567 of file object.c.

References A_ALIAS, A_DESTROYER, atr_get_raw(), atr_pget(), boot_off(), chown_all(), delete_player_name(), destroy_obj(), do_mail_clear(), do_mail_purge(), free_lbuf, halt_que(), move_via_generic(), Name(), NOTHING, notify_quiet, toast_player(), and tprintf().

00568 {
00569         dbref aowner, player;
00570         int count, aflags;
00571         char *buf;
00572 
00573         /*
00574          * Bye bye... 
00575          */
00576         player = (dbref) atoi(atr_get_raw(victim, A_DESTROYER));
00577         toast_player(victim);
00578         boot_off(victim, (char *) "You have been destroyed!");
00579         halt_que(victim, NOTHING);
00580         count = chown_all(victim, player);
00581 
00582         /*
00583          * Remove the name from the name hash table 
00584          */
00585 
00586         delete_player_name(victim, Name(victim));
00587         buf = atr_pget(victim, A_ALIAS, &aowner, &aflags);
00588         delete_player_name(victim, buf);
00589         free_lbuf(buf);
00590 
00591         move_via_generic(victim, NOTHING, player, 0);
00592         do_mail_clear(victim, NULL);
00593         do_mail_purge(victim);
00594         destroy_obj(NOTHING, victim);
00595         notify_quiet(player, tprintf("(%d objects @chowned to you)", count));
00596 }

void do_lock ( dbref  player,
dbref  cause,
int  key,
char *  name,
char *  keytext 
)

Definition at line 343 of file set.c.

References A_LOCK, AF_LOCK, AMBIGUOUS, atr_add_raw(), atr_get_info(), atr_num(), atr_set_flags(), controls, free_boolexp(), God, init_match(), MAT_EXIT_PARENTS, match_everything(), match_result(), NOTHING, notify_quiet, NOTYPE, Owner, parse_attrib(), parse_boolexp(), Quiet, Set_attr, TRUE_BOOLEXP, unparse_boolexp_quiet(), and Wizard.

Referenced by create_guest().

00344 {
00345         dbref thing, aowner;
00346         int atr, aflags;
00347         ATTR *ap;
00348         struct boolexp *okey;
00349 
00350         if(parse_attrib(player, name, &thing, &atr)) {
00351                 if(atr != NOTHING) {
00352                         if(!atr_get_info(thing, atr, &aowner, &aflags)) {
00353                                 notify_quiet(player, "Attribute not present on object.");
00354                                 return;
00355                         }
00356                         ap = atr_num(atr);
00357 
00358                         /*
00359                          * You may lock an attribute if: * you could write *
00360                          * * * the attribute if it were stored on * yourself
00361                          * * * * * --and-- * you own the attribute or are a * 
00362                          * wizard as  *  * * long as * you are not #1 and are 
00363                          * 
00364                          * * trying to do * * something to #1. 
00365                          */
00366 
00367                         if(ap && (God(player) || (!God(thing) &&
00368                                                                           (Set_attr(player, player, ap, 0)
00369                                                                            && (Wizard(player)
00370                                                                                    || aowner == Owner(player)))))) {
00371                                 aflags |= AF_LOCK;
00372                                 atr_set_flags(thing, atr, aflags);
00373                                 if(!Quiet(player) && !Quiet(thing))
00374                                         notify_quiet(player, "Attribute locked.");
00375                         } else {
00376                                 notify_quiet(player, "Permission denied.");
00377                         }
00378                         return;
00379                 }
00380         }
00381         init_match(player, name, NOTYPE);
00382         match_everything(MAT_EXIT_PARENTS);
00383         thing = match_result();
00384 
00385         switch (thing) {
00386         case NOTHING:
00387                 notify_quiet(player, "I don't see what you want to lock!");
00388                 return;
00389         case AMBIGUOUS:
00390                 notify_quiet(player, "I don't know which one you want to lock!");
00391                 return;
00392         default:
00393                 if(!controls(player, thing)) {
00394                         notify_quiet(player, "You can't lock that!");
00395                         return;
00396                 }
00397         }
00398 
00399         okey = parse_boolexp(player, keytext, 0);
00400         if(okey == TRUE_BOOLEXP) {
00401                 notify_quiet(player, "I don't understand that key.");
00402         } else {
00403 
00404                 /*
00405                  * everything ok, do it 
00406                  */
00407 
00408                 if(!key)
00409                         key = A_LOCK;
00410                 atr_add_raw(thing, key, unparse_boolexp_quiet(player, okey));
00411                 if(!Quiet(player) && !Quiet(thing))
00412                         notify_quiet(player, "Locked.");
00413         }
00414         free_boolexp(okey);
00415 }

char* make_guest ( DESC d  ) 

Definition at line 83 of file mguests.c.

References Connected, destroy_guest(), GOD, confdata::guest_prefix, lookup_player(), mudconf, name, NOTHING, confdata::number_guests, and queue_string().

Referenced by check_connect().

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:46 2007 for BattletechMUX by  doxygen 1.4.7