bool ConjureSpell::loadFunction(const pugi::xml_attribute&)
{
scripted = false;
return true;
}
bool ConjureSpell::conjureItem(Creature* creature) const
{
Player* player = creature->getPlayer();
if (!player) {
return false;
}
const uint32_t conjureCost = getManaCost(player);
if (reagentId != 0) {
Item* item = player->getFirstItemById(reagentId);
if (player->getItemTypeCount(reagentId) <= 0 || !item) {
player->sendCancelMessage(RETURNVALUE_YOUNEEDAMAGICITEMTOCASTSPELL);
g_game.addMagicEffect(player->getPosition(), CONST_ME_POFF);
return false;
}
Item* newItem = Item::CreateItem(conjureId, conjureCount);
if (!newItem) {
return false;
}
Item* ret = g_game.transformItem(item, conjureId, conjureCount);
if (!ret) {
player->sendCancelMessage(RETURNVALUE_NOERROR);
g_game.addMagicEffect(player->getPosition(), CONST_ME_POFF);
delete newItem;
return false;
}
g_game.startDecay(newItem);
}
else {
Item* newItem = Item::CreateItem(conjureId, conjureCount);
if (!newItem) {
return false;
}
ReturnValue ret = g_game.internalPlayerAddItem(player, newItem);
if (ret != RETURNVALUE_NOERROR) {
player->sendCancelMessage(ret);
g_game.addMagicEffect(player->getPosition(), CONST_ME_POFF);
delete newItem;
return false;
}
g_game.startDecay(newItem);
}
postCastSpell(player);
g_game.addMagicEffect(player->getPosition(), CONST_ME_MAGIC_RED);
return true;
}