我想知道如何为此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
下面的内容,当然,但这不起作用:
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
声明?
我希望有人可以帮助我。
答案 0 :(得分:4)
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" )
,这更加清晰。答案 1 :(得分:1)
试试这个:
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())) {//
...
}