1 | /* |
1 | /* |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
3 | * |
3 | * |
4 | * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
4 | * Copyright (©) 2005,2006,2007,2008 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
5 | * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team |
5 | * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team |
6 | * Copyright (©) 1992,2007 Frank Tore Johansen |
6 | * Copyright (©) 1992,2007 Frank Tore Johansen |
7 | * |
7 | * |
8 | * Deliantra is free software: you can redistribute it and/or modify |
8 | * Deliantra is free software: you can redistribute it and/or modify |
9 | * 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 |
… | |
… | |
241 | altern = other_teleporter; |
241 | altern = other_teleporter; |
242 | } |
242 | } |
243 | |
243 | |
244 | if (!nrofalt) |
244 | if (!nrofalt) |
245 | { |
245 | { |
246 | LOG (llevError, "No alternative teleporters around!\n"); |
246 | LOG (llevError, "%s: no alternative teleporters around (user %s).\n", |
|
|
247 | teleporter->debug_desc (), user->debug_desc ()); |
247 | return 0; |
248 | return 0; |
248 | } |
249 | } |
249 | |
250 | |
250 | other_teleporter = altern; |
251 | other_teleporter = altern; |
251 | k = find_free_spot (user, other_teleporter->map, other_teleporter->x, other_teleporter->y, 1, 9); |
252 | k = find_free_spot (user, other_teleporter->map, other_teleporter->x, other_teleporter->y, 1, 9); |
… | |
… | |
372 | op = op->head; |
373 | op = op->head; |
373 | |
374 | |
374 | x = op->x + freearr_x[dir]; |
375 | x = op->x + freearr_x[dir]; |
375 | y = op->y + freearr_y[dir]; |
376 | y = op->y + freearr_y[dir]; |
376 | |
377 | |
377 | if (!QUERY_FLAG (op, FLAG_CAN_ROLL) || (op->weight && random_roll (0, op->weight / 50000 - 1, pusher, PREFER_LOW) > pusher->stats.Str)) |
378 | if (!QUERY_FLAG (op, FLAG_CAN_ROLL) |
|
|
379 | || (op->weight && random_roll (0, op->weight / 50000 - 1, pusher, PREFER_LOW) |
|
|
380 | > pusher->stats.Str)) |
378 | return 0; |
381 | return 0; |
379 | |
382 | |
380 | m = op->map; |
383 | m = op->map; |
381 | flags = get_map_flags (m, &m, x, y, &x, &y); |
384 | flags = get_map_flags (m, &m, x, y, &x, &y); |
382 | |
385 | |