I thought this had been fixed, but perusing the latest code I saw it had not been....If no one noticed, if, when making a drink container item, you do not make the first keyword in the name equal to the drinkname[] of the liquid it holds by default, when it is emptied the first time, the first keyword (no matter what it is) is removed. So, you have a 'wooden barrel' that is half full of beer, when you pour it out/finish it, you will be left with a 'barrel'. Catches alot of people, and though we could enforce writing policies, it's so much easier to just fix code. This isn't the most beautific code, but it's functional. I'll clean it up later. Disclaimer: If you can't read this code and undestand EXACTLY what it does the first or second time through, wait till something like this is put in a release. void xap_name_from_drinkcon(struct obj_data * obj) { char *s,*e,*newname; char searchname[256]; int i; extern char *drinknames[]; extern struct obj_data *obj_proto; /* verify that the name is there */ if(!(s=strstr(obj->name,drinknames[GET_OBJ_VAL(obj,2)]))) { return; } /* else, we have the name, w/o spaces */ for(i=0;(*((obj->name)+i) !=' ') && (*((obj->name) + i) != '\0'); i++); e=(obj->name)+i; /* check if name is at the beginning (if so, life is easy) */ if(s == obj->name) { if(*((obj->name) +i) == ' ') { new_name=str_dup((obj->name)+i+1); } else { /* no name but the drink name! what do we do? */ new_name=str_dup("container"); } if (GET_OBJ_RNUM(obj) < 0 || obj->name != obj_proto[GET_OBJ_RNUM(obj)].name) free(obj->name); obj->name=new_name; } else { /* it's not at the beginning. */ sprintf(searchname," %s",drinknames[GET_OBJ_VAL(obj,2)]); if(!(s=strstr(obj->name,searchname))) { /* no name afterall - require one space in front if it's not the first keyword */ return; } for(i=1;(*(s+i) !=' ') && (*(s + i) != '\0');i++); /* ugly */ e=(s +i); *(s) = '\0'; strcpy(searchname,obj->name); *s = 'a'; strcat(searchname,e); new_name=str_dup(searchname); if (GET_OBJ_RNUM(obj) < 0 || obj->name != obj_proto[GET_OBJ_RNUM(obj)].name) free(obj->name); obj->name=new_name; } return; } +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 04/10/01 PDT