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

Comparing deliantra/server/common/treasure.C (file contents):
Revision 1.18 by root, Thu Sep 14 21:16:11 2006 UTC vs.
Revision 1.24 by root, Tue Dec 12 21:39:56 2006 UTC

1
2/*
3 * static char *rcs_treasure_c =
4 * "$Id: treasure.C,v 1.18 2006/09/14 21:16:11 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#define ALLOWED_COMBINATION 24#define ALLOWED_COMBINATION
31 25
32/* TREASURE_DEBUG does some checking on the treasurelists after loading. 26/* TREASURE_DEBUG does some checking on the treasurelists after loading.
456 * inserted into, and then return that treausre 450 * inserted into, and then return that treausre
457 */ 451 */
458object * 452object *
459generate_treasure (treasurelist * t, int difficulty) 453generate_treasure (treasurelist * t, int difficulty)
460{ 454{
461 object *ob = get_object (), *tmp; 455 object *ob = object::create (), *tmp;
462 456
463 create_treasure (t, ob, 0, difficulty, 0); 457 create_treasure (t, ob, 0, difficulty, 0);
464 458
465 /* Don't want to free the object we are about to return */ 459 /* Don't want to free the object we are about to return */
466 tmp = ob->inv; 460 tmp = ob->inv;
467 if (tmp != NULL) 461 if (tmp != NULL)
468 remove_ob (tmp); 462 tmp->remove ();
463
469 if (ob->inv) 464 if (ob->inv)
470 {
471 LOG (llevError, "In generate treasure, created multiple objects.\n"); 465 LOG (llevError, "In generate treasure, created multiple objects.\n");
472 } 466
473 free_object (ob); 467 ob->destroy ();
474 return tmp; 468 return tmp;
475} 469}
476 470
477/* 471/*
478 * This is a new way of calculating the chance for an item to have 472 * This is a new way of calculating the chance for an item to have
855 } 849 }
856 850
857 if (difficulty < 1) 851 if (difficulty < 1)
858 difficulty = 1; 852 difficulty = 1;
859 853
854 if (INVOKE_OBJECT (ADD_BONUS, op,
855 ARG_OBJECT (creator != op ? creator : 0),
856 ARG_INT (difficulty), ARG_INT (max_magic),
857 ARG_INT (flags)))
858 return;
859
860 if (!(flags & GT_MINIMAL)) 860 if (!(flags & GT_MINIMAL))
861 { 861 {
862 if (op->arch == crown_arch) 862 if (op->arch == crown_arch)
863 { 863 {
864 set_magic (difficulty, op, max_magic, flags); 864 set_magic (difficulty, op, max_magic, flags);
999 op->value *= 5; /* Since it's not just decoration */ 999 op->value *= 5; /* Since it's not just decoration */
1000 1000
1001 case RING: 1001 case RING:
1002 if (op->arch == NULL) 1002 if (op->arch == NULL)
1003 { 1003 {
1004 remove_ob (op); 1004 op->destroy ();
1005 free_object (op);
1006 op = NULL; 1005 op = 0;
1007 break; 1006 break;
1008 } 1007 }
1009 1008
1010 if (op->arch != ring_arch && op->arch != amulet_arch) /* It's a special artifact! */ 1009 if (op->arch != ring_arch && op->arch != amulet_arch) /* It's a special artifact! */
1011 break; 1010 break;
1390 art->chance = (uint16) value; 1389 art->chance = (uint16) value;
1391 else if (sscanf (cp, "difficulty %d", &value)) 1390 else if (sscanf (cp, "difficulty %d", &value))
1392 art->difficulty = (uint8) value; 1391 art->difficulty = (uint8) value;
1393 else if (!strncmp (cp, "Object", 6)) 1392 else if (!strncmp (cp, "Object", 6))
1394 { 1393 {
1395 art->item = get_object (); 1394 art->item = object::create ();
1396 1395
1397 if (!load_object (thawer, art->item, 0)) 1396 if (!load_object (thawer, art->item, 0))
1398 LOG (llevError, "Init_Artifacts: Could not load object.\n"); 1397 LOG (llevError, "Init_Artifacts: Could not load object.\n");
1399 1398
1400 art->item->name = strchr (cp, ' ') + 1; 1399 art->item->name = strchr (cp, ' ') + 1;
1511 { 1510 {
1512 object *tmp_obj; 1511 object *tmp_obj;
1513 1512
1514 /* Remove any spells this object currently has in it */ 1513 /* Remove any spells this object currently has in it */
1515 while (op->inv) 1514 while (op->inv)
1516 { 1515 op->inv->destroy ();
1517 tmp_obj = op->inv;
1518 remove_ob (tmp_obj);
1519 free_object (tmp_obj);
1520 }
1521 1516
1522 tmp_obj = arch_to_object (change->other_arch); 1517 tmp_obj = arch_to_object (change->other_arch);
1523 insert_ob_in_ob (tmp_obj, op); 1518 insert_ob_in_ob (tmp_obj, op);
1524 } 1519 }
1525 /* No harm setting this for potions/horns */ 1520 /* No harm setting this for potions/horns */
1562 op->gen_sp_armour = (op->gen_sp_armour * (change->gen_sp_armour)) / 100; 1557 op->gen_sp_armour = (op->gen_sp_armour * (change->gen_sp_armour)) / 100;
1563 1558
1564 op->item_power = change->item_power; 1559 op->item_power = change->item_power;
1565 1560
1566 for (i = 0; i < NROFATTACKS; i++) 1561 for (i = 0; i < NROFATTACKS; i++)
1567 {
1568 if (change->resist[i]) 1562 if (change->resist[i])
1569 {
1570 op->resist[i] += change->resist[i]; 1563 op->resist[i] += change->resist[i];
1571 }
1572 }
1573 1564
1574 if (change->stats.dam) 1565 if (change->stats.dam)
1575 { 1566 {
1576 if (change->stats.dam < 0) 1567 if (change->stats.dam < 0)
1577 op->stats.dam = (-change->stats.dam); 1568 op->stats.dam = (-change->stats.dam);
1855 free_artifact (at->next); 1846 free_artifact (at->next);
1856 1847
1857 if (at->allowed) 1848 if (at->allowed)
1858 free_charlinks (at->allowed); 1849 free_charlinks (at->allowed);
1859 1850
1860 at->item->free (1); 1851 at->item->destroy (1);
1861 1852
1862 delete at; 1853 delete at;
1863} 1854}
1864 1855
1865void 1856void
1866free_artifactlist (artifactlist * al) 1857free_artifactlist (artifactlist * al)
1867{ 1858{
1868 artifactlist *nextal; 1859 artifactlist *nextal;
1869 1860
1870 for (al = first_artifactlist; al != NULL; al = nextal) 1861 for (al = first_artifactlist; al; al = nextal)
1871 { 1862 {
1872 nextal = al->next; 1863 nextal = al->next;
1873 1864
1874 if (al->items) 1865 if (al->items)
1875 free_artifact (al->items); 1866 free_artifact (al->items);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines