MONTH_PROG SNIPPET (Smaug 1.4) Con este prog e ifcheck se pueden hacer cosas similares a lo que se hace con el time_prog, pero comprobando el mes en lugar de la hora (se puede p.ej. cargar objetos dependiendo la estacion del aņo.) 1.- El 'ifcheck' es realmente facil de incluir, solo tienes que abrir MUD_PROG.C , buscar: if ( !str_cmp(chck, "time") ) { return mprog_veval(time_info.time, opr, atoi(rval), mob ); } y aņadir debajo: if ( !str_cmp(chck, "month") ) { return mprog_veval(time_info.month, opr, atoi(rval), mob ); } Ahora haz un 'make' y puedes ya utilizarlo de la misma manera que 'if time($n).. Recuerda que en Smaug hay 17 meses (y los progs usan del 0 al 16, no del 1 al 17) Un ejemplo sencillo: >greet_prog 100~ if month($n)==3 mpecho Felices Navidades ~ | Naturalmente tambien se puede usar '>', '<', 'or', etc. 2.- Aņadir el MONTH_PROG es un poco mas laborioso, pero simplemente sigue mis indicaciones: En DB.C: busca if ( !str_cmp( name, "time_prog" ) ) return TIME_PROG; y aņade debajo if ( !str_cmp( name, "month_prog" ) ) return MONTH_PROG; En MUD_COMM.C : buscar case TIME_PROG: return "time_prog"; y aņadir debajo case MONTH_PROG: return "month_prog"; En MUD.H: buscar typedef enum{ . . . . . . }prog_types y aņadir dentro ,MONTH_PROG aņadir tambien estas funciones mas o menos por donde aparezcan otras similares void mprog_month_trigger args ( ( CHAR_DATA *mob ) ); void rprog_month_trigger ( CHAR_DATA *ch ); void oprog_month_trigger ( OBJ_DATA *obj ); En MUD_PROG.C: aņadir esto (buscar tambien otras funciones similares y ponerlas cerca, mas que nada para tenerlo un poco organizado. /************************************************************************** * Month_prog implementado por Desden, el Chaman Tibetano (J.L.Sogorb) * * Octubre 1998 * * Email: jose@luisso.net * * * **************************************************************************/ void mprog_month_check( CHAR_DATA *mob, CHAR_DATA *actor, OBJ_DATA *obj, void *vo, int type) { MPROG_DATA * mprg; for ( mprg = mob->pIndexData->mudprogs; mprg; mprg = mprg->next ) { if ( mprg->type == type && time_info.month == atoi(mprg->arglist)) mprog_driver( mprg->comlist, mob, actor, obj, vo, FALSE ); } return; } void rprog_month_check( CHAR_DATA *mob, CHAR_DATA *actor, OBJ_DATA *obj, void *vo, int type ) { ROOM_INDEX_DATA * room = (ROOM_INDEX_DATA *) vo; MPROG_DATA * mprg; for ( mprg = room->mudprogs; mprg; mprg = mprg->next ) { if ( mprg->type == type && time_info.month == atoi(mprg->arglist)) mprog_driver( mprg->comlist, mob, actor, obj, vo, FALSE ); } return; } void oprog_month_check( CHAR_DATA *mob, CHAR_DATA *actor, OBJ_DATA *obj, void *vo, int type) { MPROG_DATA * mprg; for ( mprg = obj->pIndexData->mudprogs; mprg; mprg = mprg->next ) { if ( mprg->type == type && time_info.month == atoi( mprg->arglist ) ) mprog_driver( mprg->comlist, mob, actor, obj, vo, FALSE ); } return; } void mprog_month_trigger( CHAR_DATA *mob ) { if ( HAS_PROG(mob->pIndexData,MONTH_PROG) ) mprog_month_check(mob,NULL,NULL,NULL,MONTH_PROG); } void rprog_month_trigger( CHAR_DATA *ch ) { if ( HAS_PROG(ch->in_room,MONTH_PROG)) { rset_supermob( ch->in_room ); rprog_month_check( supermob, NULL, NULL, ch->in_room,MONTH_PROG ); release_supermob(); } } void oprog_month_trigger( OBJ_DATA *obj ) { if ( HAS_PROG(obj->pIndexData, MONTH_PROG) ) { set_supermob( obj ); oprog_month_check(supermob,NULL,obj,NULL,MONTH_PROG); release_supermob(); } } En UPDATE.C: Aņadir al principio del archivo: static bool update_month_trigger; buscar time_info.month++; dentro de void time_update() y aņadir arriba update_month_trigger = 1; en char_update(void) buscar las funciones similares con time y aņadir: if (IS_NPC(ch)&& update_month_trigger==1) mprog_month_trigger(ch); if (char_died(ch)) continue; if (IS_NPC(ch)&& update_month_trigger==1) rprog_month_trigger(ch); if (char_died(ch)) continue; Buscar tambien clear_vrooms (); y aņadir justo debajo: if(time_info.hour == 1) update_month_trigger = 0; y la ultima cosa :) en obj_update(void) buscar set_cur_obj( obj ); if ( obj->carried_by ) oprog_random_trigger( obj ); else if( obj->in_room && obj->in_room->area->nplayer > 0 ) oprog_random_trigger( obj ); y cambiarlo por: set_cur_obj( obj ); if ( obj->carried_by ) { oprog_random_trigger( obj ); if(update_month_trigger==1) oprog_month_trigger(obj); } else if( obj->in_room && obj->in_room->area->nplayer > 0 ) { oprog_random_trigger( obj ); if(update_month_trigger==1) oprog_month_trigger(obj); } 3.- Ahora haz 'make clean' y 'make'. Y ya puedes usar MONTH_PROG como TIME_PROG, funciona justo en el momento que el mud cambia de mes. Se puede usar con mobs, habitaciones y objetos. Fijate que en estos progs (time y month) no es el jugador el que activa los triggers y por tanto no se puede utilizar $n, se debe usar con $i (el mob o supermob). Un ejemplo: >month_prog 5~ gritar Bueno, la Primavera ha llegado por fin ;) ~ | *************************************************************************** Espero que lo disfrutes. Si tienes alguna duda o problema, escribeme. Te agradeceria tambien que lo hiceras si usas este codigo y me cuentas que te parece. Gracias. jose@luisso.net **************** Desden, el Chaman Tibetano ---- Oct 1998 *****************