/*
....[@@@..[@@@..............[@.................. 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;
}
}