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.2 by root, Fri Feb 3 07:25:25 2006 UTC vs.
Revision 1.12 by root, Wed Jul 19 22:51:40 2006 UTC

1/* 1/*
2 * static char *rcsid_main_c = 2 * static char *rcsid_main_c =
3 * "$Id: main.c,v 1.2 2006/02/03 07:25:25 root Exp $"; 3 * "$Id: main.c,v 1.12 2006/07/19 22:51:40 root Exp $";
4 */ 4 */
5 5
6/* 6/*
7 CrossFire, A Multiplayer game for X-windows 7 CrossFire, A Multiplayer game for X-windows
8 8
55 55
56void version(object *op) { 56void version(object *op) {
57 if(op!=NULL) 57 if(op!=NULL)
58 clear_win_info(op); 58 clear_win_info(op);
59 59
60 new_draw_info_format(NDI_UNIQUE, 0, op, "This is Crossfire v%s-schmorp-cvs",VERSION); 60 new_draw_info_format(NDI_UNIQUE, 0, op, "This is Crossfire v%s",VERSION);
61 61
62/* If in a socket, don't print out the list of authors. It confuses the 62/* If in a socket, don't print out the list of authors. It confuses the
63 * crossclient program. 63 * crossclient program.
64 */ 64 */
65 if (op==NULL) return; 65 if (op==NULL) return;
511 exit_ob->name, exit_ob->x, exit_ob->y, exit_ob->map->path); 511 exit_ob->name, exit_ob->x, exit_ob->y, exit_ob->map->path);
512 return; 512 return;
513 } 513 }
514 *sourcemap++ = '\0'; 514 *sourcemap++ = '\0';
515 515
516 /* If we are not coming from a template map, we can use reletive directories 516 /* If we are not coming from a template map, we can use relative directories
517 * for the map to generate from. 517 * for the map to generate from.
518 */ 518 */
519 if (!exit_ob->map->template) { 519 if (!exit_ob->map->template) {
520 sourcemap = path_combine_and_normalize(exit_ob->map->path, sourcemap); 520 sourcemap = path_combine_and_normalize(exit_ob->map->path, sourcemap);
521 } 521 }
719 /* It may be nice to support other creatures moving across 719 /* It may be nice to support other creatures moving across
720 * exits, but right now a lot of the code looks at op->contr, 720 * exits, but right now a lot of the code looks at op->contr,
721 * so thta is an RFE. 721 * so thta is an RFE.
722 */ 722 */
723 if (op->type != PLAYER) return; 723 if (op->type != PLAYER) return;
724
725 /* Need to remove player from transport */
726 if (op->contr->transport) apply_transport(op, op->contr->transport, AP_UNAPPLY);
724 727
725 /* First, lets figure out what map the player is going to go to */ 728 /* First, lets figure out what map the player is going to go to */
726 if (exit_ob){ 729 if (exit_ob){
727 730
728 /* check to see if we make a template map */ 731 /* check to see if we make a template map */
782 else 785 else
783 newmap = ready_map_name(EXIT_PATH(exit_ob), 0); 786 newmap = ready_map_name(EXIT_PATH(exit_ob), 0);
784 } 787 }
785 if (!newmap) 788 if (!newmap)
786 { 789 {
790 if (exit_ob->name)
787 new_draw_info_format(NDI_UNIQUE, 0, op, "The %s is closed.", exit_ob->name); 791 new_draw_info_format(NDI_UNIQUE, 0, op, "The %s is closed.", exit_ob->name);
792 /* don't cry to momma if name is not set - as in tmp objects
793 * used by the savebed code and character creation */
788 return; 794 return;
789 } 795 }
790 796
791 /* This supports the old behaviour, but it really should not be used. 797 /* This supports the old behaviour, but it really should not be used.
792 * I will note for example that with this method, it is impossible to 798 * I will note for example that with this method, it is impossible to
933 if ((pl->last_save_tick+AUTOSAVE)<pticks && pl->state==ST_PLAYING) { 939 if ((pl->last_save_tick+AUTOSAVE)<pticks && pl->state==ST_PLAYING) {
934 /* Don't save the player on unholy ground. Instead, increase the 940 /* Don't save the player on unholy ground. Instead, increase the
935 * tick time so it will be about 10 seconds before we try and save 941 * tick time so it will be about 10 seconds before we try and save
936 * again. 942 * again.
937 */ 943 */
938 if (get_map_flags(pl->ob->map, NULL, pl->ob->x, pl->ob->y, NULL, NULL) & P_NO_CLERIC) { 944// if (get_map_flags(pl->ob->map, NULL, pl->ob->x, pl->ob->y, NULL, NULL) & P_NO_CLERIC) {
939 pl->last_save_tick += 100; 945// pl->last_save_tick += 100;
940 } else { 946// } else {
941 save_player(pl->ob,1); 947 save_player(pl->ob,1);
942 pl->last_save_tick = pticks; 948// pl->last_save_tick = pticks;
943 } 949// }
944 } 950 }
945#endif 951#endif
946 } /* end of for loop for all the players */ 952 } /* end of for loop for all the players */
947 } /* for flag */ 953 } /* for flag */
948 for(pl=first_player;pl!=NULL;pl=pl->next) { 954 for(pl=first_player;pl!=NULL;pl=pl->next) {
1181#endif 1187#endif
1182 exit(0); 1188 exit(0);
1183} 1189}
1184 1190
1185void leave(player *pl, int draw_exit) { 1191void leave(player *pl, int draw_exit) {
1186 char buf[MAX_BUF];
1187
1188 if (pl!=NULL) { 1192 if (pl != NULL) {
1189 /* We do this so that the socket handling routine can do the final 1193 /* We do this so that the socket handling routine can do the final
1190 * cleanup. We also leave that loop to actually handle the freeing 1194 * cleanup. We also leave that loop to actually handle the freeing
1191 * of the data. 1195 * of the data.
1192 */ 1196 */
1193 if (draw_exit==0) 1197 if (pl->ob->type != DEAD_OBJECT)
1194 { 1198 {
1199 execute_global_event (EVENT_LOGOUT, pl, pl->socket.host);
1200 LOG (llevInfo,"LOGOUT: Player named %s from ip %s\n", pl->ob->name, pl->socket.host);
1201
1202 pl->socket.status = Ns_Dead;
1203
1204 /* If a hidden dm dropped connection do not create
1205 * inconsistencies by showing that they have left the game
1206 */
1207 if (!(QUERY_FLAG(pl->ob,FLAG_WIZ) && pl->ob->contr->hidden)
1208 && draw_exit
1209 && (pl->state != ST_GET_NAME && pl->state!=ST_GET_PASSWORD && pl->state != ST_CONFIRM_PASSWORD))
1210 {
1211 char buf[MAX_BUF];
1212 sprintf (buf, "%s left the game.", pl->ob->name);
1213 new_draw_info(NDI_UNIQUE | NDI_ALL | NDI_DK_ORANGE, 5, NULL, buf);
1214 }
1215 }
1216
1217 if (pl->ob->map) {
1218 if (pl->ob->map->in_memory==MAP_IN_MEMORY)
1219 pl->ob->map->timeout = MAP_TIMEOUT(pl->ob->map);
1220 pl->ob->map->players--;
1221 pl->ob->map=NULL;
1195 } 1222 }
1196 pl->socket.status=Ns_Dead;
1197 LOG(llevInfo,"LOGOUT: Player named %s from ip %s\n", pl->ob->name,
1198 pl->socket.host);
1199 1223
1200 (void) sprintf(buf,"%s left the game.",pl->ob->name);
1201 if (pl->ob->map) {
1202 if (pl->ob->map->in_memory==MAP_IN_MEMORY)
1203 pl->ob->map->timeout = MAP_TIMEOUT(pl->ob->map);
1204 pl->ob->map->players--;
1205 pl->ob->map=NULL;
1206 }
1207 pl->ob->type = DEAD_OBJECT; /* To avoid problems with inventory window */ 1224 pl->ob->type = DEAD_OBJECT; /* To avoid problems with inventory window */
1208 } 1225 }
1209 /* If a hidden dm dropped connection do not create
1210 * inconsistencies by showing that they have left the game
1211 */
1212 if (!(QUERY_FLAG(pl->ob,FLAG_WIZ) && pl->ob->contr->hidden) &&
1213 (pl!=NULL && draw_exit) &&
1214 (pl->state != ST_GET_NAME && pl->state!=ST_GET_PASSWORD && pl->state != ST_CONFIRM_PASSWORD))
1215 new_draw_info(NDI_UNIQUE | NDI_ALL | NDI_DK_ORANGE, 5, NULL, buf);
1216} 1226}
1217 1227
1218int forbid_play(void) 1228int forbid_play(void)
1219{ 1229{
1220#if !defined(_IBMR2) && !defined(___IBMR2) && defined(PERM_FILE) 1230#if !defined(_IBMR2) && !defined(___IBMR2) && defined(PERM_FILE)
1333 doeric_server(); 1343 doeric_server();
1334 process_events(NULL); /* "do" something with objects with speed */ 1344 process_events(NULL); /* "do" something with objects with speed */
1335 cftimer_process_timers();/* Process the crossfire Timers */ 1345 cftimer_process_timers();/* Process the crossfire Timers */
1336 /* Lauwenmark : Here we handle the CLOCK global event */ 1346 /* Lauwenmark : Here we handle the CLOCK global event */
1337 execute_global_event(EVENT_CLOCK); 1347 execute_global_event(EVENT_CLOCK);
1348 flush_sockets();
1338 check_active_maps(); /* Removes unused maps after a certain timeout */ 1349 check_active_maps(); /* Removes unused maps after a certain timeout */
1339 do_specials(); /* Routines called from time to time. */ 1350 do_specials(); /* Routines called from time to time. */
1340 1351
1341 sleep_delta(); /* Slepp proper amount of time before next tick */ 1352 sleep_delta(); /* Slepp proper amount of time before next tick */
1342 } 1353 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines