Moparscape - RSPS Community

RuneScape 2 Development => Server Help => Topic started by: imback4more on August 27, 2018, 11:20:02 PM

Title: ShopRestock
Post by: imback4more on August 27, 2018, 11:20:02 PM
So my ShopRestock works perfectly fine.
My problem is that, if you buy let's say all 10 of Air runes out of 10.
Then, the ShopRestock is going to have an endless loop of restocking the Air runes, even though the Air runes aren't restocking.
Mainly because the Air runes aren't in the shop anymore and it's just a blank space slot since I bought all 10.

Now, let's say I buy 9 out of 10 Air runes.
Because there is still 1 left, and the maximum it is suppose to have is 10.
Then, the ShopRestock is going to start restocking 1 Air rune every 5 seconds and stops once it has the maximum of 10.
Which is exactly how it's suppose to work.
How exactly do I tell the server to re-add the Air runes back to its slot in the shop that were all bought so it can start restocking them again?

Here's my shoprestock.java

Code: [Select]
public ShopRestockTask(Shop items) {
        super(5);
        this.shop = items;
        System.out.println("debug restock 1");
    }


    public final Shop shop;


    @Override
    protected void execute() {
        if(shop.fullyRestocked()) {
            System.out.println("debug restock 2");
            stop();
            return;
        }
        if(shop.getId() != Shop.GENERAL_STORE) {
            System.out.println("debug restock 3");
            for(int shopItemLength = 0; shopItemLength < shop.getOriginalStock().length; shopItemLength++) {
                //System.out.println("debug restock 4");
                int ogStockAmount = shop.getOriginalStock()[shopItemLength].getAmount();
                int currentStockAmount = shop.getItems()[shopItemLength].getAmount();
               
                if(ogStockAmount > currentStockAmount) {
                    shop.add(shop.getItems()[shopItemLength].getId(), 1);
                    System.out.println("debug restock 5");
                } else if(ogStockAmount < currentStockAmount) {
                    shop.delete(shop.getItems()[shopItemLength].getId(), 1);
                    System.out.println("debug restock 6");
                }
               
            }
        } else {
            for(Item it : shop.getValidItems()) {
                shop.delete(it.getId(), 1);
                System.out.println("debug restock 7");
            }
        }
        shop.publicRefresh();
        shop.refreshItems();
        if(shop.fullyRestocked()) {
            stop();
            System.out.println("debug restock 8");
        }
        System.out.println("debug restock 9");
    }


    @Override
    public void stop() {
        setEventRunning(false);
        shop.setRestockingItems(false);
        System.out.println("debug restock 10");
    }

Here's a video of what I'm talking about.

The shop perfectly restocks the items back to 10.
But, if I buy all 10 of them. The shop doesn't restock and it's stuck on an endless loop with debugs 3, 5, and 9.

[video]https://youtu.be/f66dF5d7U4E[/video]
Title: Re: ShopRestock
Post by: matzie on September 21, 2018, 03:05:24 PM
When you buy an item from the shop that is part of the shops default items, the itemID should not be nulled out, it should keep the itemID and just change the count to 0. The code probably sets itemID to -1, so when you add an item you are just restocking null's.