Jump to content
  • 0

Question about dynamic shop


Question

Posted (edited)
-    shop    custom_seller2    -1,501:-1
prontera,155,148,3    script    Poring Seller   476,{
    mes "I will sell you items for " + getitemname(.CoinID) + ".";
    callshop "custom_seller2",1;
    npcshopattach "custom_seller2";
    end;
    OnBuyItem:
    mes ""+.Price[.@d]+"";
    mes ""+@bought_nameid[.@d]+"";
    for(set .@i,0; .@i<getarraysize(.customs); set .@i,.@i+1) {
        for(set .@d,0; .@d<getarraysize(@bought_nameid); set .@d,.@d+1) {
            if(@bought_nameid[.@d]==.customs[.@i]) {
                if(checkweight(@bought_nameid[.@d],@bought_quantity[.@d])) {
                    if(countitem(.CoinID) >= .Price[.@i]*@bought_quantity[.@d]) {
                        delitem .CoinID,.Price[.@i]*@bought_quantity[.@d];
                        getitem @bought_nameid[.@d],@bought_quantity[.@d];
                    } else dispbottom "You don't have enough "+getitemname(.CoinID)+" to purchase that item.";
                } else dispbottom "Purchasing these items will put you over the weight limit!";
            }
        }
    }
    deletearray @bought_quantity, getarraysize(@bought_quantity);
    deletearray @bought_nameid, getarraysize(@bought_nameid);
    close;

OnInit:
    setarray .customs[0],12028,607,678;// Enter the ID of customs here
    setarray .Price[0],10,3,5; // Price for each custom is set to 20 coins
    set .CoinID,7539; // Enter the ID of the coin here.
    npcshopitem "custom_seller2",0,0; // Don't touch any coding beyond here
    for(set .i,0; .customs[.i]; set .i,.i+1) npcshopadditem "custom_seller2",.customs[.i],.Price[.i];
    end;
}

 

My question is:

this line mes ""+@bought_nameid[.@d]+""; shows the correct name when a item is bought

this line    mes ""+.Price[.@d]+""; doesn't show the right price. its always Price[0]

why? isn't .@d supossed to be a npc variable after the bought?

 

 

Edited by Emistry
codebox

2 answers to this question

Recommended Posts

  • 0
Posted

.@d is the loop variable set by this :

Quote

 for(set .@d,0; .@d<getarraysize(@bought_nameid); set .@d,.@d+1) {

so anywhere above that it is zero. However if you bought only one item at a time, then @bought_nameid [0] does reference that item correctly. Otherwise it'll only show the first, as it's displayed outside the loop.

furthermore, the loop finds you which item in your Price array was bought - and that's in .@i. So the correct price is .Price[.@i]  and again, only inside the loop, below the

Quote

 if(@bought_nameid[.@d]==.customs[.@i]) {

Line which ensures the variable .@i has the correct number.

  • Upvote 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...