/** * This effect is for the nice people who own a transport. * @author Pinkfish * @started Fri Sep 24 1:00:00 1999 * @classification mudlib.riding.owned */ #include <player.h> inherit "/std/basic/virtual_quit_control"; class riding { object* transport; string* environments; mixed save_stuff; } private nosave int _transport_id; void create() { _transport_id = random(3000) + 1; } /* create() */ /** @ignore yes */ string query_classification() { return "mudlib.riding.owned"; } /* query_classification() */ /** @ignore yes */ int query_indefinite() { return 1; } /* query_indefinite() */ /** @ignore yes */ class riding beginning(object player, object transport, int id) { class riding bing; bing = new(class riding); bing->transport = ({ transport }); bing->save_stuff = 0; transport->set_transport_id(_transport_id++); return bing; } /* begining() */ /** @ignore yes */ class riding merge_effect(object player, class riding fluff, object transport) { if ( member_array(transport, fluff->transport) == -1) { if (!transport->query_transport_id()) { while(sizeof(filter(fluff->transport, (: $1 && $1->query_transport_id() == $2 :), _transport_id))) { _transport_id++; } transport->set_transport_id(_transport_id++); } else if (sizeof(filter(fluff->transport, (: $1 && $1->query_transport_id() == $2 :), transport->query_transport_id()))) { transport->dest_me(); return fluff; } fluff->transport += ({ transport }); } return fluff; } /* merge_effect() */ /** @ignore yes */ void end(object player, class riding arg) { //tell_creator("pinkfish", "Ending owned effect...\n"); } /* end() */ /** @ignore yes */ void restart(object player, class riding bing) { int i; object* blue; object* green; //tell_creator("pinkfish", "Restart! %O\n", bing->transport); blue = filter(bing->transport, (: $1 :)); if (!sizeof(blue) && bing->save_stuff) { green = AUTO_LOAD_OB->load_auto_load_to_array(bing->save_stuff, player); //tell_creator("pinkfish", "Cuddles %O\n", green); for (i = 0; i < sizeof(bing->transport); i++) { if (green) { bing->transport[i] = green[i]; green->move(bing->environments[i], "$N appears with a puff of fluff."); } } //tell_creator("pinkfish", "Restart! %O\n", bing->transport); } } /* restart() */ /** @ignore yes */ void clear_thingy(class riding bing) { bing->save_stuff = 0; } /* clear_thingy() */ /** @ignore yes */ void saving(object player, class riding bing) { string *env; bing->transport -= ({ 0 }); env = map(bing->transport, (: find_start_pos($1, environment($1)) :)); bing->environments = map(bing->transport, (: find_start_pos($1, environment($1)) :)); bing->save_stuff = AUTO_LOAD_OB->create_auto_load( bing->transport ); call_out( (: clear_thingy :), 2, bing); //tell_creator("pinkfish", "Saving %O %O\n", bing->transport, bing->environments); } /* saving() */ /** @ignore yes */ void quiting(object player, class riding bing) { //tell_creator("pinkfish", "Quiting %O\n", bing->transport); call_out((: $1->move("/room/rubbish", 0, "$N vanishes in a puff of fluff.") :), 2, bing->transport); } /* quiting() */ /** * This method removes the specified transport from the list of * current transports on the player. * @param player the player the transport is removed from * @param bing the class! * @param id the id of the effect * @param trans the transport to remove */ void remove_owner(object player, class riding bing, int id, object trans) { //tell_creator("pinkfish", "Remove owner of %O (%O)\n", trans, player); bing->transport -= ({ trans }); if (!sizeof(bing->transport)) { //tell_creator("pinkfish", "Deleting!\n"); player->delete_effect(id); } } /* remove_owner() */