Jump to content
  • 0

[Solve] vending machine/merchant npc script?


manabeast

Question


  • Group:  Members
  • Topic Count:  138
  • Topics Per Day:  0.03
  • Content Count:  835
  • Reputation:   25
  • Joined:  11/22/11
  • Last Seen:  

i need a npc that sell item @@" any script can be use?

edit:

i use found how to add already

http://eathena.ws/wiki/index.php/General_Shop_creation

The limit for items per shop is 100. You can add more, it will just stop at 100

The prices are a bit odd: -1 means 'read from item_db' and any other amount is an absolute price.

If you use absolute prices you open yourself to money exploits, it's best to just make sure all your

item_db (SQL or TXT) items are priced!

Edited by manabeast
Link to comment
Share on other sites

4 answers to this question

Recommended Posts


  • Group:  Members
  • Topic Count:  69
  • Topics Per Day:  0.02
  • Content Count:  592
  • Reputation:   31
  • Joined:  11/14/11
  • Last Seen:  

You can use the Dynamic Shop NPC Made by Lunar

//Made by Lunar
//Version 1.6
//6.1.09
- shop quest_shop -1,501:50
prontera,147,173,5, script Dynamic Shop NPC 899,{
set @i,0;
mes "[shop Quest NPC]";
mes "Which item do you wish to obtain?";
mes "Select only one.";
callshop "quest_shop",1;
npcshopattach "quest_shop";
end;
OnBuyItem:
if(.BuildQuest) {
 for(set .e,0; !compare(getarg(.e+1),"Zeny"); set .e,.e+2) {}
 npcshopadditem "quest_shop",getarg(.e+2),getarg(.e)*compare(getarg(.e+1),"SZeny");
 setarray .Shop[.i],getarg(.e+2);
 set .i,.i+1;
 goto Quest_Setup;
}
if(.Shop[@i]!=@bought_nameid) for(set @i,1; 1; set @i,@i+1) if(.Shop[@i]==@bought_nameid) { set .i,@i; callsub Quest_Setup; }
for(set @i,1; !@e; set @i,@i+1) if(.Shop[@i]==@bought_nameid) { set @e,1; set .i,@i; callsub Quest_Setup; }
mes "[shop Quest NPC]";
mes "I require the following:";
for(set @i,0; !compare(getarg(@i+1),"Zeny"); set @i,@i+2) mes "^FF0000" + ((countitem(getarg(@i))>=getarg(@i+1))? "^00FF00":"") + "" + getarg(@i+1) + " " + getitemname(getarg(@i)) + " [" + countitem(getarg(@i)) + "/" + getarg(@i+1) + "]";
if(getarg(@i)) mes "^FF0000" + ((Zeny>=getarg(@i))? "^00FF00":"") + "" + getarg(@i) + " Zeny";
mes "^000000In exchange, I will give you:^0000FF";
for(set @i,@i+2; getarg(@i+1,0); set @i,@i+2) mes getarg(@i+1) + " " + getitemname(getarg(@i));
switch(select("Exchange:" + (((((getiteminfo(@bought_nameid,5) & 1) || (getiteminfo(@bought_nameid,5) & 256) || (getiteminfo(@bought_nameid,5) & 512)) && @equip==0))? "Preview Item":"") + ":No thanks")) {
 case 1:
  for(set @i,0; !compare(getarg(@i+1),"Zeny"); set @i,@i+2) if(countitem(getarg(@i)) < getarg(@i+1)) {
next;
mes "You have " + countitem(getarg(@i)) + " " + getitemname(getarg(@i)) + ", while I require " + getarg(@i+1) + ".";
mes "Please obtain ^FF0000" + (getarg(@i+1)-countitem(getarg(@i))) + " more " + getitemname(getarg(@i)) + "^000000.";
close;
  }
  if(Zeny < getarg(@i)) {
next;
mes "You do not have enough Zeny.";
mes "Please obtain ^FF0000" + (getarg(@i)-Zeny) + " more Zeny^000000.";
close;
  }
  for(set @i,0; !compare(getarg(@i+1),"Zeny"); set @i,@i+2) delitem getarg(@i),getarg(@i+1);
  set Zeny,Zeny-getarg(@i);
  for(set @i,@i+2; getarg(@i+1,0); set @i,@i+2) getitem getarg(@i),getarg(@i+1);
  if (compare(getarg(@i,0),"announce")) announce strcharinfo(0) + " has just obtained " + getitemname(@bought_nameid) + "!",bc_all;
  close;
 case 2:
  set @bottomview, getlook(3);
  set @topview, getlook(4);
  set @midview, getlook(5);
  addtimer 1000, strnpcinfo(3)+"::On_Leave";
  set @equip,getiteminfo(@bought_nameid, 5);
  set @view, getiteminfo(@bought_nameid, 11);
  if(@equip != -1 && @view > 0) {
if(@equip & 1) atcommand "@changelook 3 " + @view;
if(@equip & 256) atcommand "@changelook 1 " + @view;
if(@equip & 512) atcommand "@changelook 2 " + @view;
  }
  next;
  goto OnBuyItem;
 case 3:
  close;
}
On_Leave:
atcommand "@changelook 1 " + @topview;
atcommand "@changelook 2 " + @midview;
atcommand "@changelook 3 " + @bottomview;
set @equip,0;
set @view,0;
set @topview,0;
set @midview,0;
set @bottomview,0;
end;
OnInit:
npcshopitem "quest_shop",0,0;
set .BuildQuest,1;
set .i,1;
Quest_Setup:
switch(.i) {
 default: set .BuildQuest,0; set .e,0; set .i,0; end;
 case 1: callsub OnBuyItem,50,"SZeny",501,1,"announce";
 case 2: callsub OnBuyItem,502,1,0,"SZeny",502,1;
 case 3: callsub OnBuyItem,502,1,1000,"Zeny",504,1,501,1;
 case 4: callsub OnBuyItem,923,20,1000,"SZeny",2284,1,501,1,"announce";
}
}

