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

Comparing deliantra/server/server/time.C (file contents):
Revision 1.52 by root, Tue May 22 10:50:01 2007 UTC vs.
Revision 1.58 by root, Sat Jun 30 03:00:55 2007 UTC

1/* 1/*
2 * CrossFire, A Multiplayer game 2 * This file is part of Crossfire TRT, the Roguelike Realtime MORPG.
3 * 3 *
4 * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team 4 * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team
5 * Copyright (C) 2002 Mark Wedel & Crossfire Development Team 5 * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team
6 * Copyright (C) 1992 Frank Tore Johansen 6 * Copyright (©) 1992,2007 Frank Tore Johansen
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * Crossfire TRT is free software; you can redistribute it and/or modify it
9 * it under the terms of the GNU General Public License as published by 9 * under the terms of the GNU General Public License as published by the Free
10 * the Free Software Foundation; either version 2 of the License, or 10 * Software Foundation; either version 2 of the License, or (at your option)
11 * (at your option) any later version. 11 * any later version.
12 * 12 *
13 * This program is distributed in the hope that it will be useful, 13 * This program is distributed in the hope that it will be useful, but
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 * GNU General Public License for more details. 16 * for more details.
17 * 17 *
18 * You should have received a copy of the GNU General Public License 18 * You should have received a copy of the GNU General Public License along
19 * along with this program; if not, write to the Free Software 19 * with Crossfire TRT; if not, write to the Free Software Foundation, Inc. 51
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 * 21 *
22 * The authors can be reached via e-mail at <crossfire@schmorp.de> 22 * The authors can be reached via e-mail to <crossfire@schmorp.de>
23 */ 23 */
24 24
25/* 25/*
26 * Routines that is executed from objects based on their speed have been 26 * Routines that is executed from objects based on their speed have been
27 * collected in this file. 27 * collected in this file.
100 100
101 object *op; 101 object *op;
102 102
103 if (QUERY_FLAG (gen, FLAG_CONTENT_ON_GEN)) 103 if (QUERY_FLAG (gen, FLAG_CONTENT_ON_GEN))
104 { 104 {
105 // either copy one item form the inventory... 105 // either copy one item from the inventory...
106 if (!gen->inv) 106 if (!gen->inv)
107 return; 107 return;
108 108
109 // first select one item from the inventory 109 // first select one item from the inventory
110 int index = 0; 110 int index = 0;
115 op = object_create_clone (op); 115 op = object_create_clone (op);
116 116
117 CLEAR_FLAG (op, FLAG_IS_A_TEMPLATE); 117 CLEAR_FLAG (op, FLAG_IS_A_TEMPLATE);
118 unflag_inv (op, FLAG_IS_A_TEMPLATE); 118 unflag_inv (op, FLAG_IS_A_TEMPLATE);
119 } 119 }
120 else if (gen->other_arch)
121 {
122 // ...or use other_arch
123 op = arch_to_object (gen->other_arch);
124 }
120 else 125 else
121 {
122 // ...or use other_arch
123 if (archetype *at = gen->other_arch)
124 op = arch_to_object (at);
125 else
126 return; 126 return;
127 }
128 127
129 op->expand_tail (); 128 op->expand_tail ();
130 129
131 int i = find_free_spot (op, gen->map, gen->x, gen->y, 1, 9); 130 int i = find_free_spot (op, gen->map, gen->x, gen->y, 1, 9);
132 if (i >= 0) 131 if (i >= 0)
235 if (op->value) 234 if (op->value)
236 { 235 {
237 if (--op->stats.wc <= 0) 236 if (--op->stats.wc <= 0)
238 { /* Reached bottom, let's stop */ 237 { /* Reached bottom, let's stop */
239 op->stats.wc = 0; 238 op->stats.wc = 0;
240 if (op->arch->clone.speed) 239 if (op->arch->speed)
241 op->value = 0; 240 op->value = 0;
242 else 241 else
243 op->set_speed (0); 242 op->set_speed (0);
244 } 243 }
245 244
271 if (!QUERY_FLAG (tmp, FLAG_NO_PICK) || QUERY_FLAG (tmp, FLAG_CAN_ROLL) || QUERY_FLAG (tmp, FLAG_ALIVE)) 270 if (!QUERY_FLAG (tmp, FLAG_NO_PICK) || QUERY_FLAG (tmp, FLAG_CAN_ROLL) || QUERY_FLAG (tmp, FLAG_ALIVE))
272 break; 271 break;
273 272
274 if (tmp == NULL) 273 if (tmp == NULL)
275 { 274 {
276 if (op->arch->clone.speed) 275 if (op->arch->speed)
277 op->value = 1; 276 op->value = 1;
278 else 277 else
279 op->set_speed (0); 278 op->set_speed (0);
280 279
281 return; 280 return;
347 op->stats.food = 1; 346 op->stats.food = 1;
348 } 347 }
349 else 348 else
350 { 349 {
351 op->move_block = MOVE_ALL; 350 op->move_block = MOVE_ALL;
352 if (!op->arch->clone.stats.ac) 351 if (!op->arch->stats.ac)
353 SET_FLAG (op, FLAG_BLOCKSVIEW); 352 SET_FLAG (op, FLAG_BLOCKSVIEW);
354 update_all_los (op->map, op->x, op->y); 353 update_all_los (op->map, op->x, op->y);
355 } 354 }
356 } /* gate is halfway up */ 355 } /* gate is halfway up */
357 356
598 op->spellarg = NULL; 597 op->spellarg = NULL;
599 op->stats.sp = 0; 598 op->stats.sp = 0;
600 op->stats.hp = 0; 599 op->stats.hp = 0;
601 op->stats.grace = 0; 600 op->stats.grace = 0;
602 op->level = 0; 601 op->level = 0;
603 op->face = op->arch->clone.face; 602 op->face = op->arch->face;
604 op->owner = NULL; /* So that stopped arrows will be saved */ 603 op->owner = NULL; /* So that stopped arrows will be saved */
605 update_object (op, UP_OBJ_CHANGE); 604 update_object (op, UP_OBJ_CHANGE);
606 return op; 605 return op;
607} 606}
608 607
910 move_teleporter (op->more); 909 move_teleporter (op->more);
911 910
912 if (op->head) 911 if (op->head)
913 head = op->head; 912 head = op->head;
914 913
915 for (tmp = op->above; tmp != NULL; tmp = tmp->above) 914 for (tmp = op->above; tmp; tmp = tmp->above)
916 if (!QUERY_FLAG (tmp, FLAG_IS_FLOOR)) 915 if (!QUERY_FLAG (tmp, FLAG_IS_FLOOR))
917 break; 916 break;
918 917
919 /* If nothing above us to move, nothing to do */ 918 /* If nothing above us to move, nothing to do */
920 if (!tmp || QUERY_FLAG (tmp, FLAG_WIZPASS)) 919 if (!tmp || QUERY_FLAG (tmp, FLAG_WIZPASS))
1015 return; /* dm has created a firewall in his inventory */ 1014 return; /* dm has created a firewall in his inventory */
1016 1015
1017 spell = op->inv; 1016 spell = op->inv;
1018 1017
1019 if (!spell || spell->type != SPELL) 1018 if (!spell || spell->type != SPELL)
1020 spell = &op->other_arch->clone; 1019 spell = op->other_arch;
1021 1020
1022 if (!spell) 1021 if (!spell)
1023 { 1022 {
1024 LOG (llevError, "move_firewall: no spell specified (%s, %s, %d, %d)\n", &op->name, &op->map->name, op->x, op->y); 1023 LOG (llevError, "move_firewall: no spell specified (%s, %s, %d, %d)\n", &op->name, &op->map->name, op->x, op->y);
1025 return; 1024 return;
1136 if (op->above == NULL) 1135 if (op->above == NULL)
1137 return; 1136 return;
1138 1137
1139 for (tmp = op->above; tmp; tmp = tmp->above) 1138 for (tmp = op->above; tmp; tmp = tmp->above)
1140 { 1139 {
1141 if (op->other_arch->name == tmp->arch->name) 1140 if (op->other_arch->archname == tmp->arch->archname)
1142 { 1141 {
1143 if (op->level <= 0) 1142 if (op->level <= 0)
1144 tmp->destroy (); 1143 tmp->destroy ();
1145 else 1144 else
1146 { 1145 {
1299} 1298}
1300 1299
1301void 1300void
1302process_object (object *op) 1301process_object (object *op)
1303{ 1302{
1304 if (QUERY_FLAG (op, FLAG_IS_A_TEMPLATE)) 1303 if (expect_false (QUERY_FLAG (op, FLAG_IS_A_TEMPLATE)))
1305 return; 1304 return;
1306 1305
1307 if (INVOKE_OBJECT (TICK, op)) 1306 if (expect_false (INVOKE_OBJECT (TICK, op)))
1308 return; 1307 return;
1309 1308
1310 if (QUERY_FLAG (op, FLAG_MONSTER)) 1309 if (QUERY_FLAG (op, FLAG_MONSTER))
1311 if (move_monster (op) || QUERY_FLAG (op, FLAG_FREED)) 1310 if (move_monster (op) || QUERY_FLAG (op, FLAG_FREED))
1312 return; 1311 return;
1317 1316
1318 if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE)) 1317 if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE))
1319 make_sure_seen (op); 1318 make_sure_seen (op);
1320 } 1319 }
1321 1320
1321 if (expect_false (
1322 if (op->flag [FLAG_GENERATOR] 1322 op->flag [FLAG_GENERATOR]
1323 || op->flag [FLAG_CHANGING] 1323 || op->flag [FLAG_CHANGING]
1324 || op->flag [FLAG_IS_USED_UP]) 1324 || op->flag [FLAG_IS_USED_UP]
1325 ))
1325 { 1326 {
1326 if (QUERY_FLAG (op, FLAG_CHANGING) && !op->state) 1327 if (QUERY_FLAG (op, FLAG_CHANGING) && !op->state)
1327 { 1328 {
1328 change_object (op); 1329 change_object (op);
1329 return; 1330 return;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines