summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
authorshennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-01-14 08:12:52 +0000
committershennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-01-14 08:12:52 +0000
commit69b055ee5b2ce7ff629f8e2c395b7e069bb7fd9a (patch)
tree98b60d68dabe577a89415aa6afd5147854db3d2f /src/map
parentdcdb55d68af1d4835a4607d74783e0513699312c (diff)
downloadhercules-69b055ee5b2ce7ff629f8e2c395b7e069bb7fd9a.tar.gz
hercules-69b055ee5b2ce7ff629f8e2c395b7e069bb7fd9a.tar.bz2
hercules-69b055ee5b2ce7ff629f8e2c395b7e069bb7fd9a.tar.xz
hercules-69b055ee5b2ce7ff629f8e2c395b7e069bb7fd9a.zip
another cool multi-map-server ancient bugfix:
- added a 'changing_mapservers' state, so the map server receiving the player knows he doesn't have to do certain things, in this case not display motd and use the aurafix. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@15445 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map')
-rw-r--r--src/map/chrif.c9
-rw-r--r--src/map/pc.c29
-rw-r--r--src/map/pc.h2
3 files changed, 22 insertions, 18 deletions
diff --git a/src/map/chrif.c b/src/map/chrif.c
index 7ec4f5c90..014d5f5df 100644
--- a/src/map/chrif.c
+++ b/src/map/chrif.c
@@ -587,10 +587,11 @@ void chrif_authok(int fd)
struct mmo_charstatus* status;
int char_id;
struct auth_node *node;
+ bool changing_mapservers;
TBL_PC* sd;
//Check if both servers agree on the struct's size
- if( RFIFOW(fd,2) - 24 != sizeof(struct mmo_charstatus) )
+ if( RFIFOW(fd,2) - 25 != sizeof(struct mmo_charstatus) )
{
ShowError("chrif_authok: Data size mismatch! %d != %d\n", RFIFOW(fd,2) - 24, sizeof(struct mmo_charstatus));
return;
@@ -601,8 +602,8 @@ void chrif_authok(int fd)
login_id2 = RFIFOL(fd,12);
expiration_time = (time_t)(int32)RFIFOL(fd,16);
gmlevel = RFIFOL(fd,20);
- status = (struct mmo_charstatus*)RFIFOP(fd,24);
-
+ changing_mapservers = (RFIFOB(fd,24));
+ status = (struct mmo_charstatus*)RFIFOP(fd,25);
char_id = status->char_id;
//Check if we don't already have player data in our server
@@ -633,7 +634,7 @@ void chrif_authok(int fd)
node->char_id == char_id &&
node->login_id1 == login_id1 )
{ //Auth Ok
- if (pc_authok(sd, login_id2, expiration_time, gmlevel, status))
+ if (pc_authok(sd, login_id2, expiration_time, gmlevel, status, changing_mapservers))
return;
} else { //Auth Failed
pc_authfail(sd);
diff --git a/src/map/pc.c b/src/map/pc.c
index 7ca3e7c54..8701bbb13 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -884,7 +884,7 @@ int pc_isequip(struct map_session_data *sd,int n)
* session idに問題無し
* char鯖から送られてきたステ?タスを設定
*------------------------------------------*/
-bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_time, int gmlevel, struct mmo_charstatus *st)
+bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_time, int gmlevel, struct mmo_charstatus *st, bool changing_mapservers)
{
int i;
unsigned long tick = gettick();
@@ -1031,18 +1031,20 @@ bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_tim
// Send friends list
clif_friendslist_send(sd);
- if (battle_config.display_version == 1){
- char buf[256];
- sprintf(buf, "SVN version: %s", get_svn_revision());
- clif_displaymessage(sd->fd, buf);
- }
+ if( !changing_mapservers ) {
+ if (battle_config.display_version == 1){
+ char buf[256];
+ sprintf(buf, "SVN version: %s", get_svn_revision());
+ clif_displaymessage(sd->fd, buf);
+ }
- // Message of the Day [Valaris]
- for(i=0; motd_text[i][0] && i < MOTD_LINE_SIZE; i++) {
- if (battle_config.motd_type)
- clif_disp_onlyself(sd,motd_text[i],strlen(motd_text[i]));
- else
- clif_displaymessage(sd->fd, motd_text[i]);
+ // Message of the Day [Valaris]
+ for(i=0; motd_text[i][0] && i < MOTD_LINE_SIZE; i++) {
+ if (battle_config.motd_type)
+ clif_disp_onlyself(sd,motd_text[i],strlen(motd_text[i]));
+ else
+ clif_displaymessage(sd->fd, motd_text[i]);
+ }
}
// message of the limited time of the account
@@ -1067,7 +1069,8 @@ bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_tim
/**
* Fixes login-without-aura glitch (the screen won't blink at this point, don't worry :P)
**/
- clif_changemap(sd,sd->mapindex,sd->bl.x,sd->bl.y);
+ if( !changing_mapservers )
+ clif_changemap(sd,sd->mapindex,sd->bl.x,sd->bl.y);
// Request all registries (auth is considered completed whence they arrive)
intif_request_registry(sd,7);
diff --git a/src/map/pc.h b/src/map/pc.h
index 67a7ac198..affe3690b 100644
--- a/src/map/pc.h
+++ b/src/map/pc.h
@@ -615,7 +615,7 @@ int pc_setrestartvalue(struct map_session_data *sd,int type);
int pc_makesavestatus(struct map_session_data *);
void pc_respawn(struct map_session_data* sd, clr_type clrtype);
int pc_setnewpc(struct map_session_data*,int,int,int,unsigned int,int,int);
-bool pc_authok(struct map_session_data* sd, int, time_t, int gmlevel, struct mmo_charstatus* status);
+bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_time, int gmlevel, struct mmo_charstatus *st, bool changing_mapservers);
void pc_authfail(struct map_session_data *);
int pc_reg_received(struct map_session_data *sd);