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.72 by root, Sun Apr 20 00:44:12 2008 UTC vs.
Revision 1.79 by root, Tue Jul 29 02:00:55 2008 UTC

32 32
33//#define TREASURE_VERBOSE 33//#define TREASURE_VERBOSE
34 34
35#include <global.h> 35#include <global.h>
36#include <treasure.h> 36#include <treasure.h>
37#include <funcpoint.h>
38#include <loader.h> 37#include <loader.h>
39 38
40extern char *spell_mapping[]; 39extern char *spell_mapping[];
41 40
42static treasurelist *first_treasurelist; 41static treasurelist *first_treasurelist;
46typedef std::tr1::unordered_map< 45typedef std::tr1::unordered_map<
47 const char *, 46 const char *,
48 treasurelist *, 47 treasurelist *,
49 str_hash, 48 str_hash,
50 str_equal, 49 str_equal,
51 slice_allocator< std::pair<const char *const, treasurelist *> >, 50 slice_allocator< std::pair<const char *const, treasurelist *> >
52 true
53> tl_map_t; 51> tl_map_t;
54 52
55static tl_map_t tl_map; 53static tl_map_t tl_map;
56 54
57/* 55/*
145 143
146 switch (f.kw) 144 switch (f.kw)
147 { 145 {
148 case KW_arch: 146 case KW_arch:
149 t->item = archetype::find (f.get_str ()); 147 t->item = archetype::find (f.get_str ());
148
150 if (!t->item) 149 if (!t->item)
151 { 150 {
152 f.parse_warn ("treasure references unknown archetype"); 151 f.parse_warn ("treasure references unknown archetype");
153 goto error; 152 t->item = archetype::empty;
154 } 153 }
155 154
156 break; 155 break;
157 156
158 case KW_list: f.get (t->name); break; 157 case KW_list: f.get (t->name); break;
255 return; 254 return;
256 } 255 }
257 256
258 op->expand_tail (); 257 op->expand_tail ();
259 258
260 if (op->blocked (creator->map, creator->x, creator->y)) 259 if (!creator->is_on_map () || op->blocked (creator->map, creator->x, creator->y))
261 op->destroy (); 260 op->destroy ();
262 else 261 else
263 { 262 {
264 SET_FLAG (op, FLAG_OBJ_ORIGINAL); 263 SET_FLAG (op, FLAG_OBJ_ORIGINAL);
265 op->insert_at (creator, creator, INS_NO_MERGE | INS_NO_WALK_ON); 264 op->insert_at (creator, creator, INS_NO_MERGE | INS_NO_WALK_ON);
269 { 268 {
270 op = creator->insert (op); 269 op = creator->insert (op);
271 270
272 if ((flags & GT_APPLY) && QUERY_FLAG (creator, FLAG_MONSTER)) 271 if ((flags & GT_APPLY) && QUERY_FLAG (creator, FLAG_MONSTER))
273 monster_check_apply (creator, op); 272 monster_check_apply (creator, op);
274
275 if (flags & GT_UPDATE_INV)
276 if (object *tmp = creator->in_player ())
277 esrv_send_item (tmp, op);
278 } 273 }
279} 274}
280 275
281/* if there are change_xxx commands in the treasure, we include the changes 276/* if there are change_xxx commands in the treasure, we include the changes
282 * in the generated object 277 * in the generated object
582 if (op->type == ARMOUR) 577 if (op->type == ARMOUR)
583 ARMOUR_SPEED (op) = (ARMOUR_SPEED (op->arch) * (100 + magic * 10)) / 100; 578 ARMOUR_SPEED (op) = (ARMOUR_SPEED (op->arch) * (100 + magic * 10)) / 100;
584 579
585 if (magic < 0 && !(rndm (3))) /* You can't just check the weight always */ 580 if (magic < 0 && !(rndm (3))) /* You can't just check the weight always */
586 magic = (-magic); 581 magic = (-magic);
582
587 op->weight = (op->arch->weight * (100 - magic * 10)) / 100; 583 op->weight = (op->arch->weight * (100 - magic * 10)) / 100;
588 } 584 }
589 else 585 else
590 { 586 {
591 if (op->type == ARMOUR) 587 if (op->type == ARMOUR)
592 ARMOUR_SPEED (op) = (ARMOUR_SPEED (op) * (100 + magic * 10)) / 100; 588 ARMOUR_SPEED (op) = (ARMOUR_SPEED (op) * (100 + magic * 10)) / 100;
589
593 if (magic < 0 && !(rndm (3))) /* You can't just check the weight always */ 590 if (magic < 0 && !(rndm (3))) /* You can't just check the weight always */
594 magic = (-magic); 591 magic = (-magic);
592
595 op->weight = (op->weight * (100 - magic * 10)) / 100; 593 op->weight = (op->weight * (100 - magic * 10)) / 100;
596 } 594 }
597} 595}
598 596
599/* 597/*

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines