コード例 #1
0
ファイル: furniture.c プロジェクト: KaSt/nereamud
//*****************************************************************************
// hooks
//*****************************************************************************
void furniture_append_hook(const char *info) {
  OBJ_DATA *obj = NULL;
  CHAR_DATA *ch = NULL;
  hookParseInfo(info, &obj, &ch);

  if(objIsType(obj, "furniture")) {
    int num_sitters = listSize(objGetUsers(obj));

    // print out how much room there is left on the furniture
    int seats_left = (furnitureGetCapacity(obj) - num_sitters);
    if(seats_left > 0)
      bprintf(charGetLookBuffer(ch), 
	      " It looks like it could fit %d more %s.\r\n",
	      seats_left, (seats_left == 1 ? "person" : "people"));

    // print character names
    if(num_sitters > 0) {
      LIST *can_see = find_all_chars(ch, objGetUsers(obj), "", NULL, TRUE);
      listRemove(can_see, ch);

      char *chars = print_list(can_see, charGetName, charGetMultiName);
      if(*chars) bprintf(charGetLookBuffer(ch), "%s %s %s %s%s.\r\n",
			 chars, (listSize(can_see) == 1 ? "is" : "are"),
			 (furnitureGetType(obj) == FURNITURE_AT ? "at":"on"),
			 see_obj_as(ch, obj),
			 (charGetFurniture(ch) == obj ? " with you" : ""));
      deleteList(can_see);
      free(chars);
    }
  }
}
コード例 #2
0
ファイル: persistent.c プロジェクト: KaSt/nereamud
void update_persistent_room_change(const char *info) {
  ROOM_DATA *room = NULL;
  hookParseInfo(info, &room);
  if(roomIsPersistent(room) && !roomIsExtracted(room) &&
     !roomIsPersistentDirty(room)) {
    listPut(p_to_save, room);
    roomSetPersistentDirty(room);
  }
}
コード例 #3
0
ファイル: persistent.c プロジェクト: KaSt/nereamud
void update_persistent_room_from_game(const char *info) {
  ROOM_DATA *room = NULL;
  hookParseInfo(info, &room);
  listRemove(p_to_save, room);

  // have we been replaced by a non-persistent room?
  ROOM_DATA *new_room = worldGetRoom(gameworld, roomGetClass(room));
  if(roomIsPersistent(room) && new_room != NULL && !roomIsPersistent(new_room))
    worldClearPersistentRoom(gameworld, roomGetClass(room));
}
コード例 #4
0
ファイル: persistent.c プロジェクト: KaSt/nereamud
void update_persistent_obj_from_room(const char *info) {
  OBJ_DATA   *obj = NULL;
  ROOM_DATA *room = NULL;
  hookParseInfo(info, &obj, &room);
  if(roomIsPersistent(room)&& !roomIsExtracted(room)&&
     !roomIsPersistentDirty(room)) {
    listPut(p_to_save, room);
    roomSetPersistentDirty(room);
  }
}
コード例 #5
0
ファイル: persistent.c プロジェクト: KaSt/nereamud
void update_persistent_char_from_room(const char *info) {
  CHAR_DATA   *ch = NULL;
  ROOM_DATA *room = NULL;
  hookParseInfo(info, &ch, &room);
  if(charIsNPC(ch) && roomIsPersistent(room) && !roomIsExtracted(room) && 
     !roomIsPersistentDirty(room)) {
    listPut(p_to_save, room);
    roomSetPersistentDirty(room);
  }
}
コード例 #6
0
void expand_exit_dynamic_descs(const char *info) {
  EXIT_DATA *me = NULL;
  CHAR_DATA *ch = NULL;
  hookParseInfo(info, &me, &ch);

  PyObject *pyme = newPyExit(me);
  char   *locale = strdup(get_key_locale(roomGetClass(exitGetRoom(me)))); 
  expand_dynamic_descs(charGetLookBuffer(ch), pyme, ch, locale);
  Py_DECREF(pyme);
  free(locale);
}
コード例 #7
0
void expand_room_dynamic_descs(const char *info) {
  ROOM_DATA *me = NULL;
  CHAR_DATA *ch = NULL;
  hookParseInfo(info, &me, &ch);

  PyObject *pyme = roomGetPyForm(me);
  char   *locale = strdup(get_key_locale(roomGetClass(me))); 
  expand_dynamic_descs(charGetLookBuffer(ch), pyme, ch, locale);
  Py_DECREF(pyme);
  free(locale);
}
コード例 #8
0
ファイル: container.c プロジェクト: KaSt/nereamud
//*****************************************************************************
// hooks
//*****************************************************************************
void container_append_hook(const char *info) {
  OBJ_DATA *obj = NULL;
  CHAR_DATA *ch = NULL;
  hookParseInfo(info, &obj, &ch);

  if(objIsType(obj, "container")) {
    bprintf(charGetLookBuffer(ch), " It is %s%s.", 
	    (containerIsClosed(obj) ? "closed":"open"),
	    (containerIsLocked(obj) ? " and locked" : ""));
  }
}
コード例 #9
0
void expand_char_dynamic_descs(const char *info) {
  CHAR_DATA *me = NULL;
  CHAR_DATA *ch = NULL;
  hookParseInfo(info, &me, &ch);

  // if we're an NPC, do some special work for displaying us. We don't do 
  // dynamic descs for PCs because they will probably be describing themselves,
  // and we don't want to give them access to the scripting language.
  //if(charIsNPC(me)) {
    PyObject *pyme = charGetPyForm(me);
    char   *locale = strdup(get_key_locale(charGetClass(me))); 
    expand_dynamic_descs(charGetLookBuffer(ch), pyme, ch, locale);
    Py_DECREF(pyme);
    free(locale);
  //}
}
コード例 #10
0
ファイル: container.c プロジェクト: KaSt/nereamud
void container_look_hook(const char *info) {
  OBJ_DATA *obj = NULL;
  CHAR_DATA *ch = NULL;
  hookParseInfo(info, &obj, &ch);

  if(objIsType(obj, "container") && !containerIsClosed(obj)) {
    LIST *vis_contents = find_all_objs(ch, objGetContents(obj), "", 
				       NULL, TRUE);
      // make sure we can still see things
      if(listSize(vis_contents) > 0) {
	send_to_char(ch, "It contains:\r\n");
	show_list(ch, vis_contents, objGetName, objGetMultiName);
      }
      deleteList(vis_contents);
  }
}
コード例 #11
0
ファイル: room_reset.c プロジェクト: KaSt/nereamud
//
// zone reset hook. Whenever a zone is reset, apply all of its reset rules for
// each room in the zone.
void zone_reset_hook(const char *info) {
  char  *zone_key = NULL;
  hookParseInfo(info, &zone_key);
  ZONE_DATA *zone = worldGetZone(gameworld, zone_key);

  LIST_ITERATOR *res_i = newListIterator(zoneGetResettable(zone));
  char           *name = NULL;
  const char   *locale = zone_key;
  ROOM_DATA      *room = NULL;
  ITERATE_LIST(name, res_i) {
    if((room = worldGetRoom(gameworld, get_fullkey(name, locale))) != NULL) {
      do_resets(room);
    }
  } deleteListIterator(res_i);

  // garbage collection
  free(zone_key);
}
コード例 #12
0
ファイル: persistent.c プロジェクト: KaSt/nereamud
void update_persistent_obj_to_obj(const char *info) {
  OBJ_DATA       *obj = NULL;
  OBJ_DATA *container = NULL;
  ROOM_DATA     *root = NULL;
  hookParseInfo(info, &obj, &container);
  if(container == NULL || obj == NULL)
    return;

  root = objGetRootRoom(container);
  if(root == NULL)
    return;

  if(roomIsPersistent(root) && !roomIsExtracted(root) &&
     !roomIsPersistentDirty(root)) {
    listPut(p_to_save, root);
    roomSetPersistentDirty(root);
  }
}
コード例 #13
0
void regenStartHook(const char *hook_info) {
  CHAR_DATA *ch = NULL;
  hookParseInfo(hook_info, &ch);
  //log_string("Hooked character entry, starting regen for %s.", charGetName(ch));
  start_update(ch, HEAL_PULSE_RATE SECONDS, event_heal, NULL, NULL, NULL);
}
コード例 #14
0
ファイル: room_reset.c プロジェクト: KaSt/nereamud
//
// room reset hook. Whenever a room is reset, apply all of the reset rules for
// it and its parent.
void room_reset_hook(const char *info) {
  ROOM_DATA *room = NULL;
  hookParseInfo(info, &room);
  if(room != NULL)
    do_resets(room);
}