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

Comparing deliantra/server/server/apply.C (file contents):
Revision 1.172 by root, Mon Sep 29 10:32:50 2008 UTC vs.
Revision 1.178 by root, Sun Dec 28 15:28:47 2008 UTC

995 item->nrof = give; 995 item->nrof = give;
996 996
997 if (nr) 997 if (nr)
998 item->nrof *= nr; 998 item->nrof *= nr;
999 999
1000 if (is_in_shop (converter)) 1000 if (converter->flag [FLAG_PRECIOUS])
1001 SET_FLAG (item, FLAG_UNPAID); 1001 SET_FLAG (item, FLAG_UNPAID);
1002
1003 if (is_in_shop (converter))
1004 {
1005 // converters on shop floors don't work anymore, bug lets check for it
1006 // and report in case someone still does it.
1007 LOG (llevDebug, "ITEMBUG: broken converter, converters on shop floor don't work: %s\n",
1008 converter->debug_desc ());
1009 SET_FLAG (item, FLAG_UNPAID);
1010 }
1002 else if (price_in < sint64 (item->nrof) * item->value) 1011 else if (price_in < sint64 (item->nrof) * item->value)
1003 { 1012 {
1004 LOG (llevDebug, "converter output price higher than input: %s at %s (%d, %d) in value %d, out value %d for %s\n", 1013 LOG (llevDebug, "converter output price higher than input: %s at %s (%d, %d) in value %d, out value %d for %s\n",
1005 &converter->name, &converter->map->path, converter->x, converter->y, price_in, item->nrof * item->value, &item->name); 1014 &converter->name, &converter->map->path, converter->x, converter->y, price_in, item->nrof * item->value, &item->name);
1006 /** 1015 /**
1153 { 1162 {
1154 has_unpaid = true; 1163 has_unpaid = true;
1155 break; 1164 break;
1156 } 1165 }
1157 1166
1158 if (op->type != PLAYER) 1167 if (!op->is_player ())
1159 { 1168 {
1160 /* Remove all the unpaid objects that may be carried here. 1169 /* Remove all the unpaid objects that may be carried here.
1161 * This could be pets or monsters that are somehow in 1170 * This could be pets or monsters that are somehow in
1162 * the shop. 1171 * the shop.
1163 */ 1172 */
1167 1176
1168 if (QUERY_FLAG (tmp, FLAG_UNPAID)) 1177 if (QUERY_FLAG (tmp, FLAG_UNPAID))
1169 { 1178 {
1170 int i = find_free_spot (tmp, op->map, op->x, op->y, 1, 9); 1179 int i = find_free_spot (tmp, op->map, op->x, op->y, 1, 9);
1171 1180
1181 if (i >= 0)
1172 tmp->remove (); 1182 tmp->move (i);
1173
1174 if (i == -1)
1175 i = 0;
1176
1177 tmp->map = op->map;
1178 tmp->x = op->x + freearr_x[i];
1179 tmp->y = op->y + freearr_y[i];
1180 insert_ob_in_map (tmp, op->map, op, 0);
1181 } 1183 }
1182 } 1184 }
1183 1185
1184 /* Don't teleport things like spell effects */ 1186 /* Don't teleport things like spell effects */
1185 if (QUERY_FLAG (op, FLAG_NO_PICK)) 1187 if (QUERY_FLAG (op, FLAG_NO_PICK))
1196 if (i != -1) 1198 if (i != -1)
1197 rv = transfer_ob (op, op->x + freearr_x[i], op->y + freearr_y[i], 0, shop_mat); 1199 rv = transfer_ob (op, op->x + freearr_x[i], op->y + freearr_y[i], 0, shop_mat);
1198 1200
1199 return 0; 1201 return 0;
1200 } 1202 }
1203
1201 /* Removed code that checked for multipart objects - it appears that 1204 /* Removed code that checked for multipart objects - it appears that
1202 * the teleport function should be able to handle this just fine. 1205 * the teleport function should be able to handle this just fine.
1203 */ 1206 */
1204 rv = teleport (shop_mat, SHOP_MAT, op); 1207 rv = teleport (shop_mat, SHOP_MAT, op);
1205 } 1208 }
1262static void 1265static void
1263apply_sign (object *op, object *sign, int autoapply) 1266apply_sign (object *op, object *sign, int autoapply)
1264{ 1267{
1265 if (sign->has_dialogue ()) 1268 if (sign->has_dialogue ())
1266 { 1269 {
1267 op->statusmsg (form ("Maybe you should I<talk> to the %s instead?", &sign->name)); 1270 op->statusmsg (format ("Maybe you should I<talk> to the %s instead?", &sign->name));
1268 return; 1271 return;
1269 } 1272 }
1270 1273
1271 if (!sign->msg) 1274 if (!sign->msg)
1272 { 1275 {
1273 op->statusmsg ("Nothing is written on it."); 1276 op->contr->infobox (MSG_CHANNEL ("examine"),
1277 format ("T<%s>\n\n Nothing %sis written on it.",
1278 &sign->name,
1279 sign->name == sign->arch->name ? "" : "else "));
1274 return; 1280 return;
1275 } 1281 }
1276 1282
1277 if (sign->stats.food) 1283 if (sign->stats.food)
1278 { 1284 {
1279 if (sign->last_eat >= sign->stats.food) 1285 if (sign->last_eat >= sign->stats.food)
1280 { 1286 {
1281 if (!sign->move_on) 1287 if (!sign->move_on)
1282 op->statusmsg ("You cannot read it anymore."); 1288 op->failmsg ("You cannot read it anymore.");
1283 1289
1284 return; 1290 return;
1285 } 1291 }
1286 1292
1287 if (!QUERY_FLAG (op, FLAG_WIZPASS)) 1293 if (!QUERY_FLAG (op, FLAG_WIZPASS))
1305 if (sign->sound) 1311 if (sign->sound)
1306 ns->play_sound (sign->sound); 1312 ns->play_sound (sign->sound);
1307 else if (autoapply) 1313 else if (autoapply)
1308 ns->play_sound (sound_find ("msg_voice")); 1314 ns->play_sound (sound_find ("msg_voice"));
1309 1315
1310 if (ns->can_msg)
1311 op->contr->infobox (MSG_CHANNEL ("examine"), format ("T<%s>\n\n%s", &sign->name, &sign->msg)); 1316 op->contr->infobox (MSG_CHANNEL ("examine"), format ("T<%s>\n\n%s", &sign->name, &sign->msg));
1312 else
1313 {
1314 readable_message_type *msgType = get_readable_message_type (sign);
1315 const char *somemsg = format ("%u %s", autoapply ? 1 : 0, &sign->msg);
1316 draw_ext_info (NDI_UNIQUE | NDI_NAVY, 0, op, msgType->message_type, msgType->message_subtype, somemsg, &sign->msg);
1317 }
1318 } 1317 }
1319} 1318}
1320 1319
1321static void 1320static void
1322move_apply_hole (object *trap, object *victim) 1321move_apply_hole (object *trap, object *victim)
1626 1625
1627 readable_message_type *msgType = get_readable_message_type (tmp); 1626 readable_message_type *msgType = get_readable_message_type (tmp);
1628 1627
1629 if (player *pl = op->contr) 1628 if (player *pl = op->contr)
1630 if (client *ns = pl->ns) 1629 if (client *ns = pl->ns)
1631 if (ns->can_msg)
1632 pl->infobox (MSG_CHANNEL ("book"), format ("T<%s>\n\n%s", (char *)long_desc (tmp, op), &tmp->msg)); 1630 pl->infobox (MSG_CHANNEL ("book"), format ("T<%s>\n\n%s", (char *)long_desc (tmp, op), &tmp->msg));
1633 else
1634 draw_ext_info_format (NDI_UNIQUE | NDI_NAVY, 0, op,
1635 msgType->message_type, msgType->message_subtype,
1636 "You open the %s and start reading.\n%s", (char *)"%s\n%s",
1637 long_desc (tmp, op), &tmp->msg);
1638 1631
1639 /* gain xp from reading */ 1632 /* gain xp from reading */
1640 if (!QUERY_FLAG (tmp, FLAG_NO_SKILL_IDENT)) 1633 if (!QUERY_FLAG (tmp, FLAG_NO_SKILL_IDENT))
1641 { /* only if not read before */ 1634 { /* only if not read before */
1642 int exp_gain = calc_skill_exp (op, tmp, skill_ob); 1635 int exp_gain = calc_skill_exp (op, tmp, skill_ob);
2170 op->statusmsg (buf); 2163 op->statusmsg (buf);
2171 2164
2172 /* now choose a winner if we have any */ 2165 /* now choose a winner if we have any */
2173 i = -1; 2166 i = -1;
2174 if (winners > 0) 2167 if (winners > 0)
2175 i = atnr_winner[RANDOM () % winners]; 2168 i = atnr_winner [rndm (winners)];
2176 2169
2177 if (i >= 0 && i < NROFATTACKS && skin->resist[i] < 95) 2170 if (i >= 0 && i < NROFATTACKS && skin->resist[i] < 95)
2178 { 2171 {
2179 /* resistance increased! */ 2172 /* resistance increased! */
2180 skin->resist[i]++; 2173 skin->resist[i]++;
2660 * person moving on it, also activate. Added code to make it 2653 * person moving on it, also activate. Added code to make it
2661 * so that at least one of players movement types be that which 2654 * so that at least one of players movement types be that which
2662 * the item needs. 2655 * the item needs.
2663 */ 2656 */
2664 if (!tmp->invisible || (tmp->move_on & pl->move_type)) 2657 if (!tmp->invisible || (tmp->move_on & pl->move_type))
2665 {
2666 if (player_apply (pl, tmp, 0, 1) == 1) 2658 if (player_apply (pl, tmp, 0, 1) == 1)
2667 return; 2659 return;
2668 } 2660
2669 if (floors >= 2) 2661 if (floors >= 2)
2670 return; /* process at most two floor objects */ 2662 return; /* process at most two floor objects */
2671 } 2663 }
2672} 2664}
2673 2665
2767 op->destroy (); 2759 op->destroy ();
2768 who->insert (tmp2); 2760 who->insert (tmp2);
2769 who->update_stats (); 2761 who->update_stats ();
2770 2762
2771 if (who->contr) 2763 if (who->contr)
2772 {
2773 if (QUERY_FLAG (op, FLAG_CURSED) || QUERY_FLAG (op, FLAG_DAMNED)) 2764 if (QUERY_FLAG (op, FLAG_CURSED) || QUERY_FLAG (op, FLAG_DAMNED))
2774 { 2765 {
2775 who->failmsg ("Oops, it feels deadly cold!"); 2766 who->failmsg ("Oops, it feels deadly cold!");
2776 SET_FLAG (tmp2, FLAG_KNOWN_CURSED); 2767 SET_FLAG (tmp2, FLAG_KNOWN_CURSED);
2777 } 2768 }
2778 }
2779 } 2769 }
2780 2770
2781 return 1; /* otherwise, an attempt to drop causes problems */ 2771 return 1; /* otherwise, an attempt to drop causes problems */
2782 2772
2783 case BOW: 2773 case BOW:
3305 who->update_stats (); 3295 who->update_stats ();
3306 3296
3307 if (QUERY_FLAG (op, FLAG_CURSED) || QUERY_FLAG (op, FLAG_DAMNED)) 3297 if (QUERY_FLAG (op, FLAG_CURSED) || QUERY_FLAG (op, FLAG_DAMNED))
3308 if (who->type == PLAYER) 3298 if (who->type == PLAYER)
3309 { 3299 {
3310 who->failmsg ("Oops, it feels deadly cold! H<Maybe it wasn't such a bright idea to apply this cursed/damned item.>"); 3300 who->failmsg ("Oops, it feels deadly cold! H<Maybe it wasn't such a bright (hrhrhr) idea to apply this cursed or damned item.>");
3311 SET_FLAG (tmp2, FLAG_KNOWN_CURSED); 3301 SET_FLAG (tmp2, FLAG_KNOWN_CURSED);
3312 } 3302 }
3313 3303
3314 return 0; 3304 return 0;
3315 3305
3493 if (QUERY_FLAG (op, FLAG_CURSED) || QUERY_FLAG (op, FLAG_DAMNED)) 3483 if (QUERY_FLAG (op, FLAG_CURSED) || QUERY_FLAG (op, FLAG_DAMNED))
3494 if (who->type == PLAYER) 3484 if (who->type == PLAYER)
3495 { 3485 {
3496 who->failmsg ( 3486 who->failmsg (
3497 "Oops, it feels deadly cold! " 3487 "Oops, it feels deadly cold! "
3498 "H<Maybe it wasn't such a bright idea to apply this cursed/damned item.>" 3488 "H<Maybe it wasn't such a bright idea to apply this cursed or damned item.>"
3499 ); 3489 );
3500 SET_FLAG (op, FLAG_KNOWN_CURSED); 3490 SET_FLAG (op, FLAG_KNOWN_CURSED);
3501 } 3491 }
3502 3492
3503 if (object *pl = op->visible_to ()) 3493 if (object *pl = op->visible_to ())

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines