#include <move_failures.h> inherit "/std/effect_shadow"; int actually_attacked=0; varargs void crowd_merge() { object crowd,thing; object *list; /* Original crowd may be gone -- kill this effect if that is so */ crowd=(arg())[0]; if (!crowd) { int *effs=player->effects_matching("npc.crowd.merge"); player->delete_effect(effs[0]); return; } // tell_creator("shaggy","hmm: %O %O\n",player,player->query_attacker_list()); if (sizeof(player->query_attacker_list()) || (player->query_hp()<player->query_max_hp())) { call_out( "crowd_merge", 60 ); return; } if (actually_attacked) { foreach( thing in filter(all_inventory(environment(player)), (: living($1) :) )) { if ( (list = thing->query_attacker_list()) && member_array(player,list) != -1 ) { call_out( "crowd_merge", 60 ); return; } } } if ( environment(player) == environment(crowd) ) { crowd->merge_crowd_member( player ); return; } player->add_effect( "/std/effects/npc/goto_destination", ({ file_name(environment(crowd)), ({ this_object(), "crowd_merge" }), 1 }) ); } /* crowd_merge() */ int attack_by( object thing ) { // tell_creator("shaggy","%O attacked by %O\n",player,thing); actually_attacked=1; return player->attack_by( thing ); } object crowd_object( ) { return (arg())[0]; } object crowd_number() { return (arg())[1]; } /** @ignore yes */ object do_death( object thing) { if ((arg())[0]) ((arg())[0])->crowd_member_died(); return player->do_death( thing ); } /* dest_me() */