/* Copyright (c) 1993 Stephen F. White */ #include <stdio.h> #include "config.h" #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; } int can_program(Objid player, Objid what) { return (owns(player, what) || is_wizard(player)); } 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); } }