summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/lock.c16
-rw-r--r--src/common/mapindex.c2
-rw-r--r--src/map/clif.c22
-rw-r--r--src/map/map.c4
-rw-r--r--src/map/pc.c3
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);