diff --git a/source/src/client.cpp b/source/src/client.cpp index f0611643..ed3cb96d 100644 --- a/source/src/client.cpp +++ b/source/src/client.cpp @@ -352,6 +352,7 @@ void sendintro() ENetPacket *packet = enet_packet_create(NULL, MAXTRANS, 0); ucharbuf p(packet->data, packet->dataLength); putint(p, SV_CONNECT); + sendstring(player1->name, p); sendstring(clientpassword, p); clientpassword[0] = '\0'; putint(p, player1->nextprimweap->type); diff --git a/source/src/server.cpp b/source/src/server.cpp index 9b41a69d..6d738681 100644 --- a/source/src/server.cpp +++ b/source/src/server.cpp @@ -1876,8 +1876,19 @@ void welcomepacket(ucharbuf &p, int n) putint(p, freeteam(n)); putint(p, 0); } + bool restored = false; if(c && (m_demo || m_mp(smode))) { + if(c.type==ST_TCPIP) + { + savedscore *sc = findscore(*cl, false); + if(sc) + { + sc->restore(cl->state); + restored = true; + } + } + if(!canspawn(c, true)) { putint(p, SV_FORCEDEATH); @@ -1906,7 +1917,7 @@ void welcomepacket(ucharbuf &p, int n) loopv(clients) { client &c = *clients[i]; - if(c.type!=ST_TCPIP || c.clientnum==n) continue; + if(c.type!=ST_TCPIP || (c.clientnum==n && !restored)) continue; putint(p, c.clientnum); putint(p, c.state.state); putint(p, c.state.lifesequence); @@ -1961,6 +1972,11 @@ void process(ENetPacket *packet, int sender, int chan) // sender may be -1 else if(chan!=1 || getint(p)!=SV_CONNECT) disconnect_client(sender, DISC_TAGT); else { + getstring(text, p); + filtertext(text, text, false, MAXNAMELEN); + if(!text[0]) s_strcpy(text, "unarmed"); + s_strncpy(cl->name, text, MAXNAMELEN+1); + getstring(text, p); cl->state.nextprimary = getint(p); bool banned = isbanned(sender); @@ -2072,23 +2088,12 @@ void process(ENetPacket *packet, int sender, int chan) // sender may be -1 case SV_INITC2S: { QUEUE_MSG; - bool newclient = false; - if(!cl->name[0]) newclient = true; getstring(text, p); filtertext(text, text, false, MAXNAMELEN); if(!text[0]) s_strcpy(text, "unarmed"); QUEUE_STR(text); - if(!newclient && strcmp(cl->name, text)) logger->writeline(log::info,"[%s] %s changed his name to %s", cl->hostname, cl->name, text); + if(strcmp(cl->name, text)) logger->writeline(log::info,"[%s] %s changed his name to %s", cl->hostname, cl->name, text); s_strncpy(cl->name, text, MAXNAMELEN+1); - if(newclient && cl->type==ST_TCPIP) - { - savedscore *sc = findscore(*cl, false); - if(sc) - { - sc->restore(cl->state); - sendf(-1, 1, "ri2i8vvi", SV_RESUME, sender, cl->state.state, cl->state.lifesequence, cl->state.gunselect, sc->flagscore, sc->frags, sc->deaths, cl->state.health, cl->state.armour, NUMGUNS, cl->state.ammo, NUMGUNS, cl->state.mag, -1); - } - } getstring(text, p); filtertext(cl->team, text, false, MAXTEAMLEN); QUEUE_STR(text);