1 | /* |
1 | /* |
2 | * static char *rcsid_item_c = |
2 | * static char *rcsid_item_c = |
3 | * "$Id: item.C,v 1.2 2006/08/29 08:01:35 root Exp $"; |
3 | * "$Id: item.C,v 1.3 2006/09/03 00:18:40 root Exp $"; |
4 | */ |
4 | */ |
5 | |
5 | |
6 | /* |
6 | /* |
7 | CrossFire, A Multiplayer game for X-windows |
7 | CrossFire, A Multiplayer game for X-windows |
8 | |
8 | |
… | |
… | |
479 | if ((val=get_attr_value(&(op->stats),attr))!=0) { |
479 | if ((val=get_attr_value(&(op->stats),attr))!=0) { |
480 | sprintf (buf+strlen(buf), "(%s%+d)", short_stat_name[attr], val); |
480 | sprintf (buf+strlen(buf), "(%s%+d)", short_stat_name[attr], val); |
481 | } |
481 | } |
482 | } |
482 | } |
483 | if(op->stats.exp) |
483 | if(op->stats.exp) |
484 | sprintf(buf+strlen(buf), "(speed %+lld)", op->stats.exp); |
484 | sprintf(buf+strlen(buf), "(speed %+lld)", (long long)op->stats.exp); |
485 | if(op->stats.wc) |
485 | if(op->stats.wc) |
486 | sprintf(buf+strlen(buf), "(wc%+d)", op->stats.wc); |
486 | sprintf(buf+strlen(buf), "(wc%+d)", op->stats.wc); |
487 | if(op->stats.dam) |
487 | if(op->stats.dam) |
488 | sprintf(buf+strlen(buf), "(dam%+d)", op->stats.dam); |
488 | sprintf(buf+strlen(buf), "(dam%+d)", op->stats.dam); |
489 | if(op->stats.ac) |
489 | if(op->stats.ac) |
… | |
… | |
561 | if(!op->title) { |
561 | if(!op->title) { |
562 | safe_strcat(buf," of ", &len, HUGE_BUF); |
562 | safe_strcat(buf," of ", &len, HUGE_BUF); |
563 | if (op->inv) |
563 | if (op->inv) |
564 | safe_strcat(buf,op->inv->name, &len, HUGE_BUF); |
564 | safe_strcat(buf,op->inv->name, &len, HUGE_BUF); |
565 | else |
565 | else |
566 | LOG(llevError,"Spellbook %s lacks inventory\n", op->name); |
566 | LOG(llevError,"Spellbook %s lacks inventory\n", &op->name); |
567 | } |
567 | } |
568 | if(op->type != SPELLBOOK) { |
568 | if(op->type != SPELLBOOK) { |
569 | sprintf(buf2, " (lvl %d)", op->level); |
569 | sprintf(buf2, " (lvl %d)", op->level); |
570 | safe_strcat(buf, buf2, &len, HUGE_BUF); |
570 | safe_strcat(buf, buf2, &len, HUGE_BUF); |
571 | } |
571 | } |
… | |
… | |
758 | if(!op->title) { |
758 | if(!op->title) { |
759 | safe_strcat(buf," of ", &len, MAX_BUF); |
759 | safe_strcat(buf," of ", &len, MAX_BUF); |
760 | if (op->inv) |
760 | if (op->inv) |
761 | safe_strcat(buf,op->inv->name, &len, MAX_BUF); |
761 | safe_strcat(buf,op->inv->name, &len, MAX_BUF); |
762 | else |
762 | else |
763 | LOG(llevError,"Spellbook %s lacks inventory\n", op->name); |
763 | LOG(llevError,"Spellbook %s lacks inventory\n", &op->name); |
764 | } |
764 | } |
765 | if(op->type != SPELLBOOK) { |
765 | if(op->type != SPELLBOOK) { |
766 | sprintf(buf2, " (lvl %d)", op->level); |
766 | sprintf(buf2, " (lvl %d)", op->level); |
767 | safe_strcat(buf, buf2, &len, MAX_BUF); |
767 | safe_strcat(buf, buf2, &len, MAX_BUF); |
768 | } |
768 | } |
… | |
… | |
1081 | strcat(retbuf,buf); |
1081 | strcat(retbuf,buf); |
1082 | } |
1082 | } |
1083 | } |
1083 | } |
1084 | |
1084 | |
1085 | if(op->stats.exp) { |
1085 | if(op->stats.exp) { |
1086 | sprintf(buf,"(speed %+lld)",op->stats.exp); |
1086 | sprintf(buf,"(speed %+lld)", (long long)op->stats.exp); |
1087 | strcat(retbuf,buf); |
1087 | strcat(retbuf,buf); |
1088 | } |
1088 | } |
1089 | |
1089 | |
1090 | |
1090 | |
1091 | switch(op->type) { |
1091 | switch(op->type) { |
… | |
… | |
1231 | if(QUERY_FLAG(op,FLAG_REFL_MISSILE)) |
1231 | if(QUERY_FLAG(op,FLAG_REFL_MISSILE)) |
1232 | strcat(retbuf,"(reflect missiles)"); |
1232 | strcat(retbuf,"(reflect missiles)"); |
1233 | if(QUERY_FLAG(op,FLAG_STEALTH)) |
1233 | if(QUERY_FLAG(op,FLAG_STEALTH)) |
1234 | strcat(retbuf,"(stealth)"); |
1234 | strcat(retbuf,"(stealth)"); |
1235 | if(op->slaying!=NULL && op->type != FOOD) { |
1235 | if(op->slaying!=NULL && op->type != FOOD) { |
1236 | sprintf(buf,"(slay %s)",op->slaying); |
1236 | sprintf(buf,"(slay %s)", &op->slaying); |
1237 | strcat(retbuf,buf); |
1237 | strcat(retbuf,buf); |
1238 | } |
1238 | } |
1239 | DESCRIBE_ABILITY(retbuf, op->attacktype, "Attacks"); |
1239 | DESCRIBE_ABILITY(retbuf, op->attacktype, "Attacks"); |
1240 | /* resistance on flesh is only visible for quetzals. If |
1240 | /* resistance on flesh is only visible for quetzals. If |
1241 | * non flesh, everyone can see its resistances |
1241 | * non flesh, everyone can see its resistances |
… | |
… | |
1390 | */ |
1390 | */ |
1391 | if (QUERY_FLAG(op,FLAG_CURSED) || QUERY_FLAG(op,FLAG_DAMNED)) |
1391 | if (QUERY_FLAG(op,FLAG_CURSED) || QUERY_FLAG(op,FLAG_DAMNED)) |
1392 | SET_FLAG(op,FLAG_KNOWN_CURSED); |
1392 | SET_FLAG(op,FLAG_KNOWN_CURSED); |
1393 | |
1393 | |
1394 | if (op->type == POTION) { |
1394 | if (op->type == POTION) { |
1395 | if (op->inv && op->randomitems) { |
1395 | if (op->inv && op->randomitems) |
1396 | if (op->title) free_string(op->title); |
|
|
1397 | op->title = add_refcount(op->inv->name); |
1396 | op->title = op->inv->name; |
1398 | } else if (op->arch) { |
1397 | else if (op->arch) |
1399 | free_string(op->name); |
1398 | { |
1400 | op->name = add_refcount(op->arch->clone.name); |
1399 | op->name = op->arch->clone.name; |
1401 | free_string(op->name_pl); |
|
|
1402 | op->name_pl = add_refcount(op->arch->clone.name_pl); |
1400 | op->name_pl = op->arch->clone.name_pl; |
1403 | } |
1401 | } |
1404 | } |
1402 | } |
1405 | |
1403 | |
1406 | /* If the object is on a map, make sure we update its face */ |
1404 | /* If the object is on a map, make sure we update its face */ |
1407 | if (op->map) |
1405 | if (op->map) |
1408 | update_object(op,UP_OBJ_FACE); |
1406 | update_object(op,UP_OBJ_FACE); |