new object $world: $utilities, $event_handler; var $event_handler events = 0; var $event_handler hooked = #[]; var $event_handler hooks = #[]; var $root created_on = 850845715; var $root defined_settings = #[["managed", #[['parse, ['is_type, 'list, 'objnum]]]], ["starting-place", #[['parse, ['is_type, 'objnum]]]], ["heartbeat-rate", #[['parse, ['is_type, 'integer]]]], ["weather-rate", #[['parse, ['is_type, 'integer]]]]]; var $root flags = ['variables, 'methods, 'code, 'core]; var $root inited = 1; var $root managed = [$world]; var $root manager = $world; var $root settings = #[["managed", []], ["starting-place", $the_pit], ["heartbeat-rate", 600], ["weather-rate", 1500]]; var $root trusted = [$realm]; var $world last_weather_change = 872012808; root method .core_world() { .set_setting("managed", $world, "[]"); .set_setting("starting-place", $world, $the_pit); }; public method .pulse() { var i, d, weather_ticked, t; (> .perms(sender(), $heart) <); t = time(); weather_ticked = 0; if (t >= (last_weather_change + (.get_setting("weather-rate", $world)))) { weather_ticked = 1; last_weather_change = t; } for i in (.get_setting("managed", $world)) { pause(); catch any { i.advance_weather(weather_ticked); } with { (| (i.manager()).tell_traceback(traceback()) |); (| (i.manager()).tell(("Weather change failed for " + i) + ".") |); } } }; public method .send_event() { arg @args; (> .perms(caller(), 'trusts) <); pass(@args); }; public method .shutdown() { (> .perms(sender(), 'manager) <); $heart.del_heartbeat(); }; public method .starting_place() { return (| .get_setting("starting-place", $world) |) || $body_cave; }; public method .startup() { arg @args; (> .perms(sender(), 'manager) <); $heart.add_heartbeat(.get_setting("heartbeat-rate", $world)); last_weather_change = 0; };