… | |
… | |
76 | * ok, but the possibility of duplicate hashes is certainly possible - msw |
76 | * ok, but the possibility of duplicate hashes is certainly possible - msw |
77 | */ |
77 | */ |
78 | static int |
78 | static int |
79 | content_recipe_value (object *op) |
79 | content_recipe_value (object *op) |
80 | { |
80 | { |
81 | char name[MAX_BUF]; |
|
|
82 | object *tmp = op->inv; |
81 | object *tmp = op->inv; |
83 | int tval = 0, formula = 0; |
82 | int formula = 0; |
84 | |
83 | |
85 | while (tmp) |
84 | while (tmp) |
86 | { |
85 | { |
87 | tval = 0; |
86 | const char *name = tmp->title |
88 | assign (name, tmp->name); |
|
|
89 | if (tmp->title) |
|
|
90 | sprintf (name, "%s %s", &tmp->name, &tmp->title); |
87 | ? (const char *)format ("%s %s", &tmp->name, &tmp->title) |
|
|
88 | : tmp->name; |
|
|
89 | |
91 | tval = (strtoint (name) * (tmp->nrof ? tmp->nrof : 1)); |
90 | int tval = strtoint (name) * tmp->number_of (); |
92 | #ifdef ALCHEMY_DEBUG |
91 | #ifdef ALCHEMY_DEBUG |
93 | LOG (llevDebug, "Got ingredient %d %s(%d)\n", tmp->nrof ? tmp->nrof : 1, name, tval); |
92 | LOG (llevDebug, "Got ingredient %d %s(%d)\n", tmp->nrof ? tmp->nrof : 1, name, tval); |
94 | #endif |
93 | #endif |
95 | formula += tval; |
94 | formula += tval; |
96 | tmp = tmp->below; |
95 | tmp = tmp->below; |
97 | } |
96 | } |
98 | #ifdef ALCHEMY_DEBUG |
97 | #ifdef ALCHEMY_DEBUG |
99 | LOG (llevDebug, " Formula value=%d\n", formula); |
98 | LOG (llevDebug, " Formula value=%d\n", formula); |
100 | #endif |
99 | #endif |
|
|
100 | |
101 | return formula; |
101 | return formula; |
102 | } |
102 | } |
103 | |
103 | |
104 | /** |
104 | /** |
105 | * Returns total number of items in op |
105 | * Returns total number of items in op |
… | |
… | |
885 | object *tmp; |
885 | object *tmp; |
886 | int attempt_shadow_alchemy; |
886 | int attempt_shadow_alchemy; |
887 | |
887 | |
888 | ave_chance = fl->total_chance / (float)fl->number; |
888 | ave_chance = fl->total_chance / (float)fl->number; |
889 | |
889 | |
890 | ability += (int) (skill->level * ((4.0 + cauldron->magic) / 4.0)); |
890 | ability += skill->level * ((4.0 + cauldron->magic) / 4.0); |
891 | |
891 | |
892 | /* determine value of ingredients */ |
892 | /* determine value of ingredients */ |
893 | value_ingredients = 0; |
893 | value_ingredients = 0; |
894 | for (tmp = cauldron->inv; tmp; tmp = tmp->below) |
894 | for (tmp = cauldron->inv; tmp; tmp = tmp->below) |
895 | value_ingredients += query_cost (tmp, NULL, F_TRUE); |
895 | value_ingredients += query_cost (tmp, NULL, F_TRUE); |
… | |
… | |
916 | "Forcing failure for shadow alchemy recipe because price of ingredients (%llu) is less than price of result (%llu).\n", |
916 | "Forcing failure for shadow alchemy recipe because price of ingredients (%llu) is less than price of result (%llu).\n", |
917 | value_ingredients, value_item); |
917 | value_ingredients, value_item); |
918 | #endif |
918 | #endif |
919 | } |
919 | } |
920 | /* roll the dice */ |
920 | /* roll the dice */ |
921 | else if ((float) (random_roll (0, 101, caster, PREFER_LOW)) <= 100.0 * success_chance) |
921 | else if (random_roll (0, 101, caster, PREFER_LOW) <= 100.0 * success_chance) |
922 | { |
922 | { |
923 | change_exp (caster, rp->exp, rp->skill, SK_EXP_NONE); |
923 | change_exp (caster, rp->exp, rp->skill, SK_EXP_NONE); |
924 | |
924 | |
925 | // let alchemy consume some time, so that exploits are less easy |
925 | // let alchemy consume some time, so that exploits are less easy |
926 | caster->speed_left -= 1.0; |
926 | caster->speed_left -= 1.0; |