Hello,
I used Euphy and Emistry's shop, i find them complicated for me. as some people can use the shop and buy stuffs w/o pods/tcgs, i really cant help seeing buggers buying stuffs.=( instead i use this, the problem is, my character moves even im already inside the shop and also i want to use an specific currency/badges to buy in the shop, that i can easily put more shop but different items in it. please help me guys!!!//===== rAthena Script =======================================//= Dynamical Shop //===== By ===================================================//= lllchrislll//===== Version ==============================================//= 1.0 - Script Created// - Nearly forgot the "OnBuyItem" part (Q.Q)// - Added the possibility to edit the price limit.//= 1.1 - Added more Currency options// - Added possiblity to use pre-defined items + prices,// which are always in the shop, see 'OnInit:' > $cash_pre_it and $cash_pre_p// - Fixed an bug about the price limit// - Changed all $cash variables to .cash//===== Compatible With ======================================//= Every rAthena SVN //===== Tested With ==========================================//= rAthena SQL 11.06.2015 - Updated Revision//===== Description ==========================================//= This Shop can be changed dynamically ingame and has four// payment methods, to choose from: Zeny, Cash Points, Custom Variable and Item.//= Also you can edit the Price Limit as long it doesn't exceed// the server's default settings in the conf/script_athena.conf// > input_max_value. By default I put it on 10,000,000, near// line 76 you can find a small hint, which value is the max,// if it isn't noted inside of that file already.//===== Comments =============================================//= Thanks to Elysium:// > Bug about the price limit// > Modification request about more currency options//===========================================================
itemmall,175,76,4 script CashShop100,{
function ShopStuff;// Reading Currency Display Nameswitch(.CR){case0:set.Cur_N$,"None";break;case1:set.Cur_N$,"Zeny";set@Cur_O$,"Zeny";break;case2:set.Cur_N$,"Cash Points";set@Cur_O$,"#CASHPOINTS";break;case3:set.Cur_N$,.CR_Name$;set@Cur_O$,""+.CR_Var$;break;case4:set.Cur_N$,getitemname(.CR_Item);break;}if(.first)ShopStuff(5);if(getgmlevel()>=.gm){set@shop,0;
mes .n$;
mes "Hello, "+strcharinfo(0)+".";
mes "Current Currency: "+.Cur_N$;while(1){if(@shop){
close2;break;}// Reading Currency Display Nameswitch(.CR){case0:set.Cur_N$,"None";break;case1:set.Cur_N$,"Zeny";set@Cur_O$,"Zeny";break;case2:set.Cur_N$,"Cash Points";set@Cur_O$,"#CASHPOINTS";break;case3:set.Cur_N$,.CR_Name$;set@Cur_O$,""+.CR_Var$;break;case4:set.Cur_N$,getitemname(.CR_Item);break;}
next;
mes .n$;
mes "How can I help you?";
next;switch(select("- Shop Settings:- Reset Shop:- Open Shop:- Nothing")){case1:
mes .n$;
mes "What do you want view?";
next;if(select("- Shop Managment:- Currency Setting")-1){
mes .n$;
mes "What now?";
mes "^FF0000Note: On currency change I will delete every entry in the shop you have made so far.^000000";switch(select("- Change currency (Current - "+.Cur_N$+"):- Set Price Limit:- Nothing")){case1:
next;
mes .n$;
mes "Please choose from the menu below, which currency I should use:";switch(select("- Zeny:- Cash Points:- Custom Variable:- Items")){default:set.CR,@menu;break;case3:
next;
mes .n$;
mes "Please write the name of the Custom Variable and the display name for the players:";
mes "^FF0000Note: You have to be aware of the variable name itself, like PvPPoints.^000000";
mes "^FF0000Note: Max letters for variable name: 10, 20 for display name!^000000";
next;if(input(.@CR_Var$,1,10)!=0){
mes .n$;
mes "Error: Either the variable name is too long or too short. Please try again.";continue;}if(input(.@CR_Name$,1,20)!=0){
mes .n$;
mes "Error: Either the display name is too long or too short. Please try again.";continue;}
mes .n$;
mes "Variable Name: "+.@CR_Var$;
mes "Variable Display Name: "+.@CR_Name$;
mes "Is this correct?";if(select("- Yes:- No")-1)continue;
next;
mes .n$;
mes "Custom Variable will now be used as currency.";set.CR_Var$,.@CR_Var$;set.CR_Name$,.@CR_Name$;set.CR,3;break;case4:
next;
mes .n$;
mes "Please write the id of the item you want to use:";
next;if(input(.@item,501,.last_id)!=0){
mes .n$;
mes "The id you have put is either too low or too high.";continue;}if(getitemname(.@item)=="null"|| getitemname(.@item)==""){
mes .n$;
mes "The item you requested doesn't exist.";continue;}
mes .n$;
mes "Chosen Item: "+getitemname(.@item);
mes "Is that correct?";if(select("- Yes:- No")-1)continue;set.CR_Item,.@item;set.CR,4;break;}
deletearray .cash_it[0],128;
deletearray .cash_p[0],128;ShopStuff(4);continue;break;case2:
next;
mes .n$;
mes "Current Setting: "+.limit;
mes "Change?";if(select("- Yes:- No")-1)continue;
next;
mes .n$;
mes "Please type the new value:";// ========= Changing Max Limit of 10,000,000 ============ //// 10,000,000 is the default setting for the max input.// To change that open the conf/script_athena.conf and // edit the value of "input_max_value:" to "2147483647",// which is the highest value possible.// Then you only need to change it here :D.// ======================================================= //
mes "Note: But you can't go higher than the server setting of 10,000,000.";
next;if(input(@n_lim,1,10000000)!=0){
mes .n$;
mes "Invalid Value, max 10,000,000.";continue;}
mes .n$;
mes "New Limit has been set.";set.limit,@n_lim;continue;break;case3:continue;break;}}if(!.CR){
mes .n$;
mes "I'm sorry, but I don't know with which Currency I should trade yet.";
mes "Please choose an currency first.";continue;}if(!.limit){
mes .n$;
mes "You haven't set an price limit yet.";continue;}
mes .n$;if(getarraysize(.cash_it)<1){
mes "There is no item in the Shop yet.";}else{
mes "There are currently the following "+getarraysize(.cash_it)+" Items in the Shop:";
mes "============================";for(set.@i,0;.@i< getarraysize(.cash_it);set.@i,.@i+1){
mes getitemname(.cash_it[.@i])+" (ID: "+.cash_it[.@i]+")";
mes "Price:"+.cash_p[.@i]+" "+.Cur_N$;
mes ((.cash_it[.@i+1]!=0)?"---------------------------------":"============================");}}
next;switch(select("- Add Items:- Edit Items:- Delete Items:- Nothing")){case1:
mes .n$;if(getarraysize(.cash_it)>=128){
mes "The Shop is full, please remove an item first.";continue;}
mes "Please type the Item ID you want to add:";
mes "Max is 128 Items.";
next;if(input(.@item,501,.last_id)!=0){
mes .n$;
mes "The id you have put is either too low or too high.";continue;}if(getitemname(.@item)=="null"|| getitemname(.@item)==""){
mes .n$;
mes "The item you requested doesn't exist.";continue;}
mes .n$;
mes "Chosen Item: "+getitemname(.@item);
mes " ";
mes "Now input the price it should have, the current currency is \""+.Cur_N$+"\".";
mes "Maximum is "+.limit;
next;if(input(.@price,1,.limit)!=0){
mes .n$;
mes "You have put an invalid price.";
mes "Maximum is "+.limit;continue;}
mes .n$;
mes "Price: "+.@price+" "+.Cur_N$;
mes "Is that correct?";if(select("- Yes:- No")-1)continue;ShopStuff(1,0,.@item,.@price);continue;break;case2:
mes .n$;if(getarraysize(.cash_it)<1){
mes "There is no Item to edit.";
mes "Please add one first :D.";continue;}
mes "Please choose the item you want to edit:";
mes "Format: Name (Current Price)";
next;set@ed_list$,"";for(set.@e,0;.@e< getarraysize(.cash_it);set.@e,.@e+1)set@ed_list$,@ed_list$+"- "+getitemname(.cash_it[.@e])+" ("+.cash_p[.@e]+")"+((.cash_it[.@e+1])?":":"");set@ed,select(@ed_list$)-1;
mes .n$;
mes "Chosen Item: "+ getitemname(.cash_it[@ed]);
mes "Price: "+.cash_p[@ed]+" "+.Cur_N$;
mes "Correct?";if(select("- Yes:- No")-1)continue;
next;
mes .n$;
mes "What do you want to edit?";
next;if(select("- Item ID:- Price")-1){
mes .n$;
mes "Input the new price:";
next;if(input(.@price,1,.limit)!=0){
mes .n$;
mes "You have put an invalid price.";
mes "Maximum is "+.limit;continue;}
mes .n$;
mes "Chosen Price: "+.@price+" "+.Cur_N$;
mes "Correct?";if(select("- Yes:- No")-1)continue;ShopStuff(3,@ed,.cash_it[@ed],.@price);}else{
mes .n$;
mes "Input the new item id:";
next;if(input(.@item,501,.last_id)!=0){
mes .n$;
mes "The id you have put is either too low or too high.";continue;}if(getitemname(.@item)=="null"|| getitemname(.@item)==""){
mes .n$;
mes "The item you requested doesn't exist.";continue;}
mes .n$;
mes "Chosen Item: "+getitemname(.@item);
mes "Correct?";if(select("- Yes:- No")-1)continue;ShopStuff(3,@ed,.@item,.cash_p[@ed]);}continue;break;case3:
mes .n$;if(getarraysize(.cash_it)<1){
mes "There is no Item to remove.";
mes "Please add one first :D.";continue;}
mes "Please choose the item you want to remove:";
mes "Format: Name (Current Price)";
next;set@r_list$,"";for(set.@e,0;.@e< getarraysize(.cash_it);set.@e,.@e+1)set@r_list$,@r_list$+"- "+getitemname(.cash_it[.@e])+" ("+.cash_p[.@e]+")"+((.cash_it[.@e+1])?":":"");set@re,select(@r_list$)-1;
mes .n$;
mes "Chosen Item: "+ getitemname(.cash_it[@re]);
mes "Price: "+.cash_p[@re]+" "+.Cur_N$;
mes "Correct?";if(select("- Yes:- No")-1)continue;ShopStuff(2,@ed);continue;break;case4:continue;break;}case2:
mes .n$;
mes "Do you really want to reset the shop?";if(select("- Yes:- No")-1)continue;ShopStuff(4);continue;break;case3:set@shop,1;break;case4:
close;}}}if(!.CR){
mes .n$;
mes "I'm sorry, but I don't know with which Currency I should trade yet.";
close;}if(getarraysize(.cash_it)<1){
mes .n$;
mes "There are no items to purchase yet.";
mes "Please come back as soon as I have some.";
close;}
dispbottom strnpcinfo(1)+": Accepted Payment Method: "+.Cur_N$;if(.CR <4)
dispbottom strnpcinfo(1)+": You have "+getd(""+@Cur_O$)+" "+.Cur_N$;else
dispbottom strnpcinfo(1)+": You have "+countitem(.CR_Item)+" "+.Cur_N$;
dispbottom strnpcinfo(1)+": Notice: Discount Skill won't work at me, you'll have to pay the full price.";
callshop "Dynam_Shop",1;
npcshopattach "Dynam_Shop";
end;OnBuyItem:for(set.@b,0;.@b< getarraysize(@bought_nameid);set.@b,.@b+1){for(set.@l,0;.@l< getarraysize(.cash_it);set.@l,.@l+1){if(@bought_nameid[.@b]==.cash_it[.@l]){if(checkweight(.cash_it[.@l],@bought_quantity[.@b])==1){set@cost,.cash_p[.@l]*@bought_quantity[.@b];set@total,@total+@cost;}else{
dispbottom "Cash Shop: You would be overweight, please remove some items or buy less.";set@cost,0;set@total,0;
deletearray @bought_nameid[0],128;
deletearray @bought_quantity[0],128;
end;}}}}if(.CR <4&&(@total> getd(""+@Cur_O$)))set.@f,1;if(.CR ==4&&(@total> countitem(.CR_Item)))set.@f,1;if(.@f){
dispbottom strnpcinfo(1)+": You don't have the required "+.Cur_N$;
dispbottom strnpcinfo(1)+": You need "+@total+" "+.Cur_N$+".";set@cost,0;set@total,0;
deletearray @bought_nameid[0],128;
deletearray @bought_quantity[0],128;
end;}if(.CR <4)
setd(""+@Cur_O$),getd(""+@Cur_O$)-@total;else
delitem .CR_Item,@total;for(set.@s,0;.@s< getarraysize(@bought_nameid);set.@s,.@s+1){
getitem @bought_nameid[.@s],@bought_quantity[.@s];
dispbottom strnpcinfo(1)+": You have succesfully purchased "+@bought_quantity[.@s]+"x "+getitemname(@bought_nameid[.@s])+".";}
dispbottom strnpcinfo(1)+": You have paied "+@total+"x "+.Cur_N$+".";set@cost,0;set@total,0;
deletearray @bought_nameid[0],128;
deletearray @bought_quantity[0],128;
end;
function ShopStuff{// ==================================================== //// getarg(0):// * 1 - Add// * 2 - Remove// * 3 - Edit// * 4 - Delete Shop// * 5 - Shop Creation// getarg(1): Array Position for Edit & Remove// getarg(2): Item ID// getarg(3): Price// ==================================================== ////debugmes "getarg(0): "+getarg(0,0)+", getarg(1): "+getarg(1,0)+", getarg(2): "+getarg(2,0)+", getarg(3): "+getarg(3,0);// =========== Item Adding ============ //if(getarg(0)==1){
npcshopadditem "Dynam_Shop",getarg(2),getarg(3);
setarray .cash_it[getarraysize(.cash_it)],getarg(2);
setarray .cash_p[getarraysize(.cash_p)],getarg(3);// =========== Item Removal ============ // }elseif(getarg(0)==2){
npcshopdelitem "Dynam_Shop",.cash_it[getarg(1)];
deletearray .cash_it[getarg(1)],1;
deletearray .cash_p[getarg(1)],1;// =========== Item Edit ============ //}elseif(getarg(0)==3){
setarray .cash_it[getarg(1)],getarg(2);
setarray .cash_p[getarg(1)],getarg(3);// Re-Create Shop after Edit
npcshopitem "Dynam_Shop",.cash_it[0],.cash_p[0];for(set.@s,1;.@s< getarraysize(.cash_it);set.@s,.@s+1)
npcshopadditem "Dynam_Shop",.cash_it[.@s],.cash_p[.@s];// =========== Reset Shop ============ // }elseif(getarg(0)==4){
npcshopitem "Dynam_Shop",512,10;set.first,1;// =========== Shop Creation ============ // }elseif(getarg(0)==5){ShopStuff(4);
npcshopdelitem "Dynam_Shop",512;// Adding pre-defined items to the shop arrayfor(set.@s,0;.@s< getarraysize(.cash_pre_it);set.@s,.@s+1){
setarray .cash_it[getarraysize(.cash_it)],.cash_pre_it[.@s];
setarray .cash_p[getarraysize(.cash_p)],.cash_pre_p[.@s];}// Adding items to the shopfor(set.@s,0;.@s< getarraysize(.cash_it);set.@s,.@s+1)
npcshopadditem "Dynam_Shop",.cash_it[.@s],.cash_p[.@s];set.first,0;}return;}OnInit:set.n$,"["+strnpcinfo(1)+"]";set.gm,80;// General Access Levelset.first,1;// First Shop Creationset.last_id,30000;// Highest Item IDif(getarraysize($cash_it)>0){
deletearray $cash_it,128;
deletearray $cash_p,128;
deletearray $cash_pre_it,128;
deletearray $cash_pre_p,128;}// Pre-Defined Items in the Shop, they are always in it!
setarray .cash_pre_it[0],2792,2793,2374,2375,2357,2524,2421,2115,2729;
setarray .cash_pre_p[0],100,100,100,100,100,100,100,100,100;
end;}- shop Dynam_Shop-1,512:-1
Question
pinyinhuo
codebox
Link to comment
Share on other sites
8 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.