/* Copyright (c) 1993 Stephen F. White */
#include "cool.h"
#include "proto.h"
int owns (Objid player, Objid what)
{
Var p, owners;
Object *o;
if (!valid (player) || !(o = retrieve (what))) {
return 0;
}
p.type = OBJ;
p.v.obj = player;
if (var_get_global (o, "owners", &owners) != E_NONE) {
return 1;
} else if (owners.type != LIST) {
return 1;
} else if (list_ismember (p, owners.v.list)) {
return 1;
}
return 0;
}
int is_wizard (Objid player)
{
Var p, wizards;
p.type = OBJ;
p.v.obj = player;
if (player.server == 0 && player.id == SYS_OBJ) {
return 1; /* SYS_OBJ is always a wizard :) */
} else if (!valid (player)) {
return 0;
} else if (var_get_global (retrieve (sys_obj), "wizards", &wizards)
!= E_NONE) {
return 0;
} else if (wizards.type != LIST) {
return 0;
} else if (list_ismember (p, wizards.v.list)) {
return 1;
}
return 0;
}
/* Permissions should all be IN-DB!!
* Except can_program, because without that someone could take control
* of their objects out of the hands of wizards.
* Robin Powell, May 14, 1998
*
*/
int can_program(Objid player, Objid what)
{
return (owns (player, what) || is_wizard (player));
}
/*
* Can't see a need for this to not be in-DB.
*
int can_clone(Objid player, Objid what)
{
Var public;
if (owns (player, what) || is_wizard (player)) {
return 1;
} else if (var_get_global (retrieve (what), "public", &public) != E_NONE) {
return 0;
} else {
return ISTRUE (public);
}
}
*
*/
int can_clone( Objid player, Objid what)
{
return 1;
}