Jump to content
  • 0

rAthena shop which takes whichever item is available.


Question

Posted

I'd like to know if there's any script command to do this.

The shop is exchanging mastela fruits(item id #522) for valor OR bravery badges. If the player doesn't have bravery it'll take the valor and vice versa.

7 answers to this question

Recommended Posts

Posted


prontera,150,180,5 script excahnger 56,{

if ( countitem(7828) ) {// valor

getitem 522, countitem(7828);

delitem 7828, countitem(7828);

}

else if ( countitem(7829) ) {// bravery

getitem 522, countitem(7829);

delitem 7829, countitem(7829);

}

end;

}

Posted


prontera,150,180,5 script excahnger 56,{

if ( countitem(7828) )// valor

getitem 522, countitem(7828);

else if ( countitem(7829) )// bravery

getitem 522, countitem(7829);

end;

}

Posted (edited)
L_sure:

if ( countitem(7828) )// valor

getitem 522, countitem(7828);

else if ( countitem(7829) )// bravery

getitem 522, countitem(7829);

delitem 7828,1;

delitem 7829,1;

close;

 

If it has 7828 it deletes and closes . But if it has 7829 the window deletes gets stuck .

Edited by Umm
Posted
prontera,150,180,5	script	excahnger	56,{
	if ( countitem(7828) ) {// valor
		getitem 522, countitem(7828);
		delitem 7828, countitem(7828);
	}
	else if ( countitem(7829) ) {// bravery
		getitem 522, countitem(7829);
		delitem 7829, countitem(7829);
	}
	end;
}

Ty . Wroked like a charm.

 

Also i've decided to edit Emistry's Multi currency shop to get a shop interface for it . Can i know where to add this part of the script ^ and currently it only exchanges 1 mastela for 1 bravery . How do i make it exchange 100 mastelas for 1 bravery ?

 

 

// Settings :

// - Only required to edit the ShopSetting() Function
// Notes : You may also add / remove Menu ( If any ) 
// - Shop Currency can be either ItemID or Variable Name, but must write within Quotation Marks ( "" )
// Ex. of Variable. -> Zeny , #CASHPOINTS , #KAFRAPOINTS , CustomVariable , #CustomVariable
// - ERROR Message are used to show Invalid Settings in your NPC.
 
 
// Leave this alone...
- shop Emistry_Shop -1,512:100
 
 
prontera,155,181,5 script BG supply 757,{
function ShopSettings;
function ValidateCost;
function CurrencyInfo;
function ClearData;
function ValueConvert;
function ErrorNotice;
 
mes "Each Shop from the Menu may purchase using ^FF0000Different Currency^000000.";
mes "So,Which shop you would like to look at it";
next;
// Menu Selection
select("Shop 1","Shop 2","Shop 3");
 
ClearData();
ShopSettings( @menu );
npcshopitem "Emistry_Shop",512,100;
npcshopdelitem "Emistry_Shop",512;
for(set .@i,0; .@i < getarraysize( @ItemLists ); set .@i,.@i+1)
npcshopadditem "Emistry_Shop",@ItemLists[.@i],@ItemCost[.@i];
mes "Okay...wait awhile";
CurrencyInfo( @Currency$ );
callshop "Emistry_Shop",1;
npcshopattach "Emistry_Shop";
end;
 
 
function ShopSettings {
switch( getarg(0) ){
Case 1:
// Currency [ Item ID / Variable Name ]
set @Currency$,"7828";
// Item ID Lists
setarray @ItemLists[0],522,11502;
// Item Price
setarray @ItemCost[0],1,1;
break;
Case 2:
// Currency [ Item ID / Variable Name ]
set @Currency$,"7829";
// Item ID Lists
setarray @ItemLists[0],523,524;
// Item Price
setarray @ItemCost[0],2,2;
break;
Case 3:
// Currency [ Item ID / Variable Name ]
set @Currency$,"#CASHPOINTS";
// Item ID Lists
setarray @ItemLists[0],2306,2302,2303,2304,2305,2301;
// Item Price
setarray @ItemCost[0],20,22,34,445,52,641;
break;
// Case 4,5,6.....etc...
default:
ErrorNotice( "Invalid Menu Selection for Menu "+@menu+"." );
close;
}
 
 
if( @Currency$ == "" )
ErrorNotice( "Invalid Currency Setting in Menu "+@menu+" ." );
if( getarraysize( @ItemCost ) != getarraysize( @ItemLists ) || getarraysize( @ItemLists ) != getarraysize( @ItemCost ) )
ErrorNotice( "Missing or Extra Value of Item or Cost Settings in Menu "+@menu+" ." );
return;
}
 
function ErrorNotice {
mes "^FF0000ERROR^000000 - "+getarg(0);
mes "Inform this Message to ^0000FFGame Staffs^000000 immediately !";
close;
}
 
function CurrencyInfo {
if( getitemname( atoi( getarg(0) ) ) != "null" ){
mes "Item Currency : ^FF0000"+getitemname( atoi( getarg(0) ) )+"^000000";
mes "Available Amount : ^0000FF"+ValueConvert( countitem( atoi( getarg(0) ) ) )+"^000000";
}else if( getitemname( atoi( getarg(0) ) ) == "null" ){
mes "Variable Currency : ^FF0000"+getarg(0)+"^000000";
mes "Available Amount : ^0000FF"+ValueConvert( getd( getarg(0) ) )+"^000000";
}
return;
}
 
function ValidateCost {
if( getitemname( atoi( getarg(0) ) ) != "null" ){
if( countitem( atoi( getarg(0) ) ) < getarg(1) ) return 1;
}else{
if( getd( getarg(0) ) < getarg(1) ) return 1;
}
return 0;
}
 
function ClearData {
set @Currency$,"";
set @TotalCost,0;
deletearray @bought_nameid[0],getarraysize( @bought_nameid );
deletearray @bought_quantity[0],getarraysize( @bought_quantity );
deletearray @ItemLists[0],getarraysize( @ItemLists );
deletearray @ItemCost[0],getarraysize( @ItemCost );
return;
}
 
function ValueConvert {
set .@num, atoi(""+getarg(0));
if ( .@num == 0 || .@num >= 2147483647 ) return getarg(0);
set .@l, getstrlen(""+.@num);
for ( set .@i,0; .@i < .@l; set .@i, .@i + 1 ) {
set .@num$, .@num % pow(10,.@i+1) / pow(10,.@i) + .@num$;
if ( (.@i+1) % 3 == 0 && .@i+1 != .@l ) set .@num$, ","+ .@num$;
}
return .@num$;
}
 
OnBuyItem:
ShopSettings( @menu );
for(set @i,0; @i < getarraysize( @bought_nameid ); set @i,@i+1)
for(set @j,0; @j < getarraysize( @ItemLists ); set @j,@j+1)
if( @ItemLists[@j] == @bought_nameid[@i] )
set @TotalCost,@TotalCost + ( @ItemCost[@j] * @bought_quantity[@i] );
mes "^FF0000       BILLING LIST^000000";
mes "^00FF00____________________________^000000";
for( set @i,0; @i < getarraysize( @bought_nameid ); set @i,@i+1 )
mes "^FF0000"+@bought_quantity[@i]+" x ^0000FF"+getitemname( @bought_nameid[@i] )+"^000000";
mes "^00FF00____________________________^000000";
 
if( getitemname( atoi( @Currency$ ) ) != "null" )
mes "Total Cost : ^0000FF"+ValueConvert( @TotalCost )+" x "+getitemname( atoi( @Currency$ ) )+"^000000";
else if( getitemname( atoi( @Currency$ ) ) == "null" ){
mes "Total Cost : ^0000FF"+ValueConvert( @TotalCost )+" "+@Currency$+"^000000";
}
 
mes "^00FF00____________________________^000000";
if( ValidateCost( @Currency$,@TotalCost ) ){
if( getitemname( atoi( @Currency$ ) ) != "null" )
mes "[ ^FF0000X^000000 ] Insufficient ^0000FF"+getitemname( atoi( @Currency$ ) )+"^000000";
else{
mes "[ ^FF0000X^000000 ] Insufficient ^0000FF"+@Currency$+"^000000";
}
}else{
if( select( "^0000FFPurchase^000000:Cancel" ) == 1 ){
if( getitemname( atoi( @Currency$ ) ) != "null" )
delitem atoi( @Currency$ ),@TotalCost;
else{
set getd( @Currency$ ),getd( @Currency$ ) - @TotalCost;
}
for(set @i,0; @i < getarraysize( @bought_nameid ); set @i,@i+1)
getitem @bought_nameid[@i],@bought_quantity[@i];
message strcharinfo(0),"Purchased "+getarraysize( @bought_nameid )+" Items.";
mes "Thank you for shopping.";
}
}
ClearData();
close;
 
}

Posted

Guys can anybody help me out ? I just need a basic npc script which exchanges mastela for bravery or valor . Like you enter how many packets you want and it completes the deal . 1 bravery = 50 badges . So if I input 3 packets it gives me 150 mastelas . Also if possible could it be in a shop interface ?

Posted (edited)

If your using rathena try using an itemshop

<map name>,<x>,<y>,<facing>%TAB%itemshop%TAB%<NPC Name>%TAB%<sprite id>,<costitemid>{:<discount>},<itemid>:<price>{,<itemid>:<price>...}

Edit:

to clarify this shop cost items to buy items

Edited by Stolao
  • 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...