mud++0.35/etc/
mud++0.35/etc/guilds/
mud++0.35/help/propert/
mud++0.35/mudC/
mud++0.35/player/
mud++0.35/src/interface/
mud++0.35/src/os/cygwin32/
mud++0.35/src/os/win32/
mud++0.35/src/os/win32/bcppbuilder/
mud++0.35/src/osaddon/
mud++0.35/src/util/
/*
....[@@@..[@@@..............[@.................. 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;
}

}