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

Comparing deliantra/server/server/main.C (file contents):
Revision 1.171 by root, Tue May 3 11:23:48 2011 UTC vs.
Revision 1.174 by root, Tue Jan 3 11:25:36 2012 UTC

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,2008,2009,2010,2011 Marc Alexander Lehmann / Robin Redeker / the Deliantra team 4 * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
5 * Copyright (©) 2001-2003 Mark Wedel & Crossfire Development Team 5 * Copyright (©) 2001-2003 Mark Wedel & Crossfire Development Team
6 * Copyright (©) 1992 Frank Tore Johansen 6 * Copyright (©) 1992 Frank Tore Johansen
7 * 7 *
8 * Deliantra is free software: you can redistribute it and/or modify it under 8 * Deliantra is free software: you can redistribute it and/or modify it under
9 * the terms of the Affero GNU General Public License as published by the 9 * the terms of the Affero GNU General Public License as published by the
58 * the function that calls this should figure them out. 58 * the function that calls this should figure them out.
59 */ 59 */
60bool 60bool
61object::enter_map (maptile *newmap, int x, int y) 61object::enter_map (maptile *newmap, int x, int y)
62{ 62{
63 if (destroyed () || !newmap || newmap->in_memory != MAP_ACTIVE) 63 if (destroyed () || !newmap || !newmap->linkable ())
64 return false; 64 return false;
65 65
66 if (out_of_map (newmap, x, y)) 66 if (out_of_map (newmap, x, y))
67 { 67 {
68 LOG (llevError, "enter_map: supplied coordinates are not within the map! (%s: %d, %d)\n", &newmap->path, x, y); 68 LOG (llevError, "enter_map: supplied coordinates are not within the map! (%s: %d, %d)\n", &newmap->path, x, y);
130 return false; 130 return false;
131 } 131 }
132 132
133 enemy = 0; 133 enemy = 0;
134 134
135 newmap->activate (); // workaround for activate activating everyhing on the map, includign the palyer on the {link} map
135 //newmap->insert (this, x, y); 136 //newmap->insert (this, x, y);
136 newmap->insert (this, x, y, 0, INS_NO_AUTO_EXIT); 137 newmap->insert (this, x, y, 0, INS_NO_AUTO_EXIT);
137 prefetch_surrounding_maps (); 138 prefetch_surrounding_maps ();
138 139
139 if (map == newmap) // see if we actually arrived there - insert might trigger a teleport 140 if (map == newmap) // see if we actually arrived there - insert might trigger a teleport
369 _exit (make_core); 370 _exit (make_core);
370} 371}
371 372
372/* 373/*
373 * do_specials() is a collection of functions to call from time to time. 374 * do_specials() is a collection of functions to call from time to time.
374 * Modified 2000-1-14 MSW to use the global pticks count to determine how 375 * Modified 2000-1-14 MSW to use the global server_tick count to determine how
375 * often to do things. This will allow us to spred them out more often. 376 * often to do things. This will allow us to spred them out more often.
376 * I use prime numbers for the factor count - in that way, it is less likely 377 * I use prime numbers for the factor count - in that way, it is less likely
377 * these actions will fall on the same tick (compared to say using 500/2500/15000 378 * these actions will fall on the same tick (compared to say using 500/2500/15000
378 * which would mean on that 15,000 tick count a whole bunch of stuff gets 379 * which would mean on that 15,000 tick count a whole bunch of stuff gets
379 * done). Of course, there can still be times where multiple specials are 380 * done). Of course, there can still be times where multiple specials are
386do_specials () 387do_specials ()
387{ 388{
388 shstr::gc (); 389 shstr::gc ();
389 archetype::gc (); 390 archetype::gc ();
390 391
391 if (expect_false (!(pticks % TICKS_PER_HOUR))) 392 if (expect_false (!(server_tick % TICKS_PER_HOUR)))
392 maptile::adjust_daylight (); 393 maptile::adjust_daylight ();
393 394
394 if (expect_false (!(pticks % 2503))) 395 if (expect_false (!(server_tick % 2503)))
395 fix_weight (); /* Hack to fix weightproblems caused by bugs */ 396 fix_weight (); /* Hack to fix weightproblems caused by bugs */
396 397
397 if (expect_false (!(pticks % 5003))) 398 if (expect_false (!(server_tick % 5003)))
398 write_book_archive (); 399 write_book_archive ();
399 400
400 if (expect_false (!(pticks % 5009))) 401 if (expect_false (!(server_tick % 5009)))
401 clean_friendly_list (); 402 clean_friendly_list ();
402 403
403 if (expect_false (!(pticks % 5011))) 404 if (expect_false (!(server_tick % 5011)))
404 obsolete_parties (); 405 obsolete_parties ();
405 406
406 if (expect_false (!(pticks % 12503))) 407 if (expect_false (!(server_tick % 12503)))
407 fix_luck (); 408 fix_luck ();
408} 409}
409 410
410void 411void
411server_tick () 412one_tick ()
412{ 413{
413 // first do the user visible stuff 414 // first do the user visible stuff
414 INVOKE_GLOBAL (CLOCK); 415 INVOKE_GLOBAL (CLOCK);
415 process_events (); // "do" something with objects with speed 416 process_events (); // "do" something with objects with speed
416 client::clock (); // draw client maps etc. 417 client::clock (); // draw client maps etc.
417 418
418 // then do some bookkeeping, should not really be here 419 // then do some bookkeeping, should not really be here
419 do_specials (); /* Routines called from time to time. */ 420 do_specials (); /* Routines called from time to time. */
420 attachable::check_mortals (); 421 attachable::check_mortals ();
421 422
422 ++pticks; 423 // now that we aggressively reuse id's, this is very unlikely to happen...
423
424 if (object::object_count >= RESTART_COUNT) 424 if (object::object_count >= RESTART_COUNT)
425 cleanup ("running out of protocol ID values - need full restart"); 425 cleanup ("running out of protocol ID values - need full restart");
426} 426}
427 427
428// normal main 428// normal main

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines