diff options
-rw-r--r-- | src/common/lock.c | 16 | ||||
-rw-r--r-- | src/common/mapindex.c | 2 | ||||
-rw-r--r-- | src/map/clif.c | 22 | ||||
-rw-r--r-- | src/map/map.c | 4 | ||||
-rw-r--r-- | src/map/pc.c | 3 |
5 files changed, 24 insertions, 23 deletions
diff --git a/src/common/lock.c b/src/common/lock.c index e4ec36302..5cb4c3a67 100644 --- a/src/common/lock.c +++ b/src/common/lock.c @@ -11,21 +11,12 @@ #ifndef WIN32 #include <unistd.h> #else -#include <windows.h> +#include <io.h> #define F_OK 0x0 #define R_OK 0x4 #endif -#ifndef WIN32 - #define exists(filename) (!access(filename, F_OK)) -#else -// could be speed up maybe? -int exists(char *file) { - FILE *fp; - if ((fp = fopen(file,"r")) && fclose(fp) == 0) return 1; - return 0; -} -#endif +#define exists(filename) (!access(filename, F_OK)) // 書き込みファイルの保護処理 // (書き込みが終わるまで、旧ファイルを保管しておく) @@ -33,13 +24,12 @@ int exists(char *file) { // 新しいファイルの書き込み開始 FILE* lock_fopen (const char* filename, int *info) { char newfile[512]; - FILE *fp; int no = 0; // 安全なファイル名を得る(手抜き) do { sprintf(newfile, "%s_%04d.tmp", filename, ++no); - } while((fp = fopen(newfile,"r")) && (fclose(fp), no < 9999)); + } while(exists(newfile) && no < 9999); *info = no; return fopen(newfile,"w"); } diff --git a/src/common/mapindex.c b/src/common/mapindex.c index ca2ff4751..a1c86af97 100644 --- a/src/common/mapindex.c +++ b/src/common/mapindex.c @@ -47,7 +47,7 @@ const char* mapindex_getmapname(const char* string, char* output) /// Result gets placed either into 'buf' or in a static local buffer. const char* mapindex_getmapname_ext(const char* string, char* output) { - char buf[MAP_NAME_LENGTH_EXT]; + static char buf[MAP_NAME_LENGTH_EXT]; char* dest = (output != NULL) ? output : buf; size_t len; diff --git a/src/map/clif.c b/src/map/clif.c index ed9f12c72..2eb614780 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -13416,15 +13416,21 @@ int clif_parse(int fd) if ((int)RFIFOREST(fd) < packet_len) return 0; // not enough data received to form the packet - if (packet_db[packet_ver][cmd].func) { - if (sd && sd->bl.prev == NULL && packet_db[packet_ver][cmd].func != clif_parse_LoadEndAck) - ; //Only valid packet when player is not on a map is the finish-loading packet. + if( packet_db[packet_ver][cmd].func == clif_parse_debug ) + packet_db[packet_ver][cmd].func(fd, sd); + else + if( packet_db[packet_ver][cmd].func != NULL ) + { + if( !sd && packet_db[packet_ver][cmd].func != clif_parse_WantToConnection ) + ; //Only valid packet when there is no session + else + if( sd && sd->bl.prev == NULL && packet_db[packet_ver][cmd].func != clif_parse_LoadEndAck ) + ; //Only valid packet when player is not on a map + else + if( sd && session[sd->fd]->flag.eof ) + ; //No more packets accepted else - if ((sd && sd->state.active) - || packet_db[packet_ver][cmd].func == clif_parse_WantToConnection - || packet_db[packet_ver][cmd].func == clif_parse_debug - ) //Only execute the function when there's an active sd (except for debug/wanttoconnect packets) - packet_db[packet_ver][cmd].func(fd, sd); + packet_db[packet_ver][cmd].func(fd, sd); } #if DUMP_UNKNOWN_PACKET else if (battle_config.error_log) diff --git a/src/map/map.c b/src/map/map.c index 8a845c4be..7488a5a15 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -1600,6 +1600,10 @@ int map_quit(struct map_session_data *sd) status_change_end(&sd->bl,SC_GUILDAURA,-1); if(sd->sc.data[SC_ENDURE] && sd->sc.data[SC_ENDURE]->val4) status_change_end(&sd->bl,SC_ENDURE,-1); //No need to save infinite endure. + if(sd->sc.data[SC_WEIGHT50]) + status_change_end(&sd->bl,SC_WEIGHT50,-1); + if(sd->sc.data[SC_WEIGHT90]) + status_change_end(&sd->bl,SC_WEIGHT90,-1); if (battle_config.debuff_on_logout&1) { if(sd->sc.data[SC_ORCISH]) status_change_end(&sd->bl,SC_ORCISH,-1); diff --git a/src/map/pc.c b/src/map/pc.c index 72663a5b0..5d94a1942 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1086,7 +1086,7 @@ int pc_reg_received(struct map_session_data *sd) intif_request_questlog(sd); #endif - if (!sd->state.connect_new && sd->fd) + if (sd->state.connect_new == 0 && sd->fd) { //Character already loaded map! Gotta trigger LoadEndAck manually. sd->state.connect_new = 1; clif_parse_LoadEndAck(sd->fd, sd); @@ -7467,6 +7467,7 @@ int pc_autosave(int tid, unsigned int tick, int id, intptr data) save_flag = 2; chrif_save(sd,0); + break; } mapit_free(iter); |