/** * This is the map helper object. It contains all the current information * about the files. It stores the current directory and keeps track of * if things have changed so it does not save or load excessively. * @author Wodan */ #include <map_handler.h> mapping shorts = ([ ]), movezones = ([ ]), changetimes = ([ ]) #if !efun_defined(db_exec) , clusters = ([ ]), map = ([ ]) #endif ; #ifdef COORDS mapping coords = ([ ]), sizes = ([ ]); #endif string directory; /* directory of current rooms */ nosave string loaded; /* name of savefile */ nosave int save; /* save needed? */ void create() { seteuid( (string)master()->get_bb_uid() ); } /* create() */ /** * This method saves the state of the currently loaded directory. * @see check_dir() */ void save_dir() { #ifdef HELPLOGTO tell_object( find_living( LOGTO ), "%^RED%^saving%^RESET%^ "+ loaded +"\n"); #endif // Check to make sure their is actually something in the directory. if (sizeof(shorts) || sizeof(movezones) || sizeof(changetimes) || #ifdef COORDS sizeof(coords) || sizeof(sizes) || #endif #if !efun_defined(db_exec) sizeof(clusters) || sizeof(map) || #endif 0) { unguarded((: save_object, "/save/map/" + loaded :)); } else { // Nothing in the dir, remove it. unguarded((: rm("/save/map/" + loaded) :)); } save = 0; } /* save_dir */ /** * This method attempts to load in the save file information for * the specified directory. If the directory has no save file * then the mappings will all be initialised to empty. It will cause * the previous directory to be saved if this is attempting to load a * different one. * @param dir the directory to load the save information for * @see save_dir() */ void check_dir( string dir ) { string tmp_file; if ( dir == directory ) { return; } if ( save ) { save_dir(); } tmp_file = replace_string( dir, "/", "_" ); shorts = ([ ]); movezones = ([ ]); changetimes = ([ ]); #if !efun_defined(db_exec) clusters = ([ ]); map = ([ ]); #endif #ifdef COORDS coords = ([ ]); sizes = ([ ]); #endif if ( file_size( "/save/map/" + tmp_file + ".o" ) > 0 ) { #ifdef HELPLOGTO tell_object( find_living( LOGTO ), "%^GREEN%^loading%^RESET%^ "+ tmp_file +"\n"); #endif unguarded((: restore_object, "/save/map/" + tmp_file :)); } else { #ifdef HELPLOGTO tell_object( find_living( LOGTO ), "%^BLUE%^newmap%^RESET%^ "+ tmp_file +"\n"); #endif shorts = ([ ]); movezones = ([ ]); changetimes = ([ ]); #if !efun_defined(db_exec) clusters = ([ ]); map = ([ ]); #endif #ifdef COORDS coords = ([ ]); sizes = ([ ]); #endif } loaded = tmp_file; directory = dir; } /* check_dir */ #if !efun_defined(db_exec) /** * This method will change the destination direction array for the * given room. * @param dir the directory to change * @param room the room to change * @param dd the new destination directory */ void change_map( string dir, string room, string *dd ) { check_dir( dir ); map[ room ] = dd; save = 1; } /* change_map() */ /** * This method returns the current destination direction mapping for * the given directory. * @param dir the directory to return the mapping for * @return the destination direction mapping */ mapping query_map( string dir ) { check_dir( dir ); if ( !map ) return ([ ]); return map; } /* query_map() */ #endif /** * This method changes the short for the specified directory and room. * @param dir the directory to change the short for * @param room the room the change the short for * @param sh the new short for the room */ void change_shorts( string dir, string room, string sh ) { check_dir( dir ); shorts[ room ] = sh; save = 1; } /* change_shorts() */ /** * This method returns the mapping containing all the shorts for the * specified directory. * @param dir the directory to return the shorts for * @return the mapping of short descriptions */ mapping query_shorts( string dir ) { check_dir( dir ); if ( !shorts ) { return ([ ]); } return shorts; } /* query_shorts() */ /** * This method changes the move zones for the specified room. * @param dir the directory to change the move zones in * @param room the room to change the move zones in * @param zones the new move zones */ void change_movezones( string dir, string room, string *zones ) { check_dir( dir ); movezones[ room ] = zones; save = 1; } /* change_movezones() */ /** * This method returns the mapping of move zones for the specified * room. * @param dir the directory to return the move zones for * @return the move zone mapping */ mapping query_movezones( string dir ) { check_dir( dir ); if ( !movezones ) return ([ ]); return movezones; } /* query_movezones() */ #if !efun_defined(db_exec) /** * This method will change the cluster for the specified room. * @param dir the directory to change the cluster for * @param room the room to change the cluster for * @param cluster the new cluster number */ void change_clusters( string dir, string room, int cluster ){ check_dir( dir ); if(!clusters) clusters = ([]); //how can this be?? clusters[ room ] = cluster; save = 1; } /* change_clusters() */ /** * This method returns the cluster mapping for the specified directory. * @param dir the directory to return the cluster mapping for * @return the cluster mapping for the directory */ mapping query_clusters( string dir ){ check_dir( dir ); if( !clusters ) return ([ ]); return clusters; } /* query_clusters() */ #endif /** * This method changes the time at which the specified room was last * changed. * @param dir the directory to change the last modified date for * @param room the room to set the modied time for * @param time the new time */ void change_changetimes( string dir, string room, int time ) { check_dir( dir ); if ( !changetimes ) changetimes = ([ ]); changetimes[ room ] = time; save = 1; } /* change_changetimes() */ /** * This method returns the mapping of rooms to last modified dates. * @param dir the directory to return the mapping for * @return the mapping of last modified dates */ mapping query_changetimes( string dir ) { check_dir( dir ); if ( !changetimes ) return ([ ]); return changetimes; } /* query_changetimes() */ #ifdef COORDS /** * This method changes the coordinates for the specified room/. * @param dir the directory to change the room in * @param room the room to change in the directory * @param coord the new coordinate */ void change_co_ords( string dir, string room, int *coord ) { check_dir( dir ); if ( !coords ) coords = ([ ]); coords[ room ] = coord; save = 1; } /* change_co_ords() */ /** * This method returns the mapping of coordinates to rooms. * @param dir the directory to return the mapping for * @return the mapping of coordinates to rooms */ mapping query_co_ords( string dir ) { check_dir( dir ); if ( !coords ) return ([ ]); return coords; } /* query_co_ords() */ /** * This method changes the roomsize for the specified room. * @param dir the directory to change the room in * @param room the room to change in the directory * @param coord the new size; */ void change_sizes( string dir, string room, int size ) { check_dir( dir ); if ( !sizes ) sizes = ([ ]); sizes[ room ] = size; save = 1; } /* change_sizes() */ /** * This method returns the mapping of sizes for rooms. * @param dir the directory to return the mapping for * @return the mapping of sizes for rooms. */ mapping query_sizes( string dir ) { check_dir( dir ); if ( !sizes ) return ([ ]); return sizes; } /* query_sizes() */ #endif /** * This method deletes the specified room from the directory. * @param dir the directory to remove the room from * @param room the room to remove */ void del( string dir, string room ) { check_dir( dir ); #if !efun_defined(db_exec) if (mappingp(map)) { map_delete( map, room ); } else { map = ([ ]); } #endif if (mappingp(shorts)) { map_delete( shorts, room ); } else { shorts = ([ ]); } if (mappingp(movezones)) { map_delete( movezones, room ); } else { movezones = ([ ]); } if (mappingp(changetimes)) { map_delete( changetimes, room ); } else { changetimes = ([ ]); } #if !efun_defined(db_exec) if (mappingp(clusters)) { map_delete( clusters, room ); } else { clusters = ([ ]); } #endif #ifdef COORDS if (mappingp(coords)) { map_delete( coords, room ); } else { coords = ([ ]); } if (mappingp(sizes)) { map_delete( sizes, room ); } else { sizes = ([ ]); } #endif save = 1; } /* del() */