#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 int object_flag_type |
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 }
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 }