我想知道如何在这个if
声明中添加一个额外的名字。我尝试了很多东西,但它们似乎没有用。这是我目前的代码:
string name = reinterpret_cast<const char*>(this->Playerptr + 32);//
if (this->beginWith("/maxstatsz") && this->GetAdmin() >= 8 && !name.compare("jack")) {//
this->forward = false; //
this->Buff(46, (30 * 60), 1000);//
this->Buff(47, (30 * 60), 1000);//
this->Buff(48, (30 * 60), 1000);
this->Buff(49, (30 * 60), 1000);
this->Buff(12, (30 * 60), 1000);
Server::CPlayer::Write((void*)this->Playerptr, 60, "ss", "Server", "#Enabled Buffs!");//
}
此命令现在仅适用于名为adminrights >= 8
的jack
玩家。我测试了它,它工作正常。
但现在我想添加另一个玩家名称,它也可以使用这个命令。
当然,我在Server::CPlayer
下添加了Buff
s,但这不起作用:
else if (this->beginWith("/maxstatsz") && this->GetAdmin() >= 8 && !name.compare("hero")) {//
等等
这也没有用
if (this->beginWith("/maxstatsz") && this->GetAdmin() >= 8 && !name.compare("jack") || this->beginWith("/maxstatsz") && this->GetAdmin() >= 8 && !name.compare("john")) {
我不知道我做错了什么。也许我需要使用OR
而不是else if
声明?
我希望有人可以帮助我。
if ( this->beginWith("/maxstatsz") &&
( this->GetAdmin() >= 8 ) &&
( !name.compare("jack") || !name.compare("hero") )
)
Mats基本上评论了什么。使用多个子条件时,可以自由地添加括号。
此外,您的代码还有许多风格缺陷。我不会进入它们,但会建议去codereview.SE获得一些关于如何编写更好的C ++的反馈。
只是一个吸引我眼球的快速列表:
this->
是不必要的。reinterpret_cast<>
,除非你被外部影响强迫使用它,总是代码味道。this->Buff
中“捅”,而是调用成员函数(resetBuffer()
,或blankPlayground()
,或addGold( 1000 )
或其他)。name
是std::string
,你可以比较( name == "jack" || name == "hero" )
,这更清楚。试试这个:
if (this->beginWith("/maxstatsz") &&
(this->GetAdmin() >= 8) &&
((name =="jack") || (name == "hero"))) {//
...
}
或者,更像是这样的东西:
std::vector<std::string> names;
names.push_back("jack");
names.push_back("hero");
...
if (this->beginWith("/maxstatsz") &&
(this->GetAdmin() >= 8) &&
(std::find(names.begin(), names.end(), name) != names.end())) {//
...
}