#include <kernel/kernel.h> #include <phantasmal/log.h> #include <phantasmal/lpc_names.h> #include <gameconfig.h> /* This is the AUTO object for scripts. It's meant to prevent them * from doing anything unpleasant, especially without permission. */ /* Find other scripts, but not daemons. This prevents querying random information from Phantasmal. */ static object find_object(string path) { string objname, scriptname; object obj; if(sscanf("%s:%s", objname, scriptname) == 2) { obj = ::find_object("/usr/" + objname + "/script/" + scriptname); if(obj) return obj; else return nil; } return nil; } static object compile_object(string path, varargs string source) { if(source) error("Scripts should not compile new objects from source!"); error("No compiling allowed yet..."); } static object clone_object(string path, varargs string uid) { error("Scripts should not clone new heavyweight objects!"); } static int destruct_object(mixed obj) { error("Scripts should not destruct objects!"); } static object new_object(mixed obj, varargs string uid) { return ::new_object(obj, uid); } static mixed **call_trace() { error("Scripts aren't allowed call traces yet!"); } static mixed *status(varargs mixed obj) { error("Scripts aren't allowed any status yet!"); } static object this_user() { error("Not set yet!"); } static object *users() { error("Not set yet!"); } static void swapout() { error("Scripts can't call swapout!"); } static void dump_state() { error("Scripts can't call dump_state!"); } static void shutdown() { error("Scripts can't call shutdown!"); } static mixed call_limited(string function, mixed args...) { error("Scripts can't call call_limited yet!"); } static int call_out(string function, mixed delay, mixed args...) { error("Scripts can't call call_out! Use TimeD instead."); } static mixed remove_call_out(int handle) { error("Scripts can't call remove_call_out!"); } static void add_event(string name) { error("Scripts can't use events!"); } static void remove_event(string name) { error("Scripts can't use events!"); } static string *query_events() { error("Scripts can't use events!"); } static void subscribe_event(object obj, string name) { error("Scripts can't use events!"); } static void unsubscribe_event(object obj, string name) { error("Scripts can't use events!"); } static object *query_subscribed_event(string name) { error("Scripts can't use events!"); } static void event(string name, mixed args...) { error("Scripts can't use events!"); } static void event_except(string name, object *exclude, mixed args...) { error("Scripts can't use events!"); } static string read_file(string path, varargs int offset, int size) { error("Scripts can't use files!"); } static int write_file(string path, string str, varargs int offset) { error("Scripts can't use files!"); } static int remove_file(string path) { error("Scripts can't use files!"); } static int rename_file(string from, string to) { error("Scripts can't use files!"); } static mixed **get_dir(string path) { error("Scripts can't use files!"); } static mixed *file_info(string path) { error("Scripts can't use files!"); } static int make_dir(string path) { error("Scripts can't use files!"); } static int remove_dir(string path) { error("Scripts can't use files!"); } static int restore_object(string path) { error("Scripts can't use files!"); } static void save_object(string path) { error("Scripts can't use files!"); } static string editor(varargs string cmd) { error("Scripts can't use the editor!"); } static string query_editor(object obj) { error("Scripts can't use the editor!"); } static string query_ip_name(object user) { error("Scripts can't check network data!"); } static string query_ip_number(object user) { error("Scripts can't check network data!"); } static void block_input(int flag) { error("Scripts can't block network input!"); } /* Test function -- scripts should do *something*... */ static void write_log(string msg) { ::find_object(LOGD)->write_syslog("Script: " + msg); } /* Currently, we can call_other to anybody we want. Data protection is done by not allowing scripts to get a reference to any sensitive objects. We may want to reconsider this policy later on... */ static mixed call_other(mixed obj, string function, mixed args...) { /* May want to restrict or error-check call_other later. */ return ::call_other(obj, function, args...); }