1 | |
|
|
2 | /* |
|
|
3 | * static char *rcsid_item_c = |
|
|
4 | * "$Id: item.C,v 1.4 2006/09/10 16:00:23 root Exp $"; |
|
|
5 | */ |
|
|
6 | |
|
|
7 | /* |
1 | /* |
8 | CrossFire, A Multiplayer game for X-windows |
2 | CrossFire, A Multiplayer game for X-windows |
9 | |
3 | |
10 | Copyright (C) 2002 Mark Wedel & Crossfire Development Team |
4 | Copyright (C) 2002 Mark Wedel & Crossfire Development Team |
11 | Copyright (C) 1992 Frank Tore Johansen |
5 | Copyright (C) 1992 Frank Tore Johansen |
… | |
… | |
22 | |
16 | |
23 | You should have received a copy of the GNU General Public License |
17 | You should have received a copy of the GNU General Public License |
24 | along with this program; if not, write to the Free Software |
18 | along with this program; if not, write to the Free Software |
25 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
19 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
26 | |
20 | |
27 | The authors can be reached via e-mail at crossfire-devel@real-time.com |
21 | The authors can be reached via e-mail at <crossfire@schmorp.de> |
28 | */ |
22 | */ |
29 | |
23 | |
30 | #include <global.h> |
24 | #include <global.h> |
31 | #include <funcpoint.h> |
25 | #include <funcpoint.h> |
32 | #include <living.h> |
26 | #include <living.h> |
… | |
… | |
52 | * may be better. |
46 | * may be better. |
53 | * Basically, for the use/nonuse, the code does something like: |
47 | * Basically, for the use/nonuse, the code does something like: |
54 | * "This item goes %s\n", with the use/nonuse values filling in the %s |
48 | * "This item goes %s\n", with the use/nonuse values filling in the %s |
55 | */ |
49 | */ |
56 | Body_Locations body_locations[NUM_BODY_LOCATIONS] = { |
50 | Body_Locations body_locations[NUM_BODY_LOCATIONS] = { |
57 | {"body_range", "in your range slot", "in a human's range slot"} |
51 | {"body_range", "in your range slot", "in a human's range slot"}, |
58 | , |
|
|
59 | {"body_arm", "on your arm", "on a human's arm"} |
52 | {"body_arm", "on your arm", "on a human's arm"}, |
60 | , |
|
|
61 | {"body_torso", "on your body", "on a human's torso"} |
53 | {"body_torso", "on your body", "on a human's torso"}, |
62 | , |
|
|
63 | {"body_head", "on your head", "on a human's head"} |
54 | {"body_head", "on your head", "on a human's head"}, |
64 | , |
|
|
65 | {"body_neck", "around your neck", "around a humans neck"} |
55 | {"body_neck", "around your neck", "around a humans neck"}, |
66 | , |
|
|
67 | {"body_skill", "in your skill slot", "in a human's skill slot"} |
56 | {"body_skill", "in your skill slot", "in a human's skill slot"}, |
68 | , |
|
|
69 | {"body_finger", "on your finger", "on a human's finger"} |
57 | {"body_finger", "on your finger", "on a human's finger"} , |
70 | , |
|
|
71 | {"body_shoulder", "around your shoulders", "around a human's shoulders"} |
58 | {"body_shoulder", "around your shoulders", "around a human's shoulders"}, |
72 | , |
|
|
73 | {"body_foot", "on your feet", "on a human's feet"} |
59 | {"body_foot", "on your feet", "on a human's feet"}, |
74 | , |
|
|
75 | {"body_hand", "on your hands", "on a human's hands"} |
60 | {"body_hand", "on your hands", "on a human's hands"}, |
76 | , |
|
|
77 | {"body_wrist", "around your wrists", "around a human's wrist"} |
61 | {"body_wrist", "around your wrists", "around a human's wrist"}, |
78 | , |
|
|
79 | {"body_waist", "around your waist", "around a human's waist"} |
62 | {"body_waist", "around your waist", "around a human's waist"}, |
80 | , |
|
|
81 | |
|
|
82 | /*{"body_dragon_torso", "your body", "a dragon's body"} */ |
63 | /*{"body_dragon_torso", "your body", "a dragon's body"} */ |
83 | }; |
64 | }; |
84 | |
65 | |
85 | static char numbers[21][20] = { |
66 | static char numbers[21][20] = { |
86 | "no", "", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", |
67 | "no", "", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", |
… | |
… | |
597 | char buf2[HUGE_BUF]; |
578 | char buf2[HUGE_BUF]; |
598 | int len = 0; |
579 | int len = 0; |
599 | |
580 | |
600 | if (op->name == NULL) |
581 | if (op->name == NULL) |
601 | return "(null)"; |
582 | return "(null)"; |
|
|
583 | |
602 | if (!op->nrof && !op->weight && !op->title && !is_magical (op)) |
584 | if (!op->nrof && !op->weight && !op->title && !is_magical (op)) |
603 | return op->name; /* To speed things up (or make things slower?) */ |
585 | return op->name; /* To speed things up (or make things slower?) */ |
604 | |
586 | |
605 | if (op->nrof <= 1) |
587 | if (op->nrof <= 1) |
606 | safe_strcat (buf, op->name, &len, HUGE_BUF); |
588 | safe_strcat (buf, op->name, &len, HUGE_BUF); |
… | |
… | |
686 | |
668 | |
687 | use_buf++; |
669 | use_buf++; |
688 | use_buf %= 5; |
670 | use_buf %= 5; |
689 | |
671 | |
690 | #ifdef NEW_MATERIAL_CODE |
672 | #ifdef NEW_MATERIAL_CODE |
691 | if ((IS_ARMOR (op) || IS_WEAPON (op)) && op->materialname) |
673 | if ((op->is_armor () || op->is_weapon ()) && op->materialname) |
692 | { |
674 | { |
693 | mt = name_to_material (op->materialname); |
675 | mt = name_to_material (op->materialname); |
694 | if (mt) |
676 | if (mt) |
695 | { |
677 | { |
696 | safe_strcat (buf[use_buf], mt->description, &len, HUGE_BUF); |
678 | safe_strcat (buf[use_buf], mt->description, &len, HUGE_BUF); |
… | |
… | |
793 | return "(null)"; |
775 | return "(null)"; |
794 | |
776 | |
795 | if (!op->nrof && !op->weight && !op->title && !is_magical (op)) |
777 | if (!op->nrof && !op->weight && !op->title && !is_magical (op)) |
796 | return op->name; /* To speed things up (or make things slower?) */ |
778 | return op->name; /* To speed things up (or make things slower?) */ |
797 | |
779 | |
798 | if ((IS_ARMOR (op) || IS_WEAPON (op)) && op->materialname) |
780 | if ((op->is_armor () || op->is_weapon ()) && op->materialname) |
799 | mt = name_to_material (op->materialname); |
781 | mt = name_to_material (op->materialname); |
800 | |
782 | |
801 | #ifdef NEW_MATERIAL_CODE |
783 | #ifdef NEW_MATERIAL_CODE |
802 | if ((IS_ARMOR (op) || IS_WEAPON (op)) && op->materialname && mt && |
784 | if ((op->is_armor () || op->is_weapon ()) && op->materialname && mt && |
803 | op->arch->clone.materialname != mt->name && !(op->material & M_SPECIAL)) |
785 | op->arch->clone.materialname != mt->name && !(op->material & M_SPECIAL)) |
804 | { |
786 | { |
805 | strcpy (buf, mt->description); |
787 | strcpy (buf, mt->description); |
806 | len = strlen (buf); |
788 | len = strlen (buf); |
807 | safe_strcat (buf, " ", &len, MAX_BUF); |
789 | safe_strcat (buf, " ", &len, MAX_BUF); |
… | |
… | |
1520 | LOG (llevDebug, "need_identify: %s does not need to be id'd\n", op->name); |
1502 | LOG (llevDebug, "need_identify: %s does not need to be id'd\n", op->name); |
1521 | #endif |
1503 | #endif |
1522 | return 0; |
1504 | return 0; |
1523 | } |
1505 | } |
1524 | |
1506 | |
1525 | |
|
|
1526 | /* |
1507 | /* |
1527 | * Supposed to fix face-values as well here, but later. |
1508 | * Supposed to fix face-values as well here, but later. |
1528 | */ |
1509 | */ |
1529 | |
|
|
1530 | void |
1510 | void |
1531 | identify (object *op) |
1511 | identify (object *op) |
1532 | { |
1512 | { |
1533 | object *pl; |
1513 | object *pl; |
1534 | |
1514 | |
… | |
… | |
1556 | /* If the object is on a map, make sure we update its face */ |
1536 | /* If the object is on a map, make sure we update its face */ |
1557 | if (op->map) |
1537 | if (op->map) |
1558 | update_object (op, UP_OBJ_FACE); |
1538 | update_object (op, UP_OBJ_FACE); |
1559 | else |
1539 | else |
1560 | { |
1540 | { |
1561 | pl = is_player_inv (op->env); |
1541 | pl = op->in_player (); |
1562 | if (pl) |
1542 | if (pl) |
1563 | /* A lot of the values can change from an update - might as well send |
1543 | /* A lot of the values can change from an update - might as well send |
1564 | * it all. |
1544 | * it all. |
1565 | */ |
1545 | */ |
1566 | esrv_send_item (pl, op); |
1546 | esrv_send_item (pl, op); |
1567 | } |
1547 | } |
1568 | } |
1548 | } |
|
|
1549 | |