/* ....[@@@..[@@@..............[@.................. MUD++ is a written from ....[@..[@..[@..[@..[@..[@@@@@....[@......[@.... scratch multi-user swords and ....[@..[@..[@..[@..[@..[@..[@..[@@@@@..[@@@@@.. sorcery game written in C++. ....[@......[@..[@..[@..[@..[@....[@......[@.... This server is an ongoing ....[@......[@..[@@@@@..[@@@@@.................. development project. All ................................................ contributions are welcome. ....Copyright(C).1995.Melvin.Smith.............. Enjoy. ------------------------------------------------------------------------------ Melvin Smith (aka Fusion) msmith@hom.net MUD++ development mailing list mudpp-list@mailhost.net ------------------------------------------------------------------------------ trigs.cc */ #include "bit.h" #include "trigs.h" #include "io.h" #include "room.h" #include "char.h" #include "object.h" #include "global.h" const bitType ctrig_types[] = { {0,0}, {"created", CTRIG_CREATED }, {"update", CTRIG_UPDATE }, {"given_gold", CTRIG_GIVEN_GOLD }, {"given_object", CTRIG_GIVEN_OBJECT }, {"told", CTRIG_TOLD }, {"attacked", CTRIG_ATTACKED }, {"hit", CTRIG_HIT }, {"killed", CTRIG_KILLED }, {"socialed", CTRIG_SOCIALED }, {"looked_at", CTRIG_LOOKED_AT }, {0,0} }; const bitType otrig_types[] = { {0,0}, {"created", OTRIG_CREATED }, {"update", OTRIG_UPDATE }, {"timer_out", OTRIG_TIMER_OUT }, {"picked", OTRIG_PICKED }, {"dropped", OTRIG_DROPPED }, {"given", OTRIG_GIVEN }, {"worn", OTRIG_WORN }, {"removed", OTRIG_REMOVED }, {"used", OTRIG_USED }, {"looked_at", OTRIG_LOOKED_AT }, {0,0} }; const bitType rtrig_types[] = { {0,0}, {"update", RTRIG_UPDATE }, {"dropped_item", RTRIG_DROPPED_ITEM }, {"picked_item", RTRIG_PICKED_ITEM }, {"strange_cmd", RTRIG_STRANGE_CMD }, {"said_in", RTRIG_SAID_IN }, {"entered", RTRIG_ENTERED }, {"left", RTRIG_LEFT }, {"socialed_in", RTRIG_SOCIALED_IN }, {0,0} }; // Character triggers bool ctrig_update_example1( Char * mob ) { mob->inRoom()->out("SUCCESS!\n\r"); return false; } /* * Registration part */ trigfun_entry( ctrigT_created ) char_trigger_created[] = { {0, NULL} }; trigfun_entry( ctrigT_update ) char_trigger_update[] = { {"ctrig_update_example1", ctrig_update_example1 }, {0, NULL} }; trigfun_entry( ctrigT_given_gold ) char_trigger_given_gold[] = { {0, NULL} }; trigfun_entry( ctrigT_given_object ) char_trigger_given_object[] = { {0, NULL} }; trigfun_entry( ctrigT_told ) char_trigger_told[] = { {0, NULL} }; trigfun_entry( ctrigT_attacked ) char_trigger_attacked[] = { {0, NULL} }; trigfun_entry( ctrigT_hit ) char_trigger_hit[] = { {0, NULL} }; trigfun_entry( ctrigT_killed ) char_trigger_killed[] = { {0, NULL} }; trigfun_entry( ctrigT_socialed ) char_trigger_socialed[] = { {0, NULL} }; trigfun_entry( ctrigT_looked_at ) char_trigger_looked_at[] = { {0, NULL} }; void * lookupCtrig( int type , const char * name ) { switch ( type ) { default: Cout << "Tried to lookup unknown char trigger table." << endl; return NULL; case CTRIG_CREATED: returnLookupTrig( char_trigger_created, name); case CTRIG_UPDATE: returnLookupTrig( char_trigger_update, name); case CTRIG_GIVEN_GOLD: returnLookupTrig( char_trigger_given_gold, name); case CTRIG_GIVEN_OBJECT: returnLookupTrig( char_trigger_given_object, name); case CTRIG_TOLD: returnLookupTrig( char_trigger_told, name); case CTRIG_ATTACKED: returnLookupTrig( char_trigger_attacked, name); case CTRIG_HIT: returnLookupTrig( char_trigger_hit, name); case CTRIG_KILLED: returnLookupTrig( char_trigger_killed, name); case CTRIG_SOCIALED: returnLookupTrig( char_trigger_socialed, name); case CTRIG_LOOKED_AT: returnLookupTrig( char_trigger_looked_at, name); } } const char * lookupCtrigName( int type , void * fun) { switch ( type ) { default: Cout << "Tried to lookup unknown char trigger table." << endl; return NULL; case CTRIG_CREATED: returnLookupTrigName( char_trigger_created, fun); case CTRIG_UPDATE: returnLookupTrigName( char_trigger_update, fun); case CTRIG_GIVEN_GOLD: returnLookupTrigName( char_trigger_given_gold, fun); case CTRIG_GIVEN_OBJECT: returnLookupTrigName( char_trigger_given_object, fun); case CTRIG_TOLD: returnLookupTrigName( char_trigger_told, fun); case CTRIG_ATTACKED: returnLookupTrigName( char_trigger_attacked, fun); case CTRIG_HIT: returnLookupTrigName( char_trigger_hit, fun); case CTRIG_KILLED: returnLookupTrigName( char_trigger_killed, fun); case CTRIG_SOCIALED: returnLookupTrigName( char_trigger_socialed, fun); case CTRIG_LOOKED_AT: returnLookupTrigName( char_trigger_looked_at, fun); } } const char * getCtrigName( int type, int index ) { switch ( type ) { default: Cout << "Tried to lookup unknown char trigger table." << endl; return NULL; case CTRIG_CREATED: return char_trigger_created[index].name; case CTRIG_UPDATE: return char_trigger_update[index].name; case CTRIG_GIVEN_GOLD: return char_trigger_given_gold[index].name; case CTRIG_GIVEN_OBJECT: return char_trigger_given_object[index].name; case CTRIG_TOLD: return char_trigger_told[index].name; case CTRIG_ATTACKED: return char_trigger_attacked[index].name; case CTRIG_HIT: return char_trigger_hit[index].name; case CTRIG_KILLED: return char_trigger_killed[index].name; case CTRIG_SOCIALED: return char_trigger_socialed[index].name; case CTRIG_LOOKED_AT: return char_trigger_looked_at[index].name; } } // Object triggers bool otrig_lookatme1( Object * , Char * caller ) { caller->out("This is non-standart description handling.\n\r"); return true; } /* * Registration part */ trigfun_entry( otrigT_created ) obj_trigger_created[] = { {0, NULL} }; trigfun_entry( otrigT_update ) obj_trigger_update[] = { {0, NULL} }; trigfun_entry( otrigT_timer_out ) obj_trigger_timer_out[] = { {0, NULL} }; trigfun_entry( otrigT_picked ) obj_trigger_picked[] = { {0, NULL} }; trigfun_entry( otrigT_dropped ) obj_trigger_dropped[] = { {0, NULL} }; trigfun_entry( otrigT_given ) obj_trigger_given[] = { {0, NULL} }; trigfun_entry( otrigT_worn ) obj_trigger_worn[] = { {0, NULL} }; trigfun_entry( otrigT_removed ) obj_trigger_removed[] = { {0, NULL} }; trigfun_entry( otrigT_used ) obj_trigger_used[] = { {0, NULL} }; trigfun_entry( otrigT_looked_at ) obj_trigger_looked_at[] = { {"otrig_lookatme1", otrig_lookatme1}, {0, NULL} }; trigfun_entry( otrigT_item_put_into ) obj_trigger_item_put_into[] = { {0, NULL} }; trigfun_entry( otrigT_item_get_from ) obj_trigger_item_get_from[] = { {0, NULL} }; void * lookupOtrig( int type, const char * name ) { switch ( type ) { default: Cout << "Tried to lookup unknown obj trigger table." << endl; return NULL; case OTRIG_CREATED : returnLookupTrig( obj_trigger_created, name); case OTRIG_UPDATE: returnLookupTrig( obj_trigger_update, name); case OTRIG_TIMER_OUT: returnLookupTrig( obj_trigger_timer_out, name); case OTRIG_PICKED: returnLookupTrig( obj_trigger_picked, name); case OTRIG_DROPPED: returnLookupTrig( obj_trigger_dropped, name); case OTRIG_GIVEN: returnLookupTrig( obj_trigger_given, name); case OTRIG_WORN: returnLookupTrig( obj_trigger_worn, name); case OTRIG_REMOVED: returnLookupTrig( obj_trigger_removed, name); case OTRIG_USED: returnLookupTrig( obj_trigger_used, name); case OTRIG_LOOKED_AT: returnLookupTrig( obj_trigger_looked_at, name); case OTRIG_ITEM_PUT_INTO: returnLookupTrig( obj_trigger_item_put_into, name); case OTRIG_ITEM_GET_FROM: returnLookupTrig( obj_trigger_item_get_from, name); } } const char * lookupOtrigName( int type, void * fun) { switch ( type ) { default: Cout << "Tried to lookup unknown obj trigger table." << endl; return NULL; case OTRIG_CREATED : returnLookupTrigName( obj_trigger_created, fun); case OTRIG_UPDATE: returnLookupTrigName( obj_trigger_update, fun); case OTRIG_TIMER_OUT: returnLookupTrigName( obj_trigger_timer_out, fun); case OTRIG_PICKED: returnLookupTrigName( obj_trigger_picked, fun); case OTRIG_DROPPED: returnLookupTrigName( obj_trigger_dropped, fun); case OTRIG_GIVEN: returnLookupTrigName( obj_trigger_given, fun); case OTRIG_WORN: returnLookupTrigName( obj_trigger_worn, fun); case OTRIG_REMOVED: returnLookupTrigName( obj_trigger_removed, fun); case OTRIG_USED: returnLookupTrigName( obj_trigger_used, fun); case OTRIG_LOOKED_AT: returnLookupTrigName( obj_trigger_looked_at, fun); case OTRIG_ITEM_PUT_INTO: returnLookupTrigName( obj_trigger_item_put_into, fun); case OTRIG_ITEM_GET_FROM: returnLookupTrigName( obj_trigger_item_get_from, fun); } } const char * getOtrigName( int type, int index ) { switch ( type ) { default: Cout << "Tried to lookup unknown obj trigger table." << endl; return NULL; case OTRIG_CREATED : return obj_trigger_created[index].name; case OTRIG_UPDATE: return obj_trigger_update[index].name; case OTRIG_TIMER_OUT: return obj_trigger_timer_out[index].name; case OTRIG_PICKED: return obj_trigger_picked[index].name; case OTRIG_DROPPED: return obj_trigger_dropped[index].name; case OTRIG_GIVEN: return obj_trigger_given[index].name; case OTRIG_WORN: return obj_trigger_worn[index].name; case OTRIG_REMOVED: return obj_trigger_removed[index].name; case OTRIG_USED: return obj_trigger_used[index].name; case OTRIG_LOOKED_AT: return obj_trigger_looked_at[index].name; case OTRIG_ITEM_PUT_INTO: return obj_trigger_item_put_into[index].name; case OTRIG_ITEM_GET_FROM: return obj_trigger_item_get_from[index].name; } } // Room triggers bool rtrig_drop_recycle( Room * room, Char * who, Object * what ) { who->out("You see as "); who->out(what->getName() ); who->out(" bursts in flames and vanishes.\n\r"); room->outAllCharExcept("There was a sudden burst of flame from the corner.\n\r", who, NULL); what->extract(); what->fordelete(); // it is important to return true here, as we have taken // care of all needed calls return true; } /* * Registration part */ trigfun_entry( rtrigT_update ) room_trigger_update[] = { {0, NULL } }; trigfun_entry( rtrigT_dropped_item ) room_trigger_dropped_item[] = { {"rtrig_drop_recycle", rtrig_drop_recycle}, {0, NULL} }; trigfun_entry( rtrigT_picked_item ) room_trigger_picked_item[] = { {0, NULL } }; trigfun_entry( rtrigT_strange_cmd ) room_trigger_strange_cmd[] = { {0, NULL } }; trigfun_entry( rtrigT_said_in ) room_trigger_said_in[] = { {0, NULL } }; trigfun_entry( rtrigT_entered ) room_trigger_entered[] = { {0, NULL } }; trigfun_entry( rtrigT_left ) room_trigger_left[] = { {0, NULL } }; trigfun_entry( rtrigT_socialed_in ) room_trigger_socialed_in[] = { {0, NULL } }; void * lookupRtrig( int type, const char * name ) { switch ( type ) { default: Cout << "Tried to lookup unknown room trigger table." << endl; return NULL; case RTRIG_UPDATE: returnLookupTrig( room_trigger_update, name); case RTRIG_DROPPED_ITEM: returnLookupTrig( room_trigger_dropped_item, name); case RTRIG_PICKED_ITEM: returnLookupTrig( room_trigger_picked_item, name); case RTRIG_STRANGE_CMD: returnLookupTrig( room_trigger_strange_cmd, name); case RTRIG_SAID_IN: returnLookupTrig( room_trigger_said_in, name); case RTRIG_ENTERED: returnLookupTrig( room_trigger_entered, name); case RTRIG_LEFT: returnLookupTrig( room_trigger_left, name); case RTRIG_SOCIALED_IN: returnLookupTrig( room_trigger_socialed_in, name); } } const char * lookupRtrigName( int type, void * fun) { switch ( type ) { default: Cout << "Tried to lookup unknown room trigger table." << endl; return NULL; case RTRIG_UPDATE: returnLookupTrigName( room_trigger_update, fun); case RTRIG_DROPPED_ITEM: returnLookupTrigName( room_trigger_dropped_item, fun); case RTRIG_PICKED_ITEM: returnLookupTrigName( room_trigger_picked_item, fun); case RTRIG_STRANGE_CMD: returnLookupTrigName( room_trigger_strange_cmd, fun); case RTRIG_SAID_IN: returnLookupTrigName( room_trigger_said_in, fun); case RTRIG_ENTERED: returnLookupTrigName( room_trigger_entered, fun); case RTRIG_LEFT: returnLookupTrigName( room_trigger_left, fun); case RTRIG_SOCIALED_IN: returnLookupTrigName( room_trigger_socialed_in, fun); } } const char * getRtrigName( int type, int index ) { switch ( type ) { default: Cout << "Tried to lookup unknown room trigger table." << endl; return NULL; case RTRIG_UPDATE: return room_trigger_update[index].name; case RTRIG_DROPPED_ITEM: return room_trigger_dropped_item[index].name; case RTRIG_PICKED_ITEM: return room_trigger_picked_item[index].name; case RTRIG_STRANGE_CMD: return room_trigger_strange_cmd[index].name; case RTRIG_SAID_IN: return room_trigger_said_in[index].name; case RTRIG_ENTERED: return room_trigger_entered[index].name; case RTRIG_LEFT: return room_trigger_left[index].name; case RTRIG_SOCIALED_IN: return room_trigger_socialed_in[index].name; } }