ReturnValue Spells::onPlayerSay(Player* player, const std::string& words)
{
std::string reWords = words;
trimString(reWords);
InstantSpell* instantSpell = getInstantSpell(reWords);
if(!instantSpell)
return RET_NOTPOSSIBLE;
size_t size = instantSpell->getWords().length();
std::string param = reWords.substr(size, reWords.length() - size), reParam = "";
if(instantSpell->getHasParam() && !param.empty() && param[0] == ' ')
{
size_t quote = param.find('"', 1);
if(quote != std::string::npos)
{
size_t tmp = param.find('"', quote + 1);
if(tmp == std::string::npos)
tmp = param.length();
reParam = param.substr(quote + 1, tmp - quote - 1);
}
else if(param.find(' ', 1) == std::string::npos)
reParam = param.substr(1, param.length());
trimString(reParam);
}
if(!instantSpell->playerCastInstant(player, reParam))
return RET_NEEDEXCHANGE;
std::string ret = instantSpell->getName();
if(param.length())
{
trimString(param);
size_t tmp = 0, rtmp = param.length();
if(param[0] == '"')
tmp = 1;
if(param[rtmp] == '"')
rtmp -= 1;
ret += ": " + param.substr(tmp, rtmp);
}
return RET_NOERROR;
}