#include <skills.h> inherit "/std/object"; string *skill_names; mapping new_skills, old_skills; void setup() { set_name( "lever" ); set_short( "blue lever" ); add_adjective( "blue" ); set_long( "This blue lever is apparently an animus recalculation "+ "device. You're not totally sure how you know this, but "+ "there you are. You could pull it to have your animus "+ "recalculated, I suppose.\n" ); reset_get(); skill_names = ({ }); new_skills = ([ ]); old_skills = ([ ]); } /* setup() */ void init() { this_player()->add_command( "pull", this_object() ); } /* init() */ int find_level( string skill ) { int i, sublevel, total; string *others; others = (string *)SKILL_OB->query_immediate_children( skill ); if ( !sizeof( others ) ) if ( undefinedp( old_skills[ skill ] ) ) return (int)this_player()->query_skill( skill ); else return old_skills[ skill ]; for ( i = 0; i < sizeof( others ); i++ ) { sublevel = find_level( others[ i ] ); total += sublevel; new_skills[ others[ i ] ] = sublevel; skill_names -= ({ others[ i ] }); } return total / sizeof( others ); } /* find_level() */ int do_pull() { int i, adjust; new_skills = ([ ]); old_skills = (mapping)this_player()->query_skills(); skill_names = m_indices( old_skills ); while ( sizeof( skill_names ) ) { new_skills[ skill_names[ 0 ] ] = find_level( skill_names[ 0 ] ); skill_names = delete( skill_names, 0, 1 ); } reset_eval_cost(); skill_names = m_indices( old_skills ); for ( i = 0; i < sizeof( skill_names ); i++ ) { adjust = new_skills[ skill_names[ i ] ] - old_skills[ skill_names[ i ] ]; if ( adjust ) write( "Adjusting "+ skill_names[ i ] +" by "+ adjust +".\n" ); } this_player()->set_skills( new_skills + ([ ]) ); return 1; } /* do_pull() */