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); }
// // run all of the resets for a specified room void do_resets(ROOM_DATA *room) { // first apply all of our prototype resets LIST *protos = parse_keywords(roomGetPrototypes(room)); LIST_ITERATOR *proto_i = newListIterator(protos); char *proto = NULL; RESET_LIST *list = NULL; // try to run each parent reset, and finally our own ITERATE_LIST(proto, proto_i) { if((list = worldGetType(gameworld, "reset", proto)) != NULL) resetRunOn(resetListGetResets(list), room, INITIATOR_ROOM, get_key_locale(proto)); } deleteListIterator(proto_i); deleteListWith(protos, free); }
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); //} }
int PyObj_setcontainerkey(PyObject *self, PyObject *value, void *closure) { OBJ_DATA *obj = PyObj_AsObj(self); const char *key = NULL; if(obj == NULL) { PyErr_Format(PyExc_StandardError, "Tried to set key for nonexistent " "container, %d", PyObj_AsUid(self)); return -1; } else if(!objIsType(obj, "container")) { PyErr_Format(PyExc_TypeError, "Tried to set key for non-container, %s", objGetClass(obj)); return -1; } if(PyString_Check(value)) key =get_fullkey(PyString_AsString(value),get_key_locale(objGetClass(obj))); else if(PyObj_Check(value)) { OBJ_DATA *key_obj = PyObj_AsObj(value); if(key_obj != NULL) key = objGetClass(key_obj); else { PyErr_Format(PyExc_TypeError, "Tried to set key for %s as nonexistaent " "obj, %d", objGetClass(obj), PyObj_AsUid(value)); return -1; } } // make sure we have a key if(key == NULL) { PyErr_Format(PyExc_TypeError, "Container keys must be strings or objects."); return -1; } containerSetKey(obj, key); return 0; }
const char *get_smart_locale(CHAR_DATA *ch) { const char *locale = get_script_locale(); if(locale == NULL && charGetRoom(ch) != NULL) locale = get_key_locale(roomGetClass(charGetRoom(ch))); return locale; }