Beispiel #1
0
void roomSetPersistent(ROOM_DATA *room, bool val) {
  PERSISTENT_DATA *data = roomGetAuxiliaryData(room, "persistent_data");

  // if it was persistent before and not now, clear our database entry
  if(data->persistent == TRUE && val == FALSE)
    worldClearPersistentRoom(gameworld, roomGetClass(room));

  data->persistent = val;
}
Beispiel #2
0
//
// add 'activity' to a persistent room. If a persistent room is active, make it
// automatically load at bootup, so the activity can continue
void roomAddActivity(ROOM_DATA *room) {
  PERSISTENT_DATA *data = roomGetAuxiliaryData(room, "persistent_data");
  data->activity++;
  data->last_use = current_time;

  // add us to the list of active rooms
  //***********
  // FINISH ME
  //***********
}
Beispiel #3
0
void roomRemoveActivity(ROOM_DATA *room) {
  PERSISTENT_DATA *data = roomGetAuxiliaryData(room, "persistent_data");
  data->activity--;

  // remove us from the list of active rooms
  if(data->activity == 0) {
    //***********
    // FINISH ME
    //***********
  }
}
Beispiel #4
0
//
// every pulse, randomly sample our room table. If we find a persistent
// room that hasn't been active for awhile, unload it to disk so we aren't
// hogging up memory usage with a ton of unused rooms. Notably, this function
// kind of sucks because rooms get their UIDs from the same pool as objects
// and characters. That means a randomly generated UID is not always a room
// uid. It may also select room UIDs that have already been unloaded. What we
// really want to do is just sample a room from a known set of existing rooms.
// 
// This function has been disabled until it is improved a little.
//
void close_unused_rooms_event(void *owner, void *unused, const char *arg) {
  int top = top_uid();
  if(top == NOTHING)
    return;

  // randomly sample from the room table
  int  uid_to_try = (rand() % (top - START_UID)) + START_UID;
  ROOM_DATA *room = propertyTableGet(room_table, uid_to_try);
  if(room == NULL)
    return;

  PERSISTENT_DATA *data = roomGetAuxiliaryData(room, "persistent_data");

  // we've been inactive for more than 15 minutes, unload us
  if(data->persistent && data->activity == 0 && 
     difftime(current_time, roomGetLastUse(room)) > 60 * 15)
    extract_room(room);
}
PyObject *roomGetPyFormBorrowed(ROOM_DATA *room) {
  TRIGGER_AUX_DATA *data = roomGetAuxiliaryData(room, "trigger_data");
  if(data->pyform == NULL)
    data->pyform = newPyRoom(room);
  return data->pyform;
}
LIST *roomGetTriggers(ROOM_DATA *room) {
  TRIGGER_AUX_DATA *data = roomGetAuxiliaryData(room, "trigger_data");
  return data->triggers;
}
Beispiel #7
0
void roomClearPersistentDirty(ROOM_DATA *room) {
  PERSISTENT_DATA *data = roomGetAuxiliaryData(room, "persistent_data");
  data->dirty = FALSE;
}
Beispiel #8
0
void roomSetPersistentDirty(ROOM_DATA *room) {
  PERSISTENT_DATA *data = roomGetAuxiliaryData(room, "persistent_data");
  data->dirty = TRUE;
}
Beispiel #9
0
bool roomIsPersistentDirty(ROOM_DATA *room) {
  PERSISTENT_DATA *data = roomGetAuxiliaryData(room, "persistent_data");
  return data->dirty;
}
Beispiel #10
0
time_t roomGetLastUse(ROOM_DATA *room) {
  PERSISTENT_DATA *data = roomGetAuxiliaryData(room, "persistent_data");
  return data->last_use;
}
Beispiel #11
0
//*****************************************************************************
// interaction with the persistent aux data
//*****************************************************************************
void roomUpdateLastUse(ROOM_DATA *room) {
  PERSISTENT_DATA *data = roomGetAuxiliaryData(room, "persistent_data");
  data->last_use = current_time;
}