ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/item.C
(Generate patch)

Comparing deliantra/server/common/item.C (file contents):
Revision 1.4 by root, Sun Sep 10 16:00:23 2006 UTC vs.
Revision 1.18 by pippijn, Sat Jan 6 14:42:28 2007 UTC

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
4 Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team
10 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 5 Copyright (C) 2002 Mark Wedel & Crossfire Development Team
11 Copyright (C) 1992 Frank Tore Johansen 6 Copyright (C) 1992 Frank Tore Johansen
12 7
13 This program is free software; you can redistribute it and/or modify 8 This program is free software; you can redistribute it and/or modify
14 it under the terms of the GNU General Public License as published by 9 it under the terms of the GNU General Public License as published by
22 17
23 You should have received a copy of the GNU General Public License 18 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software 19 along with this program; if not, write to the Free Software
25 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 21
27 The authors can be reached via e-mail at crossfire-devel@real-time.com 22 The authors can be reached via e-mail at <crossfire@schmorp.de>
28*/ 23*/
29 24
30#include <global.h> 25#include <global.h>
31#include <funcpoint.h> 26#include <funcpoint.h>
32#include <living.h> 27#include <living.h>
52 * may be better. 47 * may be better.
53 * Basically, for the use/nonuse, the code does something like: 48 * 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 49 * "This item goes %s\n", with the use/nonuse values filling in the %s
55 */ 50 */
56Body_Locations body_locations[NUM_BODY_LOCATIONS] = { 51Body_Locations body_locations[NUM_BODY_LOCATIONS] = {
57 {"body_range", "in your range slot", "in a human's range slot"} 52 {"body_range", "in your range slot", "in a human's range slot"},
58 ,
59 {"body_arm", "on your arm", "on a human's arm"} 53 {"body_arm", "on your arm", "on a human's arm"},
60 ,
61 {"body_torso", "on your body", "on a human's torso"} 54 {"body_torso", "on your body", "on a human's torso"},
62 ,
63 {"body_head", "on your head", "on a human's head"} 55 {"body_head", "on your head", "on a human's head"},
64 ,
65 {"body_neck", "around your neck", "around a humans neck"} 56 {"body_neck", "around your neck", "around a humans neck"},
66 ,
67 {"body_skill", "in your skill slot", "in a human's skill slot"} 57 {"body_skill", "in your skill slot", "in a human's skill slot"},
68 ,
69 {"body_finger", "on your finger", "on a human's finger"} 58 {"body_finger", "on your finger", "on a human's finger"} ,
70 ,
71 {"body_shoulder", "around your shoulders", "around a human's shoulders"} 59 {"body_shoulder", "around your shoulders", "around a human's shoulders"},
72 ,
73 {"body_foot", "on your feet", "on a human's feet"} 60 {"body_foot", "on your feet", "on a human's feet"},
74 ,
75 {"body_hand", "on your hands", "on a human's hands"} 61 {"body_hand", "on your hands", "on a human's hands"},
76 ,
77 {"body_wrist", "around your wrists", "around a human's wrist"} 62 {"body_wrist", "around your wrists", "around a human's wrist"},
78 ,
79 {"body_waist", "around your waist", "around a human's waist"} 63 {"body_waist", "around your waist", "around a human's waist"},
80 ,
81
82/*{"body_dragon_torso", "your body", "a dragon's body"} */ 64/*{"body_dragon_torso", "your body", "a dragon's body"} */
83}; 65};
84 66
85static char numbers[21][20] = { 67static char numbers[21][20] = {
86 "no", "", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", 68 "no", "", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
118 {POTION, "potion", "potions", SK_ALCHEMY, 0}, 100 {POTION, "potion", "potions", SK_ALCHEMY, 0},
119 {FOOD, "food", "food", SK_WOODSMAN, 0}, 101 {FOOD, "food", "food", SK_WOODSMAN, 0},
120 {POISON, "poison", "poisons", SK_ALCHEMY, 0}, 102 {POISON, "poison", "poisons", SK_ALCHEMY, 0},
121 {BOOK, "book", "books", SK_LITERACY, 0}, 103 {BOOK, "book", "books", SK_LITERACY, 0},
122 {CLOCK, "clock", "clocks", 0, 0}, 104 {CLOCK, "clock", "clocks", 0, 0},
123 {LIGHTNING, "lightning", "lightning", 0, 0},
124 {ARROW, "arrow", "arrows", SK_BOWYER, 0}, 105 {ARROW, "arrow", "arrows", SK_BOWYER, 0},
125 {BOW, "bow", "bows", SK_BOWYER, 0}, 106 {BOW, "bow", "bows", SK_BOWYER, 0},
126 {WEAPON, "weapon", "weapons", SK_SMITHERY, 0}, 107 {WEAPON, "weapon", "weapons", SK_SMITHERY, 0},
127 {ARMOUR, "armour", "armour", SK_SMITHERY, 0}, 108 {ARMOUR, "armour", "armour", SK_SMITHERY, 0},
128 {PEDESTAL, "pedestal", "pedestals", 0, 0}, 109 {PEDESTAL, "pedestal", "pedestals", 0, 0},
148 {AMULET, "amulet", "amulets", SK_JEWELER, 0}, 129 {AMULET, "amulet", "amulets", SK_JEWELER, 0},
149 {PLAYERMOVER, "player mover", "player movers", 0, 0}, 130 {PLAYERMOVER, "player mover", "player movers", 0, 0},
150 {TELEPORTER, "teleporter", "teleporters", 0, 0}, 131 {TELEPORTER, "teleporter", "teleporters", 0, 0},
151 {CREATOR, "creator", "creators", 0, 0}, 132 {CREATOR, "creator", "creators", 0, 0},
152 {SKILL, "skill", "skills", 0, 0}, 133 {SKILL, "skill", "skills", 0, 0},
153 {EXPERIENCE, "experience", "experience", 0, 0},
154 {EARTHWALL, "earthwall", "earthwalls", 0, 0}, 134 {EARTHWALL, "earthwall", "earthwalls", 0, 0},
155 {GOLEM, "golem", "golems", 0, 0}, 135 {GOLEM, "golem", "golems", 0, 0},
156 {THROWN_OBJ, "projectile", "projectiles", 0, 0}, 136 {THROWN_OBJ, "projectile", "projectiles", 0, 0},
157 {BLINDNESS, "blindness", "blindness", 0, 0}, 137 {BLINDNESS, "blindness", "blindness", 0, 0},
158 {GOD, "god", "gods", 0, 0}, 138 {GOD, "god", "gods", 0, 0},
178 {FLOOR, "floor", "floors", 0, 0}, 158 {FLOOR, "floor", "floors", 0, 0},
179 {FLESH, "flesh", "flesh", SK_WOODSMAN, 0}, 159 {FLESH, "flesh", "flesh", SK_WOODSMAN, 0},
180 {INORGANIC, "inorganic", "inorganics", SK_ALCHEMY, 0}, 160 {INORGANIC, "inorganic", "inorganics", SK_ALCHEMY, 0},
181 {SKILL_TOOL, "skill tool", "skill tools", 0, 0}, 161 {SKILL_TOOL, "skill tool", "skill tools", 0, 0},
182 {LIGHTER, "lighter", "lighters", 0, 0}, 162 {LIGHTER, "lighter", "lighters", 0, 0},
183 {TRAP_PART, "trap part", "trap parts", 0, 0}, 163 {BUILDABLE_WALL, "buildable wall", "buildable walls", 0, 0},
184 {WALL, "wall", "walls", 0, 0},
185 {LIGHT_SOURCE, "light source", "light sources", 0, 0},
186 {MISC_OBJECT, "bric-a-brac", "bric-a-brac", 0, 0}, 164 {MISC_OBJECT, "bric-a-brac", "bric-a-brac", 0, 0},
187 {MONSTER, "monster", "monsters", 0, 0},
188 {SPAWN_GENERATOR, "monster generator", "monster generators", 0, 0},
189 {LAMP, "lamp", "lamps", 0, 0}, 165 {LAMP, "lamp", "lamps", 0, 0},
190 {DUPLICATOR, "duplicator", "duplicators", 0, 0}, 166 {DUPLICATOR, "duplicator", "duplicators", 0, 0},
191 {TOOL, "tool", "tools", 0, 0},
192 {SPELLBOOK, "spellbook", "spellbooks", SK_LITERACY, 0}, 167 {SPELLBOOK, "spellbook", "spellbooks", SK_LITERACY, 0},
193 {BUILDFAC, "building facility", "building facilities", 0, 0},
194 {CLOAK, "cloak", "cloaks", SK_SMITHERY, 0}, 168 {CLOAK, "cloak", "cloaks", SK_SMITHERY, 0},
195 {SPINNER, "spinner", "spinners", 0, 0}, 169 {SPINNER, "spinner", "spinners", 0, 0},
196 {GATE, "gate", "gates", 0, 0}, 170 {GATE, "gate", "gates", 0, 0},
197 {BUTTON, "button", "buttons", 0, 0}, 171 {BUTTON, "button", "buttons", 0, 0},
198 {CF_HANDLE, "cf handle", "cf handles", 0, 0}, 172 {CF_HANDLE, "cf handle", "cf handles", 0, 0},
205 {SPELL_EFFECT, "spell effect", "spell effects", 0, 0}, 179 {SPELL_EFFECT, "spell effect", "spell effects", 0, 0},
206 {CONVERTER, "converter", "converters", 0, 0}, 180 {CONVERTER, "converter", "converters", 0, 0},
207 {BRACERS, "bracers", "bracers", SK_SMITHERY, 0}, 181 {BRACERS, "bracers", "bracers", SK_SMITHERY, 0},
208 {POISONING, "poisoning", "poisonings", 0, 0}, 182 {POISONING, "poisoning", "poisonings", 0, 0},
209 {SAVEBED, "savebed", "savebeds", 0, 0}, 183 {SAVEBED, "savebed", "savebeds", 0, 0},
210 {POISONCLOUD, "poison cloud", "poison clouds", 0, 0},
211 {FIREHOLES, "fireholes", "fireholes", 0, 0},
212 {WAND, "wand", "wands", SK_THAUMATURGY, 0}, 184 {WAND, "wand", "wands", SK_THAUMATURGY, 0},
213 {SCROLL, "scroll", "scrolls", SK_LITERACY, 0}, 185 {SCROLL, "scroll", "scrolls", SK_LITERACY, 0},
214 {DIRECTOR, "director", "directors", 0, 0}, 186 {DIRECTOR, "director", "directors", 0, 0},
215 {GIRDLE, "girdle", "girdles", SK_SMITHERY, 0}, 187 {GIRDLE, "girdle", "girdles", SK_SMITHERY, 0},
216 {FORCE, "force", "forces", 0, 0}, 188 {FORCE, "force", "forces", 0, 0},
597 char buf2[HUGE_BUF]; 569 char buf2[HUGE_BUF];
598 int len = 0; 570 int len = 0;
599 571
600 if (op->name == NULL) 572 if (op->name == NULL)
601 return "(null)"; 573 return "(null)";
574
602 if (!op->nrof && !op->weight && !op->title && !is_magical (op)) 575 if (!op->nrof && !op->weight && !op->title && !is_magical (op))
603 return op->name; /* To speed things up (or make things slower?) */ 576 return op->name; /* To speed things up (or make things slower?) */
604 577
605 if (op->nrof <= 1) 578 if (op->nrof <= 1)
606 safe_strcat (buf, op->name, &len, HUGE_BUF); 579 safe_strcat (buf, op->name, &len, HUGE_BUF);
686 659
687 use_buf++; 660 use_buf++;
688 use_buf %= 5; 661 use_buf %= 5;
689 662
690#ifdef NEW_MATERIAL_CODE 663#ifdef NEW_MATERIAL_CODE
691 if ((IS_ARMOR (op) || IS_WEAPON (op)) && op->materialname) 664 if ((op->is_armor () || op->is_weapon ()) && op->materialname)
692 { 665 {
693 mt = name_to_material (op->materialname); 666 mt = name_to_material (op->materialname);
694 if (mt) 667 if (mt)
695 { 668 {
696 safe_strcat (buf[use_buf], mt->description, &len, HUGE_BUF); 669 safe_strcat (buf[use_buf], mt->description, &len, HUGE_BUF);
793 return "(null)"; 766 return "(null)";
794 767
795 if (!op->nrof && !op->weight && !op->title && !is_magical (op)) 768 if (!op->nrof && !op->weight && !op->title && !is_magical (op))
796 return op->name; /* To speed things up (or make things slower?) */ 769 return op->name; /* To speed things up (or make things slower?) */
797 770
798 if ((IS_ARMOR (op) || IS_WEAPON (op)) && op->materialname) 771 if ((op->is_armor () || op->is_weapon ()) && op->materialname)
799 mt = name_to_material (op->materialname); 772 mt = name_to_material (op->materialname);
800 773
801#ifdef NEW_MATERIAL_CODE 774#ifdef NEW_MATERIAL_CODE
802 if ((IS_ARMOR (op) || IS_WEAPON (op)) && op->materialname && mt && 775 if ((op->is_armor () || op->is_weapon ()) && op->materialname && mt &&
803 op->arch->clone.materialname != mt->name && !(op->material & M_SPECIAL)) 776 op->arch->clone.materialname != mt->name && !(op->material & M_SPECIAL))
804 { 777 {
805 strcpy (buf, mt->description); 778 strcpy (buf, mt->description);
806 len = strlen (buf); 779 len = strlen (buf);
807 safe_strcat (buf, " ", &len, MAX_BUF); 780 safe_strcat (buf, " ", &len, MAX_BUF);
895 868
896 /* Note that the resolution this provides for players really isn't 869 /* Note that the resolution this provides for players really isn't
897 * very good. Any player with a speed greater than .67 will 870 * very good. Any player with a speed greater than .67 will
898 * fall into the 'lightning fast movement' category. 871 * fall into the 'lightning fast movement' category.
899 */ 872 */
900 if (FABS (op->speed) > MIN_ACTIVE_SPEED) 873 if (op->has_active_speed ())
901 { 874 {
902 switch ((int) ((FABS (op->speed)) * 15)) 875 switch ((int) ((FABS (op->speed)) * 15))
903 { 876 {
904 case 0: 877 case 0:
905 strcat (retbuf, "(very slow movement)"); 878 strcat (retbuf, "(very slow movement)");
961 { 934 {
962 treasure *t; 935 treasure *t;
963 int first = 1; 936 int first = 1;
964 937
965 for (t = op->randomitems->items; t != NULL; t = t->next) 938 for (t = op->randomitems->items; t != NULL; t = t->next)
966 if (t->item && (t->item->clone.type == SPELL)) 939 if (t->item && t->item->clone.type == SPELL)
967 { 940 {
968 if (first) 941 if (first)
969 { 942 {
970 first = 0; 943 first = 0;
971 strcat (retbuf, "(Spell abilities:)"); 944 strcat (retbuf, "(Spell abilities:)");
1520 LOG (llevDebug, "need_identify: %s does not need to be id'd\n", op->name); 1493 LOG (llevDebug, "need_identify: %s does not need to be id'd\n", op->name);
1521#endif 1494#endif
1522 return 0; 1495 return 0;
1523} 1496}
1524 1497
1525
1526/* 1498/*
1527 * Supposed to fix face-values as well here, but later. 1499 * Supposed to fix face-values as well here, but later.
1528 */ 1500 */
1529
1530void 1501void
1531identify (object *op) 1502identify (object *op)
1532{ 1503{
1533 object *pl; 1504 object *pl;
1534 1505
1556 /* If the object is on a map, make sure we update its face */ 1527 /* If the object is on a map, make sure we update its face */
1557 if (op->map) 1528 if (op->map)
1558 update_object (op, UP_OBJ_FACE); 1529 update_object (op, UP_OBJ_FACE);
1559 else 1530 else
1560 { 1531 {
1561 pl = is_player_inv (op->env); 1532 pl = op->in_player ();
1562 if (pl) 1533 if (pl)
1563 /* A lot of the values can change from an update - might as well send 1534 /* A lot of the values can change from an update - might as well send
1564 * it all. 1535 * it all.
1565 */ 1536 */
1566 esrv_send_item (pl, op); 1537 esrv_send_item (pl, op);
1567 } 1538 }
1568} 1539}
1540

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines