Jump to content

Item purge adjusted


Amsterdam

Recommended Posts

  • Premium

Hi, probably many like me have this frustration when they purge their inventory that their equipment items are also deleted, well I made a small change, it's not revolutionary, I don't know what, but maybe others are like me.
From now on you will have two commands, /ip and ip+, one deletes only what is in the inventory and one only what you have equipped, the same think happen with dragon_soul.

spacer.pngspacer.png

Tutorial : 

Go in the file : cmd_gm.cpp and search

Spoiler

ACMD(do_item_purge)

Replace all function with this : 

Spoiler

ACMD(do_item_purge)
{
    int i;
    LPITEM item;

    for (i = 0; i < INVENTORY_AND_EQUIP_SLOT_MAX; ++i)
    {
        if ((item = ch->GetInventoryItem(i)))
        {
            if (item->IsEquipped())
            {
                continue; 
            }

            ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
            ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, i, 255);
        }
    }

    for (i = 0; i < DRAGON_SOUL_INVENTORY_MAX_NUM; ++i)
    {
        if ((item = ch->GetItem(TItemPos(DRAGON_SOUL_INVENTORY, i))))
        {
            if (item->IsEquipped())
            {
                continue;
            }

            ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
        }
    }
}

ACMD(do_item_purge_plus)
{
    int i;
    LPITEM item;

    for (i = 0; i < INVENTORY_AND_EQUIP_SLOT_MAX; ++i)
    {
        if ((item = ch->GetInventoryItem(i)))
        {
            if (item->IsEquipped())
            {
                ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
                ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, i, 255);
            }
        }
    }

    for (i = 0; i < DRAGON_SOUL_INVENTORY_MAX_NUM; ++i)
    {
        if ((item = ch->GetItem(TItemPos(DRAGON_SOUL_INVENTORY, i))))
        {
            if (item->IsEquipped())
            {
                ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
            }
        }
    }
}

Here is also the new comand " /ip+ "

Now go to the fiile : cmd.cpp and search

Spoiler

ACMD(do_item_purge);

And paste under 

Spoiler

ACMD(do_item_purge_plus);

Now search this

Spoiler

    { "ipurge",        do_item_purge,        0,            POS_DEAD,    GM_HIGH_WIZARD    },

And paste under  

Spoiler

    { "ip+",        do_item_purge_plus,        0,            POS_DEAD,    GM_HIGH_WIZARD    },


 

Edited by Amsterdam
  • Metin2 Dev 2
  • Good 1
  • Love 1
Link to comment
Share on other sites

You could've done something like

ACMD(do_item_purge)
{
    char arg1[256];
    one_argument(argument, arg1, sizeof(arg1));
 
    int i;
    LPITEM item;
 
    if (*arg1 && !strcmp(arg1, "all"))
    {
        for (i = 0; i < INVENTORY_AND_EQUIP_SLOT_MAX; ++i)
        {
            if ((item = ch->GetInventoryItem(i)))
            {
                ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
                ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, i, 255);
            }
        }
        for (i = 0; i < DRAGON_SOUL_INVENTORY_MAX_NUM; ++i)
        {
            if ((item = ch->GetItem(TItemPos(DRAGON_SOUL_INVENTORY, i ))))
            {
                ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
            }
        }
    }
    else
    {
        for (i = 0; i < INVENTORY_AND_EQUIP_SLOT_MAX; ++i)
        {
            if ((item = ch->GetInventoryItem(i)))
            {
                if (item->IsEquipped())
                    continue; 
 
                ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
                ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, i, 255);
            }
        }
 
        for (i = 0; i < DRAGON_SOUL_INVENTORY_MAX_NUM; ++i)
        {
            if ((item = ch->GetItem(TItemPos(DRAGON_SOUL_INVENTORY, i))))
            {
                if (item->IsEquipped())
                    continue;
 
                ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
            }
        }
    }
}

 

  • Good 1
Link to comment
Share on other sites

this can be done with one command

/p all
/p inv
/p equip
/p dragon or ds
/p belt

Spoiler
ACMD(do_item_purge)
{
    char arg1[256];
    one_argument(argument, arg1, sizeof(arg1));
    if (!*arg1)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Usage: ipurge <window>");
        ch->ChatPacket(CHAT_TYPE_INFO, "List of the available windows:");
        ch->ChatPacket(CHAT_TYPE_INFO, " all");
        ch->ChatPacket(CHAT_TYPE_INFO, " inventory or inv");
        ch->ChatPacket(CHAT_TYPE_INFO, " equipment or equip");
        ch->ChatPacket(CHAT_TYPE_INFO, " dragonsoul or ds");
        ch->ChatPacket(CHAT_TYPE_INFO, " belt");
        return;
    }

    int         i;
    LPITEM      item;

    std::string strArg(arg1);
    if (!strArg.compare(0, 3, "all"))
    {
        for (i = 0; i < INVENTORY_AND_EQUIP_SLOT_MAX; ++i)
        {
            if ((item = ch->GetInventoryItem(i)))
            {
                ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
                ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, i, 255);
            }
        }
        for (i = 0; i < DRAGON_SOUL_INVENTORY_MAX_NUM; ++i)
        {
            if ((item = ch->GetItem(TItemPos(DRAGON_SOUL_INVENTORY, i ))))
            {
                ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
            }
        }
    }
    else if (!strArg.compare(0, 3, "inv"))
    {
        for (i = 0; i < INVENTORY_MAX_NUM; ++i)
        {
            if ((item = ch->GetInventoryItem(i)))
            {
                ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
                ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, i, 255);
            }
        }
    }
    else if (!strArg.compare(0, 5, "equip"))
    {
        for (i = 0; i < WEAR_MAX_NUM; ++i)
        {
            if ((item = ch->GetInventoryItem(INVENTORY_MAX_NUM + i)))
            {
                ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
                ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, INVENTORY_MAX_NUM + i, 255);
            }
        }
    }
    else if (!strArg.compare(0, 6, "dragon") || !strArg.compare(0, 2, "ds"))
    {
        for (i = 0; i < DRAGON_SOUL_INVENTORY_MAX_NUM; ++i)
        {
            if ((item = ch->GetItem(TItemPos(DRAGON_SOUL_INVENTORY, i ))))
            {
                ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
            }
        }
    }
    else if (!strArg.compare(0, 4, "belt"))
    {
        for (i = 0; i < BELT_INVENTORY_SLOT_COUNT; ++i)
        {
            if ((item = ch->GetInventoryItem(BELT_INVENTORY_SLOT_START + i)))
            {
                ITEM_MANAGER::instance().RemoveItem(item, "PURGE");
                ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, BELT_INVENTORY_SLOT_START + i, 255);
            }
        }
    }

 

 

  • Love 2
Link to comment
Share on other sites

Announcements



×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.