From d86b4013223c3a12b2cc3638e91199b72f7267e0 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Sat, 18 Oct 2014 13:46:02 -0400 Subject: [PATCH] Removed getPlayerOrAdd() call from PARSE_PLAYER_DATA macro; gerPlayerOrAdd() is now a lambda within Server::processLine(); added steamid parameter to getPlayerOrAdd(); UUID is now assigned within getPlayerOrAdd(), prior to the OnPlayerCreate event. --- Release/Plugins/RenX.Core.lib | Bin 56672 -> 56672 bytes RenX.Core/RenX_Server.cpp | 108 ++++++++++++++++------------------ 2 files changed, 50 insertions(+), 58 deletions(-) diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index b0d6aadf4fd1c90330f78a385b5476e71a907ff9..681f6d6434068e9a7c261f315624b2981258f0d7 100644 GIT binary patch delta 3570 zcmZ8jYfzMB6b7Zq3!@~+Zc2iMw;koCsF2D^gHE9$shOHBL}}#(OlQ(G)C^s@vo9ba z;Eh2=z(u?w0+uO~5_k>7T4(G>&1Cz-n#OUM&N<(EzJ1;Ox92;T=RD_m&-*$W`#T!@ z=fCz+-yJ_6}z1OIt%=589oDRt6~=q_4M!CO9wD{eWRzL>r_D?u>=IyBD8ep@mA(@e(m+3~v3UyRD}qdvw! zm6xH9WRnq!1WOM`yFnD?P*`=&CrX%X%AD(J>P5tZ5OJ#^Kv;6!5le6(c`k5-0}&s~ zi&LrqI5dvRXQR1Rqb>x{4#5gRLxV(fzD}FXAo7GZm`HFL3JuNo9uFSsP<9lVFl$M{ zBE1wD0&Fe{$x!Ap*fbBZltZ*iq%y4JC&CN;M2m=4zW?1p#F+{crEy0gWvMBgt9y|l zxQNqAXf;JHX#PTS9aik(+F#@r6E&5^F`TQwU-W54zkRc%G3hWB*u8IyZZL}V6~nOq zu#&CPXfGkJ-jWTv!6>r3$SeIjHYOc53hz=f29@rVo<3zp(Of!=B(w&27!8c?9Q&aN zsZbg3JV^y|_kXR2kzqzzj$Y9qelH`wo|TpBUPe)Ri7K|0@0CV`0Uc1q51`^$sF*u1 z0V=Wz(4*omg@qj0u7tH8AmgtGxN%8O=0Tl+mZrm}1B8J2lFgQ+W z$6yg;4#UrZ>*ExN@R{hr&*4z`QNkSMD;AYZWLCK`G4&`nfL=F_5;VtACK0>ZdW@!& ze@q=+)NwK{IG!g7krN+M&0XbJ6GKhay0Wzsgi17@SR%u4->kSmxvrjAsTgBw$hf%1 zB8^U)*5fqjaR&6*@vceqT~bx+gV^6d$v4;OixIH>R!7FC zb<1S9%$I(W^T{5cpX46xB}P$fC(f$vsWMD@y;IL#*dw$cns}NK0!bKEeVX@+1QT(F!64*WJ=&Phe95_? z{f%d-ed}2cl}p0s9Pb0{qx_sEaWnLh08?1^-emFQ93Mnfaz(dxnihb^LX_&|$!5{f z!Y+~wMCmxsvsF}(c7X>aDe1ewlwkI?jkE>7XesN_3;k@KOzBbu~5 z@)3Yr3h*6oE>ZRfp7h5}+Uab{kh#z(cT(LY-bu)!+?Ss=Ge4*-dF2jj(Uk@G(pm`g z?v^zQXm#tXM4mQmnF&0pf|k>4Zsn0U3uwG^F7v(RXx9$K4Cp5b`bi!b3Wq}HTG<-O zSR&@DI7M?#n7X{O{{22tLc`8F?-2)^e_-uNF$P>=gEETND?AE$Uf%za)#xsm)qwEO zu*nMJ2tf*O)m67HpIqfGk=SL|NS^DjF;K~c^P0)!)pwmk5&38Bi0s^w>NdB}!ml+vK+zr7u*aLZbeut)SzmY1#Bu@)(GEa({ zI&QL>NWU+w$s)I% zvD1wQx<^7GZYvBce8B7CW~bayuxzOAB>1=ulRkVUP{eof22+|i*u_m?{}XR%56-y| zmkvn-EzxebqN1jrTdXFjPQrt&?toCAkTK%mZSEAqxe_4P zF31%yE7lDLE(mx=ke3C#z9p|f(Q{W!bR{4nT$VrL>z delta 3570 zcmZ8jYfzMB6b7Zq3!@~+ZbE{Ew;kmwlBBZYpi`(wYNlojQCfKc)0s34HA7eK>M>ZeSOcl~R~iC@Zpokjk(ET4e^hWLd;Jv}@Ih{Rn1qRJZ3kd)Qt zDMP?#cw}^Bu=YzCG{>`_2L@aeTdhH2#jZbGe&TbhPrm>|!xrm!SF}Nl&-ERQ5#v4Z z=OvN{`wC0iK;g_DA}rPZN_=d#AH<9K*)w&c$s0q%A+Vo^mxriNdsU>*#@IJ>7lR1P z@g+ACxb@fE0!2EcH}4s)xaD>FV*2KsB*h5m&^SH!ZN>OcGa1k4ChA6iF*47O`WOvW zUWPtWO-3jZB0U`K22qknVKsT5C}FZGbH1yo7ZDFa#I1%vVaaz#EWw2qxWEw(M0~U$ zL8$`Z&^WS?jph>?b)kTE2v!Il8Z4R%b=qtOQ6RLzM1#vvXlSnYIPg%1vaQ5~S<8wR z=%vUIXme3Wh6;*&OMuSgHf!l8ixIc zmu;3tdl`B4maWqbMv>b^UYXyqG3B69c$bqgxO}_x^rI;1Ia9VD6vC})iQ*o_xN`uGs#`tJ~P-1mlaFu%=yl@=L312o60xhzM`=oh zN7d0yIY!2L#|k7Na^gd3xU0e%VyLM`SGIP7P>JT_i)0w?n`IX$*VW_86=Pg285h=C zq|s^9dW?Y{r$Ub%@0vv4WmR;rD=_)$6LXb3GWnk;IJvXPAoey;@{M)+Vgziz)sgXO z-4Yot^JSjoe6q*qC%H#^nNgJ5iL)Aex(t(E@6@vw_6Y6J>WBmM2_m^ZT(qwD5^1?C zGRc6FbH{ik2dBrUvh3} zfBji%-+Goq<&y9@$NK>Ls63}h+zfpr!4%fK7bTvY(B)k5auHWfmPR z>>|lPl#cT}TSWyK7kE&TlD-Q}31(m2NL%om#+3|RD~b6=TwEiKO1|?KIUfo_?pVWb2a42-Hm93GA zCE~tHP&DU+smm+t-|v$pH0-SN9&xbo2iBexW8f7wD5Ge-!lRJq<^3O7jqZY32?!4i zi&7Xz2vT?}uDW&k~-4J2ZX!jdU3%d76Kdc~aEW zag)_V8rB{Z869aX9BpKDT}8soH_`!%2@xAA^`QgwqH66WIRjiaX)eLS{&S3yMQ%G| zryCD+kAy+oW*An)fY-&%PPwCC*-+hy@No+!efUa{NbKSbrZlm?i<`jyC*0B=oUt-GiGF%CCKP`sLxx(`SJZ*j76sxXqZsbNjBcJuS-VjD%dqBJ5@Pi#JE)dV_WB diff --git a/RenX.Core/RenX_Server.cpp b/RenX.Core/RenX_Server.cpp index cfd9d9b..d5dc1d0 100644 --- a/RenX.Core/RenX_Server.cpp +++ b/RenX.Core/RenX_Server.cpp @@ -495,31 +495,16 @@ void RenX::Server::sendLogChan(const char *fmt, ...) const team = RenX::getTeam(playerData[0]); \ } \ if (idToken[0] == 'b') { idToken.shiftRight(1); isBot = true; } \ - id = idToken.asInt(10); } \ - RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot); - -inline RenX::PlayerInfo *getPlayerOrAdd(RenX::Server *server, const Jupiter::ReadableString &name, int id, RenX::TeamType team, bool isBot) -{ - RenX::PlayerInfo *r = server->getPlayer(id); - if (r == nullptr) - { - r = new RenX::PlayerInfo(); - r->id = id; - r->name = name; - r->isBot = isBot; - r->joinTime = time(nullptr); - if (id != 0) server->players.add(r); - Jupiter::ArrayList &xPlugins = *RenX::getCore()->getPlugins(); - for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnPlayerCreate(server, r); - } - else if (r->name.size() == 0) r->name = name; - r->team = team; - return r; -} + id = idToken.asInt(10); } void RenX::Server::processLine(const Jupiter::ReadableString &line) { + Jupiter::ReferenceString buff = line; + Jupiter::ArrayList &xPlugins = *RenX::getCore()->getPlugins(); + Jupiter::ReferenceString header = buff.getWord(0, RenX::DelimS); + Jupiter::ReferenceString playerData = buff.getWord(1, RenX::DelimS); + Jupiter::ReferenceString action = buff.getWord(2, RenX::DelimS); + /** Local functions */ auto onPreGameOver = [&](RenX::Server *server, RenX::WinType winType, RenX::TeamType team, int gScore, int nScore) { @@ -594,12 +579,37 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) this->silenceJoins = false; } }; + auto getPlayerOrAdd = [&](RenX::Server *server, const Jupiter::ReadableString &name, int id, RenX::TeamType team, bool isBot, uint64_t steamid) + { + RenX::PlayerInfo *r = server->getPlayer(id); + if (r == nullptr) + { + r = new RenX::PlayerInfo(); + r->id = id; + r->name = name; + r->isBot = isBot; + r->joinTime = time(nullptr); + if (id != 0) + server->players.add(r); + switch (this->uuidMode) + { + default: + case 0: + if (r->steamid != 0) + r->uuid = this->formatSteamID(r); + break; + case 1: + r->uuid = r->name; + break; + } + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnPlayerCreate(server, r); + } + else if (r->name.size() == 0) r->name = name; + r->team = team; + return r; + }; - Jupiter::ReferenceString buff = line; - Jupiter::ArrayList &xPlugins = *RenX::getCore()->getPlugins(); - Jupiter::ReferenceString header = buff.getWord(0, RenX::DelimS); - Jupiter::ReferenceString playerData = buff.getWord(1, RenX::DelimS); - Jupiter::ReferenceString action = buff.getWord(2, RenX::DelimS); if (buff.size() != 0) { switch (header[0]) @@ -610,6 +620,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) if (action.equals("deployed")) { PARSE_PLAYER_DATA(); + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0); Jupiter::ReferenceString objectType = buff.getWord(3, RenX::DelimS); if (objectType.match("*Beacon")) player->beaconPlacements++; for (size_t i = 0; i < xPlugins.size(); i++) @@ -619,6 +630,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) else if (action.equals("suicided by")) { PARSE_PLAYER_DATA(); + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0); player->deaths++; player->suicides++; Jupiter::ReferenceString damageType = buff.getWord(3, RenX::DelimS); @@ -630,6 +642,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) else if (action.equals("killed")) { PARSE_PLAYER_DATA(); + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0); Jupiter::ReferenceString victimData = buff.getWord(3, RenX::DelimS); Jupiter::ReferenceString vname = victimData.getWord(2, ","); Jupiter::ReferenceString vidToken = victimData.getWord(1, ","); @@ -643,7 +656,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) vid = vidToken.asInt(10); TeamType vteam = RenX::getTeam(victimData.getWord(0, ",")[0]); Jupiter::ReferenceString damageType = buff.getWord(5, RenX::DelimS); - RenX::PlayerInfo *victim = getPlayerOrAdd(this, vname, vid, vteam, visBot); + RenX::PlayerInfo *victim = getPlayerOrAdd(this, vname, vid, vteam, visBot, 0); player->kills++; if (damageType.equals("Rx_DmgType_Headshot")) player->headshots++; victim->deaths++; @@ -664,6 +677,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) else if (action.match("died by")) { PARSE_PLAYER_DATA(); + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0); player->deaths++; Jupiter::ReferenceString damageType = buff.getWord(3, RenX::DelimS); for (size_t i = 0; i < xPlugins.size(); i++) @@ -674,6 +688,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) else if (action.match("destroyed*")) { PARSE_PLAYER_DATA(); + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0); Jupiter::ReferenceString victim = buff.getWord(3, RenX::DelimS); Jupiter::ReferenceString damageType = buff.getWord(5, RenX::DelimS); ObjectType type; @@ -753,6 +768,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) if (action.equals("teamsay:")) { PARSE_PLAYER_DATA(); + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0); Jupiter::ReferenceString message = buff.getWord(3, RenX::DelimS); onChat(this, player, message, false); for (size_t i = 0; i < xPlugins.size(); i++) @@ -761,6 +777,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) else if (action.equals("say:")) { PARSE_PLAYER_DATA(); + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0); Jupiter::ReferenceString message = buff.getWord(3, RenX::DelimS); onChat(this, player, message, true); for (size_t i = 0; i < xPlugins.size(); i++) @@ -773,6 +790,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) PARSE_PLAYER_DATA(); if (action.equals("disconnected")) { + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0); if (this->silenceParts == false) for (size_t i = 0; i < xPlugins.size(); i++) xPlugins.get(i)->RenX_OnPart(this, player); @@ -781,21 +799,8 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } else if (action.equals("entered from")) { + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, buff.getWord(4, RenX::DelimS).equals("steamid") ? buff.getWord(5, RenX::DelimS).asUnsignedLongLong() : 0); player->ip = buff.getWord(3, RenX::DelimS); - if (buff.getWord(4, RenX::DelimS).equals("steamid")) - player->steamid = buff.getWord(5, RenX::DelimS).asUnsignedLongLong(); - - switch (RenX::Server::uuidMode) - { - default: - case 0: - if (player->steamid != 0) - player->uuid = this->formatSteamID(player); - break; - case 1: - player->uuid = player->name; - break; - } if (this->silenceJoins == false) for (size_t i = 0; i < xPlugins.size(); i++) @@ -803,6 +808,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } else if (action.equals("changed name to:")) { + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0); Jupiter::ReferenceString newName = buff.getWord(3, RenX::DelimS); for (size_t i = 0; i < xPlugins.size(); i++) xPlugins.get(i)->RenX_OnNameChange(this, player, newName); @@ -828,6 +834,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) else if (header.equals("lADMIN:")) { PARSE_PLAYER_DATA(); + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0); if (action.equals("logged in as")) { player->adminType = buff.getWord(3, RenX::DelimS); @@ -884,24 +891,9 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) name = playerData.gotoWord(4, WHITESPACE); } - RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot); + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, steamid.asUnsignedLongLong()); if (player->ip.size() == 0) - { player->ip = ip; - player->steamid = steamid.asUnsignedLongLong(); - - switch (RenX::Server::uuidMode) - { - default: - case 0: - if (player->steamid != 0) - player->uuid = this->formatSteamID(player); - break; - case 1: - player->uuid = player->name; - break; - } - } } else {