+ if (((!ServerInstance->IsNick(parameters[0].c_str(), ServerInstance->Config->Limits.NickMax))) && (IS_LOCAL(user)))
+ {
+ if (!allowinvalid)
+ {
+ if (parameters[0] == "0")
+ {
+ // Special case, Fake a /nick UIDHERE. Useful for evading "ERR: NICK IN USE" on connect etc.
+ std::vector<std::string> p2;
+ std::deque<classbase*> dummy;
+ p2.push_back(user->uuid);
+ this->HandleInternal(1, dummy);
+ this->Handle(p2, user);
+ this->HandleInternal(0, dummy);
+ return CMD_SUCCESS;
+ }
+
+ user->WriteNumeric(432, "%s %s :Erroneous Nickname", user->nick.c_str(),parameters[0].c_str());
+ return CMD_FAILURE;
+ }
+ }
+
+ if (assign(user->nick) == parameters[0])