Walking through a setup:

Requirements:

4 Pencil Cases [iD: 738]

2 Slick Paper [iD: 7111]

10000 Zeny

Reward:

1 The Paper Card [iD: 4172]

So, let's pretend this is your 5th quest, you'd start off as such:

CODE

case 5: callsub OnBuyItem,

Next, you would add in the first requirement: 4 Pencil Cases [iD: 738]:

CODE

case 5: callsub OnBuyItem,738,4,

Next, you would add in the second requirement: 2 Slick Papers [iD: 7111]:

CODE

case 5: callsub OnBuyItem,738,4,7111,2,

That is the last of your item requirements, so lets add the Zeny Requirement now: 10000 Zeny:

CODE

case 5: callsub OnBuyItem,738,4,7111,2,10000,"Zeny",

Now, you add the prize: 1 The Paper Card [iD: 4172]:

CODE

case 5: callsub OnBuyItem,738,4,7111,2,10000,"Zeny",4172,1

Now to make sure the server reads this is a line, you need to end the line with a semi-colon (";"):

CODE

case 5: callsub OnBuyItem,738,4,7111,2,10000,"Zeny",4172,1;

We have just created a custom quest.

Edited by Arcenciel
Codebox'ed
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  138
  • Topics Per Day:  0.03
  • Content Count:  835
  • Reputation:   25
  • Joined:  11/22/11
  • Last Seen:  

yaya. this is not for quest only ? if i want for zeny only? the syntax should like this?

case 5: callsub OnBuyItem,0,0,0,0,1000,"Zeny",4172,1;

Link to comment
Share on other sites


  • Group:  Forum Moderator
  • Topic Count:  93
  • Topics Per Day:  0.02
  • Content Count:  10015
  • Reputation:   2348
  • Joined:  10/28/11
  • Last Seen:  

if i want for zeny only? the syntax should like this?

LOL....why you go use a Complicated Zeny Shop Script when there is just a Simple way to do it...

A Simple Normal Shop would fullfill your request on this....

since you just want to sell those items using ZENY..

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  138
  • Topics Per Day:  0.03
  • Content Count:  835
  • Reputation:   25
  • Joined:  11/22/11
  • Last Seen:  

before i ever try add more then 3 item as required but not working then i trow this npc script (i add jellopy front)

case 5: callsub OnBuyItem,909,10,738,4,7111,2,10000,"Zeny",4172,1

about normal shop npc ~ ~"well. i try google it. just fail to get :P

to emistry: about fishing script u not yet reply me @@" pls ignore all question, i just wan to ask the syntax correct or wrong?

Edited by manabeast
Link to comment
Share on other sites

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.

×
×
  • Create New...