/* * add_command examples for the cre school * Feb 2 '02 by Avelan */ #include "defs.h" inherit ROOM_OBJ; /* * The next line is called a prototype. * It is needed in order for the * add command to work properly. */ int do_smash(); /* * Here we declare that the variable smashed * is an integrer(number), and we then * initialize it(set the value to 0 in this case) */ int smashed = 0; void setup(){ set_light(80); set_short("add_command school"); set_long("So, let's make our first, very" " simple add_command. Say we want to be" " able to smash the table that's standing" " in the room. In this case, the table" " will be just an add_item and when we" " smash it, we'll just change the description" " of the item.\nThere's a table in the middle" " of the room.\n"); /* * So, you wonder.. this isn't an add_command really, * what is it then? * well, here we're using a function pointer, so when you * do smash table, the do_smash function is called and * executed. */ add_item("table",({"long","The table is nice and shiny.", "smash",({ (: do_smash :) , "<direct:object>" }) }) ); add_exit("back",ADD_SC+"start","path"); } /* setup() */ void reset(){ /* * Let's make the table nice and shiny again at every * reset so other's can smash it too. * Also, remember to set the smashed variable back to * 0 so the command will work. :) */ modify_item("table",({"long","The table is nice and shiny.", "smash",({ (: do_smash :) , "<direct:object>" }) }) ); smashed = 0; } /* reset() */ int do_smash(){ /* * So, if the smashed variable has been set to 1, * it means that the table has been smashed already * and can't be smashed again. * This line checks if the variable is anything other * 0, the command will fail. */ if(smashed){ add_failed_mess("The table has already been smashed.\n"); return 0; } /* * Ok, everything seems to be fine, let's modify * the tables description to show that it's smashed. */ modify_item("table",({"long","The table has been smashed into" " little pieces.", "smash",({ (: do_smash :) , "<direct:object>" }) }) ); /* * Ok, another nice feature to add_command. * This line adds a message to use when we succeed in the * command. * The $N and $V expand to the person doing the command and * to the verb used. * ie. This would expand to 'You smash the table into little pieces.' * to you and others would see 'Avelan smashes the table into little * pieces' * help add_succeeded_mess for more information. */ add_succeeded_mess("$N $V the table into little pieces.\n"); /* * Let's set the smashed property to 1 so we can't * smash the table again before next reset() of the room. */ smashed = 1; /* * Again, you need to return 1 which tells that the command * succeeded. */ return 1; } /* do_smash() */