From e3da5772216a1df38e2eaff47c17751f803a5fde Mon Sep 17 00:00:00 2001 From: Lee Salzman Date: Sun, 31 Aug 2008 17:45:15 +0000 Subject: [PATCH] send name with SV_CONNECT git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@2457 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/client.cpp | 1 + source/src/server.cpp | 31 ++++++++++++++++++------------- 2 files changed, 19 insertions(+), 13 deletions(-) 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);