• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Conjuring Runes on Backpack

THEKpta

New Member
Joined
May 15, 2012
Messages
4
Reaction score
0
Hello!

Estou tentando fazer com que seja possivel conjurar runas na backpack (atualmente só e possível realizar isso se você estiver com ela nas mãos).

I'm trying to do possible conjuring runes on backpack (actually its posible just using blank runes on hands). I'm using TFS 1.2!

Anyone can help me?

Here is the block of code with this issue:

spells.cpp
C++:
bool ConjureSpell::conjureItem(Creature* creature) const
{
    Player* player = creature->getPlayer();
    if (!player) {
        return false;
    }

    const uint32_t conjureCost = getManaCost(player);
    const uint32_t soulCost = getSoulCost();

    if (reagentId != 0) {
        bool foundReagent = false;

        Item* item = player->getInventoryItem(CONST_SLOT_LEFT);
        if (item && item->getID() == reagentId) {
            foundReagent = true;

            // left arm conjure
            int32_t index = player->getThingIndex(item);
            g_game.internalRemoveItem(item);

            Item* newItem = Item::CreateItem(conjureId, conjureCount);
            if (!newItem) {
                return false;
            }

            ReturnValue ret = g_game.internalAddItem(player, newItem, index);
            if (ret != RETURNVALUE_NOERROR) {
                delete newItem;
                return false;
            }

            g_game.startDecay(newItem);

            Spell::postCastSpell(player, conjureCost, soulCost);
        }

        item = player->getInventoryItem(CONST_SLOT_RIGHT);
        if (item && item->getID() == reagentId && player->getMana() >= conjureCost) {
            foundReagent = true;

            // right arm conjure
            int32_t index = player->getThingIndex(item);
            g_game.internalRemoveItem(item);

            Item* newItem = Item::CreateItem(conjureId, conjureCount);
            if (!newItem) {
                return false;
            }

            ReturnValue ret = g_game.internalAddItem(player, newItem, index);
            if (ret != RETURNVALUE_NOERROR) {
                delete newItem;
                return false;
            }

            g_game.startDecay(newItem);

            Spell::postCastSpell(player, conjureCost, soulCost);
        }

        if (!foundReagent) {
            player->sendCancelMessage(RETURNVALUE_YOUNEEDAMAGICITEMTOCASTSPELL);
            g_game.addMagicEffect(player->getPosition(), CONST_ME_POFF);
            return false;
        }
    } else {
        Item* newItem = Item::CreateItem(conjureId, conjureCount);
        if (!newItem) {
            return false;
        }

        ReturnValue ret = g_game.internalPlayerAddItem(player, newItem);
        if (ret != RETURNVALUE_NOERROR) {
            delete newItem;
            return false;
        }

        g_game.startDecay(newItem);
        Spell::postCastSpell(player, conjureCost, soulCost);
    }

    postCastSpell(player, true, false);
    g_game.addMagicEffect(player->getPosition(), CONST_ME_MAGIC_RED);
    return true;
}
 
Not sure if this will work but you can try it...

replace
Code:
Item* item = player->getInventoryItem(CONST_SLOT_LEFT);
        if (item && item->getID() == reagentId) {
            foundReagent = true;

            // left arm conjure
            int32_t index = player->getThingIndex(item);
            g_game.internalRemoveItem(item);

            Item* newItem = Item::CreateItem(conjureId, conjureCount);
            if (!newItem) {
                return false;
            }

            ReturnValue ret = g_game.internalAddItem(player, newItem, 1);
            if (ret != RETURNVALUE_NOERROR) {
                delete newItem;
                return false;
            }

            g_game.startDecay(newItem);

            Spell::postCastSpell(player, conjureCost, soulCost);
        }

        item = player->getInventoryItem(CONST_SLOT_RIGHT);
        if (item && item->getID() == reagentId && player->getMana() >= conjureCost) {
            foundReagent = true;

            // right arm conjure
            int32_t index = player->getThingIndex(item);
            g_game.internalRemoveItem(item);

            Item* newItem = Item::CreateItem(conjureId, conjureCount);
            if (!newItem) {
                return false;
            }

            ReturnValue ret = g_game.internalAddItem(player, newItem, index);
            if (ret != RETURNVALUE_NOERROR) {
                delete newItem;
                return false;
            }

            g_game.startDecay(newItem);

            Spell::postCastSpell(player, conjureCost, soulCost);
        }

with
Code:
int32_t itemCount = player->getItemTypeCount(2260);
        if (itemCount && itemCount >= 1 && player->getMana() >= conjureCost) {
            foundReagent = true;
          
            if (player->removeItemOfType(2260, 1)) {
                Item* newItem = Item::CreateItem(conjureId, conjureCount);
              
                if (!newItem) {
                    return false;
                }
              
                ReturnValue ret = g_game.internalAddItem(player, newItem);
                if (ret != RETURNVALUE_NOERROR) {
                    delete newItem;
                    return false;
                }
              
                g_game.startDecay(newItem);

                Spell::postCastSpell(player, conjureCost, soulCost);
            }
        }
 
Back
Top