ZoriaRPG icon

Item Removal Script Engine Example for Alucard

ZoriaRPG | PRO | 03/03/19 12:18:15 PM UTC | 0 ⭐ | 675 👁️ | Never ⏰ | []
C++ |

1.9 KB

|

None

|

0 👍

/

0 👎

bool firstplay = true;
 
//Link active script
link script links
{
    int collected_items[256];
    int item_scripts[512];
    int data[2048];
    const int REMOVAL_SCRIPT = 0; //array index of data[]
    void run()
    {
        data[REMOVAL_SCRIPT] = Game->GetItemScript("ItemRemoval");
        while(1)
        {
            CheckInventory();
            Waitdraw();
            Waitframe();
        }
        
    }
    void CheckInventory()
    {
        for ( int q = 1; q < 512; ++q )
        {
            if ( collected_items[q] )
            {
                if ( !Link->Item[q] )
                {
                    itemdata id = Game->LoadItemData(q);
                    id->Script = data[REMOVAL_SCRIPT];
                    id->RunScript();
                    collected_items[q] = 0; //Fuly remove from inventory. 
                }
            }
        }
        
    }
}
 
item script ItemRemoval
{
    void run()
    {
        bool done = false;
        //effect here
        //can be made to run for more than one frame
        //with a while loop as of 2.55 Alpha 2 or 3 or 4. 
        while(!done) 
        {
            //when our oop ends
            done = true;
            Waitframe();
        }
        //when done, set back the original item script
        this->Script = links.item_scripts[this->ID];
        
    }
}
 
//Link Init Script
link script linkinit
{
    void run()
    {
        int collectscriptid = Game->GetItemScript("ItemCollect"); //cache here
        itemdata id;
        for ( int q = 1; q < 512; ++q )
        {
            id = Game->LoadItemData(q);
            id->PScript = collectscriptid; //auto-set the collect script for every item in the quest
        }
        if ( firstplay )
        {
            for ( int q = 1; q < 512; ++q )
            {
                id = Game->LoadItemData(q);
                links.item_scripts[q] = id->Script; //cache all original item scripts at the very start of the game 
            }
            firstplay = false;
        }
    }
}
 
//Generic collect script to put on a items. 
//Can be forced on all items with Link's init script at the start of every session 
//Marks if Link owns an item, for use when toggling Link->Item[] elsewhere. 
item script ItemCollect
{
    void run()
    {
        links.collected_items[this->ID] = 1;
    }
}

Comments