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.23 by root, Sun Sep 10 15:59:57 2006 UTC vs.
Revision 1.29 by root, Fri Sep 15 23:31:34 2006 UTC

1
2/*
3 * static char *rcsid_main_c =
4 * "$Id: main.C,v 1.23 2006/09/10 15:59:57 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) 2001-2003 Mark Wedel & Crossfire Development Team 4 Copyright (C) 2001-2003 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#include <global.h> 24#include <global.h>
31#include <object.h> 25#include <object.h>
32#include <tod.h> 26#include <tod.h>
418 */ 412 */
419char * 413char *
420clean_path (const char *file) 414clean_path (const char *file)
421{ 415{
422 static char newpath[MAX_BUF], *cp; 416 static char newpath[MAX_BUF], *cp;
417 assign (newpath, file);
423 418
424 strncpy (newpath, file, MAX_BUF - 1);
425 newpath[MAX_BUF - 1] = '\0';
426 for (cp = newpath; *cp != '\0'; cp++) 419 for (cp = newpath; *cp != '\0'; cp++)
427 {
428 if (*cp == '/') 420 if (*cp == '/')
429 *cp = '_'; 421 *cp = '_';
430 } 422
431 return newpath; 423 return newpath;
432} 424}
433 425
434 426
435/* unclean_path takes a path and replaces all _ with / 427/* unclean_path takes a path and replaces all _ with /
443unclean_path (const char *src) 435unclean_path (const char *src)
444{ 436{
445 static char newpath[MAX_BUF], *cp; 437 static char newpath[MAX_BUF], *cp;
446 438
447 cp = strrchr (src, '/'); 439 cp = strrchr (src, '/');
448 if (cp) 440 assign (newpath, cp ? cp + 1 : src);
449 strncpy (newpath, cp + 1, MAX_BUF - 1);
450 else
451 strncpy (newpath, src, MAX_BUF - 1);
452 newpath[MAX_BUF - 1] = '\0';
453 441
454 for (cp = newpath; *cp != '\0'; cp++) 442 for (cp = newpath; *cp != '\0'; cp++)
455 {
456 if (*cp == '_') 443 if (*cp == '_')
457 *cp = '/'; 444 *cp = '/';
458 } 445
459 return newpath; 446 return newpath;
460} 447}
461 448
462 449
463/* The player is trying to enter a randomly generated map. In this case, generate the 450/* The player is trying to enter a randomly generated map. In this case, generate the
1113 1100
1114void 1101void
1115process_events (mapstruct *map) 1102process_events (mapstruct *map)
1116{ 1103{
1117 object *op; 1104 object *op;
1105
1106 static object *marker;
1107 if (!marker)
1118 object *marker = get_object (); 1108 marker = get_object ();
1119 tag_t tag;
1120 1109
1121 process_players1 (map); 1110 process_players1 (map);
1122 1111
1123 marker->active_next = active_objects; 1112 marker->active_next = active_objects;
1124 1113
1129 active_objects = marker; 1118 active_objects = marker;
1130 1119
1131 while (marker->active_next) 1120 while (marker->active_next)
1132 { 1121 {
1133 op = marker->active_next; 1122 op = marker->active_next;
1134 tag = op->count;
1135 1123
1136 /* Move marker forward - swap op and marker */ 1124 /* Move marker forward - swap op and marker */
1137 op->active_prev = marker->active_prev; 1125 op->active_prev = marker->active_prev;
1138 1126
1139 if (op->active_prev) 1127 if (op->active_prev)
1226 LOG (llevDebug, "process_events: calling process_object with removed object %s\n", op->name ? op->name : "null"); 1214 LOG (llevDebug, "process_events: calling process_object with removed object %s\n", op->name ? op->name : "null");
1227 } 1215 }
1228#endif 1216#endif
1229 --op->speed_left; 1217 --op->speed_left;
1230 process_object (op); 1218 process_object (op);
1219
1231 if (was_destroyed (op, tag)) 1220 if (op->destroyed ())
1232 continue; 1221 continue;
1233 } 1222 }
1223
1234 if (settings.casting_time == TRUE && op->casting_time > 0) 1224 if (settings.casting_time == TRUE && op->casting_time > 0)
1235 op->casting_time--; 1225 op->casting_time--;
1226
1236 if (op->speed_left <= 0) 1227 if (op->speed_left <= 0)
1237 op->speed_left += FABS (op->speed); 1228 op->speed_left += FABS (op->speed);
1238 } 1229 }
1239 1230
1240 /* Remove marker object from active list */ 1231 /* Remove marker object from active list */
1242 marker->active_prev->active_next = NULL; 1233 marker->active_prev->active_next = NULL;
1243 else 1234 else
1244 active_objects = NULL; 1235 active_objects = NULL;
1245 1236
1246 process_players2 (map); 1237 process_players2 (map);
1247
1248 free_object (marker);
1249} 1238}
1250 1239
1251void 1240void
1252clean_tmp_files (void) 1241clean_tmp_files (void)
1253{ 1242{
1286 1275
1287/* clean up everything before exiting */ 1276/* clean up everything before exiting */
1288void 1277void
1289cleanup (void) 1278cleanup (void)
1290{ 1279{
1291 LOG (llevDebug, "Cleanup called. freeing data.\n"); 1280 LOG (llevDebug, "Cleanup called.\n");
1281
1282 for (player *pl = first_player; pl != NULL; pl = pl->next)
1283 save_player (pl->ob, 0);
1284
1285 for (player *pl = first_player; pl != NULL; pl = pl->next)
1286 if (!QUERY_FLAG (pl->ob, FLAG_REMOVED))
1287 leave_map (pl->ob);
1288
1292 clean_tmp_files (); 1289 clean_tmp_files ();
1293 write_book_archive (); 1290 write_book_archive ();
1294#ifdef MEMORY_DEBUG
1295 free_all_maps ();
1296 free_style_maps ();
1297 free_all_object_data ();
1298 free_all_archs ();
1299 free_all_treasures ();
1300 free_all_images ();
1301 free_all_newserver ();
1302 free_all_recipes ();
1303 free_all_readable ();
1304 free_all_god ();
1305 free_all_anim ();
1306 /* See what the string data that is out there that hasn't been freed. */
1307 1291
1308/* LOG(llevDebug, ss_dump_table(0xff));*/ 1292 INVOKE_GLOBAL (CLEANUP);
1309#endif 1293
1310 exit (0); 1294 _exit (0);
1311} 1295}
1312 1296
1313void 1297void
1314leave (player *pl, int draw_exit) 1298leave (player *pl, int draw_exit)
1315{ 1299{

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines