//***************************************************************************** // 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); } } }
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); } }
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)); }
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); } }
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); } }
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); }
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); }
//***************************************************************************** // 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" : "")); } }
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); //} }
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); } }
// // 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); }
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); } }
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); }
// // 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); }