… | |
… | |
186 | || ob1->speed != ob2->speed |
186 | || ob1->speed != ob2->speed |
187 | || ob1->value != ob2->value |
187 | || ob1->value != ob2->value |
188 | || ob1->name != ob2->name) |
188 | || ob1->name != ob2->name) |
189 | return 0; |
189 | return 0; |
190 | |
190 | |
|
|
191 | // some objects are unmergable |
|
|
192 | if (!ob1->nrof || !ob2->nrof) |
|
|
193 | return 0; |
|
|
194 | |
191 | /* Do not merge objects if nrof would overflow. First part checks |
195 | /* Do not merge objects if nrof would overflow. First part checks |
192 | * for unsigned overflow (2c), second part checks whether the result |
196 | * for unsigned overflow (2c), second part checks whether the result |
193 | * would fit into a 32 bit signed int, which is often used to hold |
197 | * would fit into a 32 bit signed int, which is often used to hold |
194 | * nrof values. |
198 | * nrof values. |
195 | */ |
199 | */ |
… | |
… | |
206 | SET_FLAG (ob1, FLAG_BEEN_APPLIED); |
210 | SET_FLAG (ob1, FLAG_BEEN_APPLIED); |
207 | |
211 | |
208 | if (QUERY_FLAG (ob2, FLAG_IDENTIFIED)) |
212 | if (QUERY_FLAG (ob2, FLAG_IDENTIFIED)) |
209 | SET_FLAG (ob2, FLAG_BEEN_APPLIED); |
213 | SET_FLAG (ob2, FLAG_BEEN_APPLIED); |
210 | |
214 | |
211 | if (ob1->arch->name != ob2->arch->name |
215 | if (ob1->arch->archname != ob2->arch->archname |
212 | || ob1->name != ob2->name |
216 | || ob1->name != ob2->name |
213 | || ob1->title != ob2->title |
217 | || ob1->title != ob2->title |
214 | || ob1->msg != ob2->msg |
218 | || ob1->msg != ob2->msg |
215 | || ob1->weight != ob2->weight |
219 | || ob1->weight != ob2->weight |
216 | || ob1->attacktype != ob2->attacktype |
220 | || ob1->attacktype != ob2->attacktype |
217 | || ob1->magic != ob2->magic |
221 | || ob1->magic != ob2->magic |
218 | || ob1->slaying != ob2->slaying |
222 | || ob1->slaying != ob2->slaying |
219 | || ob1->skill != ob2->skill |
223 | || ob1->skill != ob2->skill |
220 | || ob1->value != ob2->value |
224 | || ob1->value != ob2->value |
221 | || ob1->animation_id != ob2->animation_id |
225 | || ob1->animation_id != ob2->animation_id |
|
|
226 | || (ob1->face != ob2->face && !ob1->animation_id) // face and animation are dependent on each other |
222 | || ob1->client_type != ob2->client_type |
227 | || ob1->client_type != ob2->client_type |
223 | || ob1->materialname != ob2->materialname |
228 | || ob1->materialname != ob2->materialname |
224 | || ob1->lore != ob2->lore |
229 | || ob1->lore != ob2->lore |
225 | || ob1->subtype != ob2->subtype |
230 | || ob1->subtype != ob2->subtype |
226 | || ob1->move_type != ob2->move_type |
231 | || ob1->move_type != ob2->move_type |
… | |
… | |
478 | */ |
483 | */ |
479 | object * |
484 | object * |
480 | find_object_name (const char *str) |
485 | find_object_name (const char *str) |
481 | { |
486 | { |
482 | shstr_cmp str_ (str); |
487 | shstr_cmp str_ (str); |
483 | object *op; |
|
|
484 | |
488 | |
|
|
489 | if (str_) |
485 | for_all_objects (op) |
490 | for_all_objects (op) |
486 | if (op->name == str_) |
491 | if (op->name == str_) |
487 | break; |
492 | return op; |
488 | |
493 | |
489 | return op; |
494 | return 0; |
490 | } |
495 | } |
491 | |
496 | |
492 | /* |
497 | /* |
493 | * Sets the owner and sets the skill and exp pointers to owner's current |
498 | * Sets the owner and sets the skill and exp pointers to owner's current |
494 | * skill and experience objects. |
499 | * skill and experience objects. |
… | |
… | |
2417 | { |
2422 | { |
2418 | char flagdesc[512]; |
2423 | char flagdesc[512]; |
2419 | char info2[256 * 4]; |
2424 | char info2[256 * 4]; |
2420 | char *p = info; |
2425 | char *p = info; |
2421 | |
2426 | |
2422 | p += snprintf (p, 512, "{cnt:%d,uuid:%s,name:\"%s\"%s%s,flags:[%s],type:%d}", |
2427 | p += snprintf (p, 512, "{cnt:%d,uuid:%s,name:\"%s\"%s%s%s,flags:[%s],type:%d}", |
2423 | count, |
2428 | count, |
2424 | uuid.c_str (), |
2429 | uuid.c_str (), |
2425 | &name, |
2430 | &name, |
2426 | title ? "\",title:\"" : "", |
2431 | title ? ",title:\"" : "", |
2427 | title ? (const char *)title : "", |
2432 | title ? (const char *)title : "", |
|
|
2433 | title ? "\"" : "", |
2428 | flag_desc (flagdesc, 512), type); |
2434 | flag_desc (flagdesc, 512), type); |
2429 | |
2435 | |
2430 | if (!flag[FLAG_REMOVED] && env) |
2436 | if (!flag[FLAG_REMOVED] && env) |
2431 | p += snprintf (p, 256, "(in %s)", env->debug_desc (info2)); |
2437 | p += snprintf (p, 256, "(in %s)", env->debug_desc (info2)); |
2432 | |
2438 | |