Opa amigo, fiz uns testes aqui e percebi que o problema estava na checagem também. Mas de resto está tudo certo.
void Player::removeAutoLoot(uint16_t id) {
if(!checkAutoLoot(id))
return;
for(std::list<uint16_t>::iterator it = AutoLoot.begin(); it != AutoLoot.end(); ++it) {
if((*it) == id) {
AutoLoot.erase(it);
break;
}
}
}
if(params[0] == "remove") {
std::stringstream remove, err;
uint8_t removeCount = 0, errCount = 0;
std::stringstream ss;
for(StringVec::iterator it = params.begin(); it != params.end(); ++it) {
if((*it) == "remove") {
continue;
}
char name[150];
sprintf(name, "%s", (*it).c_str());
int len = strlen(name);
for (int i = 0, pos = 0; i < len; i++, pos++) {
if (name[0] == ' '){
pos++;
}
name[i] = name[pos];
}
int32_t itemId = Item::items.getItemIdByName(name);
if(player->checkAutoLoot(itemId)) {
if(itemId > 0) {
std::string str = removeCount > 0 ? ", " : "";
++removeCount;
remove << str << name;
player->removeAutoLoot(itemId);
continue;
}
}
std::string str = errCount > 0 ? ", " : "";
++errCount;
err << str << name;
}
ss << "AutoLoot-> Removidos: " << ((remove.str() == "") ? "Nenhum" : remove.str()) << ". Erros: " << ((err.str() == "") ? "Nenhum" : err.str()) << ".";
player->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, ss.str());
return true;
}