Jump to content

ahloi007

Members
  • Posts

    78
  • Joined

Posts posted by ahloi007

  1. On 9/7/2019 at 12:42 PM, Radian said:

    change this part

    
    input .@tcg_amount,0,30000;

    into this

    
    input .@tcg_amount,6,30000;

     

    Yes it's work! xD thanks ya!

    20 hours ago, nomade said:

    Sorry for the delay in answering, I was at work ^^

    Try this one now:

    
    prt_in,44,100,3	script	CP Converter	532,{
    
    	.@name$ = strcharinfo(0);			// Char Name
    	.@item = 7227;						// Item ID
    	.@amount = 6;						// Item Quantity Required to Receive Cash
    	.@cashpaid = 1;						// Cash amount to be paid
    	.@countitem = countitem( .@item )/ .@amount;	// Countitem
    	
    	if( .@countitem < 1) {
    		mes "[ Cash Converter ]";
    		mes "You don't have any ^0000FF"+ getitemname(.@item) +"^000000 in your Inventory to be exchanged for Cash Points.";
    		mes "Please come back to me if you have it already.";
    		close;
    	}
    
    	mes "[ Cash Converter ]";
    	mes rand(2) ? ""+callfunc("F_Hi")+" I'm Cash Converter, of Prontera Rune-Midgard City." 
    	: ""+callfunc("F_Hi")+" I can able to exchange your ^0000FF"+ getitemname(.@item) +"^000000 to Cash Points.";
    	mes " ";
    	mes "What would you like to do?";
    	next;
    	mes "[ Cash Converter ]";
    	mes "^FF0000Information:^000000";
    	mes "^777777 -------------------- ^000000";
    	mes "Exchange Rate: "+ .@countitem * .@amount +" x "+ getitemname( .@item ) +" to "+ ( .@countitem * .@cashpaid ) +" Cash Point"+ (.@countitem * .@cashpaid > 1 ? "s" : "") +"";
    	next;
    	if( select("- Convert","- Cancel") == 1 ) {
    		progressbar "0x11CC99",1; specialeffect2 EF_REMOVETRAP;
    		delitem .@item,.@countitem * .@amount;
    		#CASHPOINTS = #CASHPOINTS + ( .@countitem * .@cashpaid );
    		message .@name$,"You have recieved "+ .@countitem * .@cashpaid +" Cash Point"+ (#CASHPOINTS > 1 ? "s" : "") +" and a of Total: "+ #CASHPOINTS +" Cash Point"+ (#CASHPOINTS > 1 ? "s" : "") +"";
    		mes "[ Cash Converter ]";
    		mes "You have successfully exchanged.";
    	}
    	close;
    }

    https://prnt.sc/p34xca

    https://prnt.sc/p34xhj

    https://prnt.sc/p34xjo

    https://prnt.sc/p34xoe

    Wow! Finally it's work! Thanks ya!

  2. On 9/7/2019 at 12:22 PM, Start_ said:

    You call this

    
    getitem callfunc("F_Rand",30016,30007,30012,30008,30018,30015,30011,30010),1;

     

    That's function F_Rand take 1 arguments is item id.

    Then you can easy send more argument to function like how much percent do you want to increase chance at index or whatever.

     

    By the way there are many ways to it.

    Okay Thanks! I got it xD

    23 hours ago, Emistry said:

    you could use these instead.

    
    *groupranditem <group id>{,<sub_group>};
    
    Returns the item_id of a random item picked from the group specified. The
    different groups and their group number are specified in 'db/(pre-)re/item_group_db.txt'.
    
    When used in conjunction with other functions, you can get a random item. For
    example, for a random pet lure:
    
    getitem groupranditem(IG_Taming),1;
    
    'sub_group' is used to get the available random items of item group from specified random
    group. 0 for 'must' item group, and random item group is 1 until 5 (MAX_ITEMGROUP_RANDGROUP+1).
    
    More info, see doc/item_group.txt.
    
    ---------------------------------------
    
    *getrandgroupitem <group_id>{,<quantity>{,<sub_group>{,<identify>{,<char_id>}}}};
    
    Similar to the above example, this command allows players to obtain the specified
    quantity of a random item from the group "<group id>". The different groups and
    their group number are specified in db/(pre-)re/item_group_db.txt
    
    If 'quantity' is not defined or 0, it will uses defined amount from Item Group list.
    
    If 'sub_group' is not defined the value will be 1 (since random group is 1 ~ 5, and 0 is
    'must' item group).
    
    For item with type IT_WEAPON, IT_ARMOR, IT_PETARMOR, and IT_SHADOWGEAR will be given
    as unidentified item (as defined by itemdb_isidentified in src/map/itemdb.cpp) except
    if 'identify' is defined with value 1.
    
    More info, see doc/item_group.txt.
    
    ---------------------------------------
    
    *getgroupitem <group_id>{,<identify>{,<char_id>}};
    
    Gives item(s) to the attached player based on item group contents.
    This is not working like 'getrandgroupitem' which only give 1 item for specified
    item group & sub_group.
    
    For item with type IT_WEAPON, IT_ARMOR, IT_PETARMOR, and IT_SHADOWGEAR will be given
    as unidentified item (as defined by itemdb_isidentified in src/map/itemdb.cpp) except
    if 'identify' is defined with value 1.
    
    More info, see doc/item_group.txt.

     

    Thanks ya! just figure it out xD

  3. On 9/7/2019 at 5:46 AM, nomade said:

    The colleague above already answered, but here is the same npc, with the modification that requested.

    
    prt_in,44,100,3	script	CP Converter	532,{
    
    	.@name$ = strcharinfo(0);			// Char Name
    	.@item = 7227;						// Item ID
    	.@amount = 6;						// Item Quantity Required to Receive Cash
    	.@cashpaid = 1;						// Cash amount to be paid
    	.@countitem = countitem( .@item )/ .@amount;	// Countitem
    	
    	if( .@item < .@amount) {
    		mes "[ Cash Converter ]";
    		mes "You don't have any ^0000FF"+ getitemname(.@item) +"^000000 in your Inventory to be exchanged for Cash Points.";
    		mes "Please come back to me if you have it already.";
    		close;
    	}
    
    	mes "[ Cash Converter ]";
    	mes rand(2) ? ""+callfunc("F_Hi")+" I'm Cash Converter, of Prontera Rune-Midgard City." 
    	: ""+callfunc("F_Hi")+" I can able to exchange your ^0000FF"+ getitemname(.@item) +"^000000 to Cash Points.";
    	mes " ";
    	mes "What would you like to do?";
    	next;
    	mes "[ Cash Converter ]";
    	mes "^FF0000Information:^000000";
    	mes "^777777 -------------------- ^000000";
    	mes "Exchange Rate: "+ .@countitem +" x "+ getitemname( .@item ) +" to "+ ( .@countitem * .@cashpaid ) +" Cash Point"+ (.@countitem * .@cashpaid > 1 ? "s" : "") +"";
    	next;
    	if( select("- Convert","- Cancel") == 1 ) {
    		progressbar "0x11CC99",1; specialeffect2 EF_REMOVETRAP;
    		delitem .@item,.@countitem * .@amount;
    		#CASHPOINTS = #CASHPOINTS + ( .@countitem * .@cashpaid );
    		message .@name$,"You have recieved "+ .@countitem * .@cashpaid +" Cash Point"+ (#CASHPOINTS > 1 ? "s" : "") +" and a of Total: "+ #CASHPOINTS +" Cash Point"+ (#CASHPOINTS > 1 ? "s" : "") +"";
    		mes "[ Cash Converter ]";
    		mes "You have successfully exchanged.";
    	}
    	close;
    }

    Thanks sir, but the npc function still remain the same 1 TCG =1 cash point not 6 TCG =1 cash point.

    But I still like this npc as well because easy for player use.

     

    On 9/7/2019 at 5:12 AM, Radian said:

    Try this one if you like, I made it.

    
    prt_in,44,100,3	script	CP Converter	532,{
    
    	.@name$ = "[ CP Converter ]";			// Char Name
    	.@item = 7227;					// Item ID
    	.@amount = 6;					// Amount
    	.@cash_points = 1;				// cash points amount
    
    	mes .@name$;
    	mes "Would you like to convert your " + getitemname( .@item ) + " into cash points?";
    	next;
    	if( select("Yes Convert","No I dont want to.") == 2 ) close;
    		input .@tcg_amount,0,30000;
    		if( !.@tcg_amount ) end;
    		if( countitem(.@item) < .@tcg_amount ) {
    			mes .@name$;
    			mes "Im sorry but you dont have enough " + getitemname( .@item ) + " to exchange.";
    			close;
    		}
    
    		mes .@name$;
    		mes "To confirm this deal you wanted to exchanged (" + .@amount + ") " + getitemname( .@item ) + " into a total of " + ( .@tcg_amount / .@amount ) + " cash points.";
    		next;
    		if( select("Yes!","No") == 2 ) close;
    			mes .@name$;
    			mes "The convertion was successful!";
    			delitem .@item, .@tcg_amount;
    			.@temp_value = .@tcg_amount / .@amount;
    			#CASHPOINTS += .@temp_value;
    			dispbottom "You gained a total " + ( .@temp_value ) + " cash points.";
    			end;
    		
    }

     

    Sir, this npc function well but can you make it like auto detect the amount of TCG card and straight away convert it into cash point instead of key in the amount? Because just now I have tried it, even I got 1 TCG it still can convert into cash point and obtain 0 cash point but if I key in the amount of 6 TCG card it function well. Or can please change it into cash amount that need to be exchange? I scare later those people got confuse when using this npc xD

     

    Please let me know if you can't understand what I'm saying, sorry for my bad english

  4. Hi, can I know how to edit this Cash Converter Npc at below?

    I want to make it like 6 TCG card to 1 cash point..

    But I have tried several times to edit it but the Cash Point amount give out doesn't get what I want.

    Can please point out where should I need to edit in details? Because I'm still new to here.

    *lol

    prt_in,44,100,3	script	CP Converter	532,{
    
    	.@name$ = strcharinfo(0);			// Char Name
    	.@item = 7227;						// Item ID
    	.@amount = 1;						// Amount
    	.@countitem = countitem( .@item* );	// Countitem
    	
    	if( .@countitem < 1 ) {
    		mes "[ Cash Converter ]";
    		mes "You don't have any ^0000FF"+ getitemname(.@item) +"^000000 in your Inventory to be exchanged for Cash Points.";
    		mes "Please come back to me if you have it already.";
    		close;
    	}
    
    	mes "[ Cash Converter ]";
    	mes rand(2) ? ""+callfunc("F_Hi")+" I'm Cash Converter, of Prontera Rune-Midgard City." 
    	: ""+callfunc("F_Hi")+" I can able to exchange your ^0000FF"+ getitemname(.@item) +"^000000 to Cash Points.";
    	mes " ";
    	mes "What would you like to do?";
    	next;
    	mes "[ Cash Converter ]";
    	mes "^FF0000Information:^000000";
    	mes "^777777 -------------------- ^000000";
    	mes "Exchange Rate: "+ .@countitem +" x "+ getitemname( .@item ) +" to "+ ( .@countitem * .@amount ) +" Cash Point"+ (.@countitem * .@amount > 1 ? "s" : "") +"";
    	next;
    	if( select("- Convert","- Cancel") == 1 ) {
    		progressbar "0x11CC99",1; specialeffect2 EF_REMOVETRAP;
    		delitem .@item,.@countitem;
    		#CASHPOINTS = #CASHPOINTS + ( .@countitem * .@amount );
    		message .@name$,"You have recieved "+ .@countitem * .@amount +" Cash Point"+ (#CASHPOINTS > 1 ? "s" : "") +" and a of Total: "+ #CASHPOINTS +" Cash Point"+ (#CASHPOINTS > 1 ? "s" : "") +"";
    		mes "[ Cash Converter ]";
    		mes "You have successfully exchanged.";
    	}
    	close;
    }

     

    • Upvote 1
  5. Quote

    30024,Lucky_Draw_Box1,Lucky Draw Box1,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem callfunc("F_Rand",30016,30007,30012,30008,30018,30015,30011,30010),1; },{},{}

    function	script	F_Rand	{
    	return getarg(rand(getargcount()));
    }

    Hi there, this is the random box script that I am using right now.

    Can I know how to add on the % to the item give out through this script ?

     

     

  6. On 9/2/2019 at 12:47 PM, Emistry said:

    Emistry, the npc do appeared in game but doesn't working perfectly. 

    1.jpg.db10036e616a1251eae38e811085e20c.jpg

    and I found this error too.

    On 9/3/2019 at 4:53 AM, Emistry said:

    its a function, not a NPC lol

    just load the function above to overwrite the existing function 

    or add these NPC

    
    // Weapon/Armor Refiners
    //============================================================
    prt_in,63,60,0	script	Hollgrehenn	85,{
    	callfunc "refinemain","Hollgrehenn",0;
    	end;
    }
    morocc_in,73,38,6	script	Aragham	99,{
    	callfunc "refinemain","Aragham",0;
    	end;
    }
    payon,144,173,5	script	Antonio	88,{
    	callfunc "refinemain","Antonio",0;
    	end;
    }
    alberta_in,28,58,0	script	Fredrik	85,{
    	callfunc "refinemain","Fredrik",0;
    	end;
    }
    yuno_in01,171,21,4	script	Lambert	88,{
    	callfunc "refinemain","Lambert",0;
    	end;
    }
    ein_in01,24,87,5	script	Manthasman	826,{
    	callfunc "refinemain","Manthasman Pruhag",0;
    	end;
    }
    lhz_in02,282,20,7	script	Fulerr	869,{
    	callfunc "refinemain","Fulerr",0;
    	end;
    }

     

    Thanks for your information It's work perfectly!!! 

  7. 3 hours ago, Emistry said:

    you can try this.

    https://pastebin.com/raw/h0HQ5Axa

    
    	.@failsafe_itemid = 7539;
    	.@failsafe_rate = 40;
    	if (.@failsafe_itemid) {
    		if (getequippercentrefinery(.@part) <= .@failsafe_rate) {
    			mes "[Item Protection]";
    			mes "Do you have "+getitemname(.@failsafe_itemid)+" item ? It will protect your armor/weapon from broken.";
    			next;
    			if (select((countitem(.@failsafe_itemid)? "Yes":""), "No") == 1) {
    				.@failsafe = 1;
    			}
    		}
    	}

    find all these part and edit.

    Im sorry that I forgot mention that my server is Pre-re and the max refine is +10 only

  8. Dear all,

    Can I know how do I add on a function for the existing refiner npc?

    Example: Before you confirm what item u need to refine ( upper headgear, armor and weapon ), the npc will ask "Do you have xxx item ? It will protect your armor/weapon from broken." 

    If yes, it will consume the xxx item to protect the armor / weapon from broken if the refine failed; No will just keep on continue refine the item.

    The refine rate still remain the same, nothing change . But if the refine failed, the armor/weapon will still be there just the xxx item gone. 

    Sorry for my bad english. Hope you guys understand what I mean.

  9. 	// Group requirement
    	if (getgroupid() < .UseMinLv) {
    		mes .NpcName$;
    		mes "I'm sorry, but I can't help you.";
    		mes "See you.";
    		close;
    	}
    	
    	mes .NpcName$;
    	mes "I'm the Armsmith.";
    	mes "I can refine all kinds of weapons, armor and equipment, so let me";
    	mes "know what you want me to refine.";
    	next;
    
    	setarray .@position$[1], "Head","Body","Left hand","Right hand","Robe","Shoes","Accessory 1","Accessory 2","Head 2","Head 3";
    	set .@menu$, "";
    	for(.@i = 1; .@i <= 10; .@i++) {
    		if(getequipisequiped(.@i)) {
    			set .@menu$, .@menu$ + .@position$[.@i] + "-" + "[" + getequipname(.@i) + "]";
    			.@equipped = 1;
    		}
    		set .@menu$, .@menu$ + ":";
    	}
    	if (.@equipped == 0) {
    		mes .NpcName$;
    		mes "I don't think I can refine any items you have...";
    		close;

    Is it this one? Sry for my late reply.... :unsure:

  10. Do you have multiple Euphy Quest Shop? Maybe all of them has the same "qshop" as the shop name. The other npc is being called first when you clicked the headgear category. Just a hunch.

     

     

    Not quite sure but try this:

    on this line:

     

    // Dummy shop data -- copy as needed.
    //============================================================
    -	shop	qshop1	-1,909:-1
    -	shop	qshop2	-1,909:-1
    -	shop	qshop3	-1,909:-1
    -	shop	qshop4	-1,909:-1
    -	shop	qshop5	-1,909:-1
    

    Try removing qshop4 and 5

     

    Thanks for help guys...

    But I fixed it by adding "Sleep 10;" When doing research with the hatmaker npc, I saw this code then I try it.. lol

    // -----------------------------------------------------------
    //  Quest items -- do NOT use a reward item more than once!
    //	Add(<shop ID>,<reward ID>,<reward amount>,
    //	    <Zeny cost>,<point cost>,
    //	    <required item ID>,<required item amount>{,...});
    // -----------------------------------------------------------
    	Sleep 10;
    	Add(1,30101,1,0,0,7086,1,969,10,999,40,1003,50,984,2);
    	Add(1,30102,1,0,0,1059,250,2221,1,2227,1,7063,600);
    	Add(1,30103,1,0,0,2252,1,1036,400,7001,50,4052,1);
    	Add(1,30104,1,0,0,2252,1,1054,450,943,1200);
    	Sleep 10;
    	Add(2,1224,1,0,0,7297,30,969,10,999,50,714,10);
    	Add(2,1225,1,0,0,7292,30,969,10,999,50,714,10);
    	Sleep 10;
    	Add(3,531,1,3,0,512,1,713,1);
    	Add(3,532,1,3,0,513,1,713,1);
    	Add(3,533,1,3,0,514,1,713,1);
    	Add(3,534,1,3,0,515,1,713,1);
    
    

    By the way can I know what is the meaning or function of " Sleep 10; "

     

    p/s Sorry for my bad english =)

    Thanks again!

  11. //===== rAthena Script =======================================
    //= Euphy's Quest Shop
    //===== By: ==================================================
    //= Euphy
    //===== Current Version: =====================================
    //= 1.6c
    //===== Compatible With: =====================================
    //= rAthena Project
    //===== Description: =========================================
    //= A dynamic quest shop based on Lunar's, with easier config.
    //= Includes support for multiple shops & cashpoints.
    //= Item Preview script by ToastOfDoom.
    //===== Additional Comments: =================================
    //= 1.0 Initial script.
    //= 1.2 Added category support.
    //= 1.3 More options and fixes.
    //= 1.4 Added debug settings.
    //= 1.5 Replaced categories with shop IDs.
    //= 1.6 Added support for purchasing stackables.
    //= 1.6a Added support for previewing costumes and robes.
    //= 1.6b Added 'disable_items' command.
    //= 1.6c Replaced function 'A_An' with "F_InsertArticle".
    //============================================================
    
    // Shop NPCs -- supplying no argument displays entire menu.
    //	callfunc "qshop"{,<shop ID>{,<shop ID>{,...}}};
    //============================================================
    prontera,164,203,6	script	Quest Shop#1	998,{ callfunc "qshop"; }
    
    
    // Script Core
    //============================================================
    -	script	quest_shop	-1,{ 
    function Add; function Chk; function Slot;
    OnInit:
    	freeloop(1);
    
    // -----------------------------------------------------------
    //  Basic shop settings.
    // -----------------------------------------------------------
    
    	set .Announce,1;	// Announce quest completion? (1: yes / 0: no)
    	set .ShowSlot,1;	// Show item slots? (2: all equipment / 1: if slots > 0 / 0: never)
    	set .ShowID,0;  	// Show item IDs? (1: yes / 0: no)
    	set .ShowZeny,0;	// Show Zeny cost, if any? (1: yes / 0: no)
    	set .MaxStack,100;	// Max number of quest items purchased at one time.
    
    // -----------------------------------------------------------
    //  Points variable -- optional quest requirement.
    //	setarray .Points$[0],"<variable name>","<display name>";
    // -----------------------------------------------------------
    
    	setarray .Points$[0],"#CASHPOINTS","Cash Points";
    
    // -----------------------------------------------------------
    //  Shop IDs -- to add shops, copy dummy data at bottom of file.
    //	setarray .Shops$[1],"<Shop 1>","<Shop 2>"{,...};
    // -----------------------------------------------------------
    
    	setarray .Shops$[1],"Headgears","Weapons","Other";
    
    // -----------------------------------------------------------
    //  Quest items -- do NOT use a reward item more than once!
    //	Add(<shop ID>,<reward ID>,<reward amount>,
    //	    <Zeny cost>,<point cost>,
    //	    <required item ID>,<required item amount>{,...});
    // -----------------------------------------------------------
    
    	Add(1,30101,1,0,0,7086,1,969,10,999,40,1003,50,984,2);
    	Add(1,30102,1,0,0,1059,250,2221,1,2227,1,7063,600);
    	Add(1,30103,1,0,0,2252,1,1036,400,7001,50,4052,1);
    	Add(1,30104,1,0,0,2252,1,1054,450,943,1200);
    
    	Add(2,1224,1,0,0,7297,30,969,10,999,50,714,10);
    	Add(2,1225,1,0,0,7292,30,969,10,999,50,714,10);
    
    	Add(3,531,1,3,0,512,1,713,1);
    	Add(3,532,1,3,0,513,1,713,1);
    	Add(3,533,1,3,0,514,1,713,1);
    	Add(3,534,1,3,0,515,1,713,1);
    
    // -----------------------------------------------------------
    
    	freeloop(0);
    	set .menu$,"";
    	for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1) {
    		set .menu$, .menu$+.Shops$[.@i]+":";
    		npcshopdelitem "qshop"+.@i,909;
    	}
    	end;
    
    OnMenu:
    	set .@size, getarraysize(@i);
    	if (!.@size) set @shop_index, select(.menu$);
    	else if (.@size == 1) set @shop_index, @i[0];
    	else {
    		for(set .@j,0; .@j<.@size; set .@j,.@j+1)
    			set .@menu$, .@menu$+.Shops$[@i[.@j]]+":";
    		set @shop_index, @i[select(.@menu$)-1];
    	}
    	deletearray @i[0],getarraysize(@i);
    	if (.Shops$[@shop_index] == "") {
    		message strcharinfo(0),"An error has occurred.";
    		end;
    	}
    	dispbottom "Select one item at a time.";
    	callshop "qshop"+@shop_index,1;
    	npcshopattach "qshop"+@shop_index;
    	end;
    
    OnBuyItem:
    	// .@q[] : RewardID, BoughtAmt, RewardAmt, BaseAmt, ReqZeny, ReqPts, { ReqItem, ReqAmt, ... }
    	setarray .@q[0],@bought_nameid[0],((@bought_quantity[0] > .MaxStack)?.MaxStack:@bought_quantity[0]);
    	copyarray .@q[3],getd(".q_"+@shop_index+"_"+.@q[0]+"[0]"),getarraysize(getd(".q_"+@shop_index+"_"+.@q[0]));
    	set .@q[2],.@q[1]*.@q[3];
    	if (!.@q[2] || .@q[2] > 30000) {
    		message strcharinfo(0),"You can't purchase that many "+getitemname(.@q[0])+".";
    		end;
    	}
    	mes "[Quest Shop]";
    	mes "Reward: ^0055FF"+((.@q[2] > 1)?.@q[2]+"x ":"")+Slot(.@q[0])+"^000000";
    	mes "Requirements:";
    	disable_items;
    	if (.@q[4]) mes " > "+Chk(Zeny,.@q[4]*.@q[1])+(.@q[4]*.@q[1])+" Zeny^000000";
    	if (.@q[5]) mes " > "+Chk(getd(.Points$[0]),.@q[5]*.@q[1])+(.@q[5]*.@q[1])+" "+.Points$[1]+" ("+getd(.Points$[0])+"/"+(.@q[5]*.@q[1])+")^000000";
    	if (.@q[6]) for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2)
    		mes " > "+Chk(countitem(.@q[.@i]),.@q[.@i+1]*.@q[1])+((.ShowID)?"{"+.@q[.@i]+"} ":"")+Slot(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+(.@q[.@i+1]*.@q[1])+")^000000";
    	next;
    	setarray @qe[1], getiteminfo(.@q[0],5), getiteminfo(.@q[0],11);
    	if (@qe[2] > 0 && ((@qe[1] & 1) || (@qe[1] & 256) || (@qe[1] & 512) || (@qe[1] & 1024) || (@qe[1] & 2048) || (@qe[1] & 4096) || (@qe[1] & 4) || (@qe[1] & 8192)))
    		set .@preview,1;
    	addtimer 1000, strnpcinfo(0)+"::OnEnd";
    	while(1) {
    		switch(select(" ~ Purchase ^0055FF"+getitemname(.@q[0])+"^000000:"+((.@preview && !@qe[7])?" ~ Preview...":"")+": ~ ^777777Cancel^000000")) {
    		case 1:
    			if (@qe[0]) { 
    				mes "[Quest Shop]";
    				mes "You're missing one or more quest requirements.";
    				close;
    			}
    			if (!checkweight(.@q[0],.@q[2])) {
    				mes "[Quest Shop]";
    				mes "^FF0000You need "+(((.@q[2]*getiteminfo(.@q[0],6))+Weight-MaxWeight)/10)+" additional weight capacity to complete this trade.^000000";
    				close;
    			}
    			if (.@q[4]) set Zeny, Zeny-(.@q[4]*.@q[1]);
    			if (.@q[5]) setd .Points$[0], getd(.Points$[0])-(.@q[5]*.@q[1]);
    			if (.@q[6]) for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2)
    				delitem .@q[.@i],.@q[.@i+1]*.@q[1];
    			getitem .@q[0],.@q[2];
    			if (.Announce) announce strcharinfo(0)+" has created "+((.@q[2] > 1)?.@q[2]+"x "+getitemname(.@q[0]):callfunc("F_InsertArticle",getitemname(.@q[0])))+"!",0;
    			specialeffect2 EF_FLOWERLEAF;
    			close;
    		case 2:
    			setarray @qe[3], getlook(LOOK_HEAD_BOTTOM), getlook(LOOK_HEAD_TOP), getlook(LOOK_HEAD_MID), getlook(LOOK_ROBE), 1;
    			if ((@qe[1] & 1) || (@qe[1] & 4096)) changelook LOOK_HEAD_BOTTOM, @qe[2];
    			else if ((@qe[1] & 256) || (@qe[1] & 1024)) changelook LOOK_HEAD_TOP, @qe[2];
    			else if ((@qe[1] & 512) || (@qe[1] & 2048)) changelook LOOK_HEAD_MID, @qe[2];
    			else if ((@qe[1] & 4) || (@qe[1] & 8192)) changelook LOOK_ROBE, @qe[2];
    			break;
    		case 3:
    			close;
    		}
    	}
    
    OnEnd:
    	if (@qe[7]) {
    		changelook LOOK_HEAD_BOTTOM, @qe[3];
    		changelook LOOK_HEAD_TOP, @qe[4];
    		changelook LOOK_HEAD_MID, @qe[5];
    		changelook LOOK_ROBE, @qe[6];
    	}
    	deletearray @qe[0],8;
    	end;
    
    function Add {
    	if (getitemname(getarg(1)) == "null") {
    		debugmes "Quest reward #"+getarg(1)+" invalid (skipped).";
    		return;
    	}
    	setarray .@j[0],getarg(2),getarg(3),getarg(4);
    	for(set .@i,5; .@i<getargcount(); set .@i,.@i+2) {
    		if (getitemname(getarg(.@i)) == "null") {
    			debugmes "Quest requirement #"+getarg(.@i)+" invalid (skipped).";
    			return;
    		} else
    			setarray .@j[.@i-2],getarg(.@i),getarg(.@i+1);
    	}
    	copyarray getd(".q_"+getarg(0)+"_"+getarg(1)+"[0]"),.@j[0],getarraysize(.@j);
    	npcshopadditem "qshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0);
    	return;
    }
    
    function Chk {
    	if (getarg(0) < getarg(1)) {
    		set @qe[0],1;
    		return "^FF0000";
    	} else
    		return "^00FF00";
    }
    
    function Slot {
    	set .@s$,getitemname(getarg(0));
    	switch(.ShowSlot) {
    		case 1: if (!getitemslots(getarg(0))) return .@s$;
    		case 2: if (getiteminfo(getarg(0),2) == 4 || getiteminfo(getarg(0),2) == 5) return .@s$+" ["+getitemslots(getarg(0))+"]";
    		default: return .@s$;
    	}
    }
    }
    
    function	script	qshop	{
    	deletearray @i[0],getarraysize(@i);
    	for(set .@i,0; .@i<getargcount(); set .@i,.@i+1)
    		set @i[.@i],getarg(.@i);
    	doevent "quest_shop::OnMenu";
    	end;
    }
    
    
    // Dummy shop data -- copy as needed.
    //============================================================
    -	shop	qshop1	-1,909:-1
    -	shop	qshop2	-1,909:-1
    -	shop	qshop3	-1,909:-1
    -	shop	qshop4	-1,909:-1
    -	shop	qshop5	-1,909:-1

    I have used Euphy's Quest NPC just now and I faced a problem with it.

     

    After I added this npc to my server and click on the npc it was fine...

    screenKx%20Ragnarok%20Online000.jpgpost-8877-0-74465900-1466567519_thumb.jpg

     

    But after I selected a category "Headgears" on it, then it come out with Jellopy

    post-8877-0-09838600-1466567826_thumb.jpg

     

    I have no idea how to fix this..

    Please guide me!

  12. Im searching for latest Basic waper npc script with renewal map and it can warp player to "Town", "Dungeon Entrance","Fields" only...

    I have done searching in google but I got old version of it and doesnt have renewal maps.

    Did anyone can help me? 

     

    thanks you and sorry for my bad english.. =)

  13. prt_in,63,60,2 script Kx Refiner 85,{
    
    function ShowChanceInfo; function ShowSecureInfo;
    
    function GetChanceBonus; function GetSecure;
    
    function ConsumeSecure; function Refine;
    
    function ConsumeChance;
    
    // Group requirement
    
    if (getgroupid() < .UseMinLv) {
    
    mes .NpcName$;
    
    mes "I'm sorry, but I can't help you.";
    
    mes "See you.";
    
    close;
    
    }
    
    mes .NpcName$;
    
    mes "I'm the Armsmith.";
    
    mes "I can refine all kinds of weapons, armor and equipment, so let me";
    
    mes "know what you want me to refine.";
    
    next;
    
    setarray .@position$[1], "Head","Body","Left hand","Right hand","Robe","Shoes","Accessory 1","Accessory 2","Head 2","Head 3";
    
    set .@menu$, "";
    
    for(.@i = 1; .@i <= 10; .@i++) {
    
    if(getequipisequiped(.@i)) {
    
    set .@menu$, .@menu$ + .@position$[.@i] + "-" + "[" + getequipname(.@i) + "]";
    
    .@equipped = 1;
    
    }
    
    set .@menu$, .@menu$ + ":";
    
    }
    
    if (.@equipped == 0) {
    
    mes .NpcName$;
    
    mes "I don't think I can refine any items you have...";
    
    close;
    
    }
    
    // Get part to upgrade
    
    @part = select(.@menu$);
    
    if(!getequipisequiped(@part)) {
    
    mes .NpcName$;
    
    mes "You're not wearing";
    
    mes "anything there that";
    
    mes "I can refine.";
    
    emotion e_an;
    
    close;
    
    }
    
    //Check if the item is refinable...
    
    else if(!getequipisenableref(@part)) {
    
    mes .NpcName$;
    
    mes "I don't think I can";
    
    mes "refine this item at all...";
    
    close;
    
    }
    
    //Check to see if the items is already +MAX_REFINE
    
    else if(getequiprefinerycnt(@part) >= .MaxRefine) {
    
    mes .NpcName$;
    
    mes "I can't refine this";
    
    mes "any more. This is as";
    
    mes "refined as it gets!";
    
    close;
    
    }
    
    // Save some upgrade data
    
    @refId = getequipid(@part); // item id
    
    @refCount = getequiprefinerycnt(@part); // refine count
    
    @refLv = getequipweaponlv(@part); // weapon level
    
    @price = .RefinePrices[@refLv]; // Refine Price
    
    @item = .RefineItems[@refLv]; // Refine Item
    
    @chance = getequippercentrefinery(@part); // Refine Chance
    
    @safe = .SafeLevels[@refLv]; // Safe limit
    
    .@refTimes = 1;
    
    if (.DisplayRefineInfo) {
    
    mes .NpcName$;
    
    mes "Here's some information: ";
    
    mes "- Safe Limit: " + @safe;
    
    ShowChanceInfo();
    
    ShowSecureInfo();
    
    next;
    
    }
    
    // Multiple refine option
    
    if (getgroupid() >= .MultipleRefineMinLv) {
    
    mes .NpcName$;
    
    mes "I can refine this one time, or multiple times,";
    
    mes "what do you say?";
    
    next;
    
    switch(select("Refine one time.:Refine multiple times.:I've changed my mind.")) {
    
    case 1:
    
    .@refTimes = 1;
    
    break;
    
    case 2:
    
    mes .NpcName$;
    
    mes "Very well, how many times";
    
    mes "do you want to refine this item?";
    
    next;
    
    do {
    
    input .@refTimes;
    
    if (.@refTimes <= 0 || (.@refTimes + @refCount) > .MaxRefine) {
    
    mes .NpcName$;
    
    mes "Hey, I can't refine this item that much!";
    
    next;
    
    mes .NpcName$;
    
    mes "Try again.";
    
    next;
    
    }
    
    else {
    
    break;
    
    }
    
    } while(true);
    
    break;
    
    case 3:
    
    mes .NpcName$;
    
    mes "Ok, come back when you need my services.";
    
    close;
    
    }
    
    }
    
    @price *= .@refTimes;
    
    mes .NpcName$;
    
    mes "To refine this I need";
    
    mes .@refTimes + " ^003366"+getitemname(@item)+"^000000 and";
    
    mes "a service fee of " + @price + " Zeny.";
    
    mes "Do you really wish to continue?";
    
    next;
    
    if (select("Yes:No") == 2) {
    
    mes .NpcName$;
    
    mes "Yeah...";
    
    mes "There's no need to";
    
    mes "rush. Take your time.";
    
    close;
    
    }
    
    else if((countitem(@item) < .@refTimes) || (Zeny < @price)) {
    
    // Can't pay
    
    mes .NpcName$;
    
    mes "You don't seem to have";
    
    mes "enough Zeny or "+getitemname(.@item)+"...";
    
    mes "Go get some more. I'll be";
    
    mes "here all day if you need me.";
    
    close;
    
    }
    
    .@refResult = false; // Refine result
    
    useSecure = -1; // secure item usage
    
    useChance = -1; // chance item usage
    
    for (.@i = 0; .@i < .@refTimes; .@i++) {
    
    @secId = GetSecure();
    
    @refCount = getequiprefinerycnt(@part); // refine count
    
    if (@secId && ConsumeSecure()) {
    
    if (!countitem(@secId)) {
    
    @secId = 0;
    
    useSecure = false;
    
    }
    
    else if (countitem(@secId) && ((.SecureAsk == 1) || (.SecureAsk == 2 && useSecure == -1))) {
    
    mes .NpcName$;
    
    mes "Seems like you have a " + getitemname(@secId) + ".";
    
    mes "Do you want to use it to protect your item?";
    
    next;
    
    if (select("Yes:No") == 1)
    
    useSecure = true;
    
    else
    
    useSecure = false;
    
    mes .NpcName$;
    
    mes "All right!";
    
    next;
    
    }
    
    }
    
    GetChanceBonus();
    
    if (@bonusId && ConsumeChance()) {
    
    if (!countitem(@bonusId)) {
    
    @bonusId = 0;
    
    @bonus = 0;
    
    useChance = false;
    
    }
    
    else if ((.ChanceAsk == 1) || (.ChanceAsk == 2 && useChance == -1)) {
    
    mes .NpcName$;
    
    mes "Seems like you have a " + getitemname(@bonusId) + ".";
    
    mes "Do you want to use it to increase your success rate?";
    
    next;
    
    if (select("Yes:No") == 1)
    
    useChance = true;
    
    else
    
    useChance = false;
    
    mes .NpcName$;
    
    mes "All right";
    
    next;
    
    }
    
    }
    
    if (((@chance + @bonus) < 100) && useSecure != true) {
    
    mes .NpcName$;
    
    mes "Oh no! If I refine this again";
    
    mes "there's a risk it could be destroyed!";
    
    mes "That means that That means that ";
    
    mes "^FF0000this item^000000, and ^FF0000anything^000000 on it";
    
    mes "^FF0000will be gone^000000.";
    
    next;
    
    mes .NpcName$;
    
    mes "Do you still want to continue?";
    
    next;
    
    if (select("Yes:No") == 2) {
    
    mes .NpcName$;
    
    mes "I completely agree...";
    
    mes "I might be a great refiner, but sometimes even I make mistakes.";
    
    close;
    
    }
    
    }
    
    .@refineRes = Refine();
    
    if (.@refineRes) {
    
    .@refineCount++;
    
    }
    
    }
    
    if (! .@refineRes) {
    
    mes .NpcName$;
    
    mes "Well, it wasn't a perfect work,";
    
    mes "but at least your items are in good shape!";
    
    close;
    
    }
    
    mes .NpcName$;
    
    .@win = rand(1,3);
    
    if (.@win == 1) {
    
    mes "Perfect!";
    
    mes "Heh heh!";
    
    mes "Once again,";
    
    mes "flawless work";
    
    mes "from the master~";
    
    } else if(.@win == 2) {
    
    mes "Success...!";
    
    mes "Yet again, my amazing";
    
    mes "talent truly dazzles";
    
    mes "and shines today.";
    
    } else {
    
    mes "Heh heh!";
    
    mes "I'm all done.";
    
    mes "No doubt, my work is";
    
    mes "to your satisfaction.";
    
    mes "Sheer, utter perfection~";
    
    }
    
    close;
    
    // Refine ()
    
    // Tries to refine item at @part
    
    function Refine {
    
    //custom checks
    
    if(getequipisequiped(@part) == 0) { // hacker has removed the item (not changed, why?)
    
    mes .NpcName$;
    
    mes "Look here... you don't have any Items on...";
    
    close;
    
    }
    
    else if(getequiprefinerycnt(@part) != @refCount || getequipid(@part) != @refId) { // hacker has changed the item
    
    mes .NpcName$;
    
    emotion e_an;
    
    mes "Wait a second...";
    
    mes "Do you think I'm stupid?!";
    
    mes "You switched the item while I wasn't looking! Get out of here!";
    
    close;
    
    }
    
    delitem @item, 1;
    
    Zeny -= @price;
    
    .@refineChance = @chance;
    
    if (useChance == true) {
    
    delitem @bonusId, 1;
    
    .@refineChance += @bonus;
    
    }
    
    if (.@refineChance <= rand(100)) {
    
    // Failed
    
    if (useSecure == true) {
    
    delitem @secId, 1;
    
    downrefitem @part, 0;
    
    mes "Unfortunaly it failed, but at least your item is in a good shape, right?";
    
    }
    
    else {
    
    .@failType = 0;
    
    if (.FailResults[0] && .FailResults[0] >= rand(100)) {
    
    // Stay as Is
    
    downrefitem @part, 0;
    
    .@failType = 1;
    
    }
    
    else if (.FailResults[1] && .FailResults[1] >= rand(100)) {
    
    // Go down one level
    
    downrefitem @part, 1;
    
    .@failType = 2;
    
    }
    
    else if (.FailResults[2] && .FailResults[2] >= rand(100)) {
    
    // Go down to +0
    
    downrefitem @part, @refCount;
    
    .@failType = 3;
    
    }
    
    else {
    
    // Destroys the item
    
    failedrefitem @part;
    
    .@failType = 4;
    
    }
    
    mes .NpcName$;
    
    emotion (!rand(5))?e_cash:e_omg;
    
    if (.@failType == 1) {
    
    // Nothing
    
    mes "Unfortunaly it failed, but at least your item is in a good shape, right?";
    
    return true;
    
    } else if(.@failType == 2) {
    
    // -1
    
    mes "Crap!";
    
    mes "It couldn't take";
    
    mes "much more tempering!";
    
    mes "Sorry about this...";
    
    } else if (.@failType == 3) {
    
    // Down to +0
    
    mes "OH! MY GOD!";
    
    mes "Damn it! Not again!";
    
    mes "I'm terribly sorry, but you know practice does make perfect.";
    
    mes "Um, right? Heh heh...";
    
    } else {
    
    // Break
    
    mes "Nooooooo!";
    
    mes "It broke!";
    
    mes "I-I'm sorry!";
    
    close;
    
    }
    
    return false;
    
    }
    
    }
    
    else {
    
    // Secure - Consume always
    
    if (useSecure == true && ((.SecureConsumeType == 1 && .@refineChance < 100) || .SecureConsumeType == 2))
    
    delitem @secId, 1;
    
    successrefitem @part;
    
    }
    
    return true;
    
    }
    
    // ShowChanceInfo()
    
    // Displays information about refine success chance and items
    
    function ShowChanceInfo {
    
    GetChanceBonus(); // sets @bonus and @bonusId
    
    if (@bonusId && ((@chance >= 100 && .ChanceConsumeType > 0) || (@chance < 100))) {
    
    .@tChance = @chance + @bonus;
    
    mes "- +" + (@refCount+1) +" Success Chance: " + (.@tChance > 100 ? 100 : .@tChance) +"%";
    
    mes "- Increase Chance Item: " + getitemname(@bonusId) + " (+"+@bonus+"%)";
    
    }
    
    else {
    
    mes "- +" + (@refCount+1) +" Success Chance: " + @chance + "%";
    
    }
    
    }
    
    // ShowSecureInfo()
    
    // Displays information about refine secure items
    
    function ShowSecureInfo {
    
    .@secId = GetSecure();
    
    if (.@secId && ((@chance >= 100 && .SecureConsumeType > 0) || (@chance < 100))) {
    
    if (.SecureType == 0) {
    
    mes "- Refine Protect Item: " + getitemname(.@secId);
    
    }
    
    else if (.SecureType == 1) {
    
    mes "- +"+@refCount+" Refine Protect Item: " + getitemname(.@secId);
    
    }
    
    }
    
    }
    
    // GetChanceBonus()
    
    // Retrieves the chance and item used
    
    // and stores in @bonus and @bonusId
    
    function GetChanceBonus {
    
    @bonus = 0; @bonusId = 0;
    
    if (.UseChanceItems) {
    
    @bonusId = .ChanceItems[@refLv * 2];
    
    if (@bonusId)
    
    @bonus = .ChanceItems[@refLv * 2 + 1];
    
    }
    
    }
    
    // <secId> GetSecure()
    
    // Retrieve the secure info for this item
    
    // Returns: the Item ID
    
    function GetSecure {
    
    if (.UseSecureItems) {
    
    if (.SecureType == 0) { // Each weapon type has one item to protect it
    
    return .SecureItems[@refLv];
    
    }
    
    else { // Each refine level + item type has one item to protect it
    
    if (@part == EQI_HAND_R || (@part == EQI_HAND_L && @wLvl > 0)) // Weapon
    
    return .SecureItems[(.@curRef * 3)];
    
    else if (@part == EQI_HEAD_TOP || @part == EQI_HEAD_MID || @part == EQI_HEAD_LOW) // Headgear
    
    return .SecureItems[(.@curRef * 3) + 1];
    
    else // Armor
    
    return .SecureItems[(.@curRef * 3) + 2];
    
    }
    
    }
    
    }
    
    // ConsumeChance()
    
    // Checks if it can consume chance item
    
    function ConsumeChance {
    
    if (.UseChanceItems) {
    
    if ((.ChanceConsumeType > 0) || (@refCount >= @safe))
    
    return true;
    
    }
    
    return false;
    
    }
    
    // ConsumeSecure()
    
    // Checks if it can consume secure item
    
    function ConsumeSecure {
    
    if (.UseSecureItems) {
    
    if ((.SecureConsumeType <= 1 && @refCount >= @safe) || .SecureConsumeType == 2)
    
    return true;
    
    }
    
    return false;
    
    }
    
    OnInit:
    
    // ======================
    
    // Basic Settings
    
    // ======================
    
    .NpcName$ = "[Refiner]"; // Name of the NPC for dialogues
    
    .UseMinLv = 0; // Minimal user group to use this NPC
    
    .MultipleRefineMinLv = 0; // Required user group to refine more than one time
    
    // at once
    
    .DisplayRefineInfo = true; // Should NPC display information about
    
    // refine (such as success chance)
    
    .UseSecureItems = true; // Enables the use of items to protect
    
    // from fails (see .SecureItems array)
    
    .UseChanceItems = true; // Enables the use of items that increase
    
    // the success chance (see .ChanceItems array)
    
    .MaxRefine = 10; // The maximum refine
    
    // The chance of each special fail result to occur.
    
    // If none of them happen, item will be destroyed.
    
    // 100 = 100%
    
    setarray .FailResults[0],
    
    0, // Stay as is
    
    0, // Go down one level
    
    0; // Go down to +0
    
    // Items used to refine by Weapon Level:
    
    setarray .RefineItems[0],
    
    985, // Elunium - Armor (Level 0)
    
    1010, // Phracon - Level 1
    
    1011, // Emveretarcon - Level 2
    
    984, // Oridecon - Level 3
    
    984; // Oridecon - Level 4
    
    // Price in Z of the refine by Weapon Level:
    
    setarray .RefinePrices[0],
    
    2000, // Armor (Level 0)
    
    50, // Level 1
    
    200, // Level 2
    
    5000, // Level 3
    
    20000; // Level 4
    
    // Safe levels by Weapon Level:
    
    setarray .SafeLevels[0],
    
    4, // Armor (Level 0)
    
    7, // Level 1
    
    6, // Level 2
    
    5, // Level 3
    
    4; // Level 4
    
    // ======================
    
    // Refine Protector
    
    // ======================
    
    if (.UseSecureItems)
    
    {
    
    // These settings are used only if .UseSecureItems is true.
    
    // How .SecureItems items will work?
    
    // 0 - Each weapon type has one item to protect it
    
    // 1 - Each refine level + item type has one item to protect it
    
    .SecureType = 1;
    
    // Ask if wants to use a secure item?
    
    // 0 - don't ask (if item is inventory, use it)
    
    // 1 - Ask before every refine attempt
    
    // 2 - Ask once for all refine attempts
    
    // (when refining multiple times, otherwise works like 1)
    
    .SecureAsk = 1;
    
    // How Secure Items are consumed?
    
    // 0 - If it will break, consume.
    
    // 1 - Consume always (except on safe refine)
    
    // 2 - Consume always (even on safe refines)
    
    .SecureConsumeType = 0;
    
    // Items used to protect the refine.
    
    // These are the items consumed when protecting the
    
    // refine, they are consumed according to .SecureConsumeType;
    
    // Use 0 to not use an item for this level.
    
    // If .SecureType is 0, each array item means one weapon Level.
    
    // If .SecureType is 1, each three array items means one refine
    
    // level, and follows the order
    
    // <weapon>, <headgear>, <armor>
    
    //
    
    // Setup the array down there according to your .SecureType above.
    
    //
    
    // Note: Officially there is no Weapon Level higher than 4,
    
    // these values exists there mainly for by refine protection,
    
    // but can be used for custom items.
    
    if (.SecureType == 0)
    
    { // If .SecureType is 0
    
    setarray .SecureItems[0],
    
    0, // Armor (Level 0)
    
    0, // Level 1
    
    0, // Level 2
    
    0, // Level 3
    
    0; // Level 4
    
    }
    
    else
    
    { // If .SecureType is 1
    
    // Item Types:
    
    // Weapn
    
    // Headgear
    
    // Armor (Every armor except headgear)
    
    setarray .SecureItems[0],
    
    6234, 6234, 6234, // +0
    
    6234, 6234, 6234, // +1
    
    6234, 6234, 6234, // +2
    
    6234, 6234, 6234, // +3
    
    6234, 6234, 6234, // +4
    
    6234, 6234, 6234, // +5
    
    6234, 6234, 6234, // +6
    
    6234, 6234, 6234, // +7
    
    6234, 6234, 6234, // +8
    
    6234, 6234, 6234; // +9
    
    }
    
    }
    
    // ===============================
    
    // Refine Chance Increase
    
    // ===============================
    
    if (.UseChanceItems)
    
    {
    
    // These settings are used only if .UseChanceItems is true.
    
    // How Chance Items are consumed?
    
    // 0 - Consume if above safe level
    
    // 1 - Consume always (even on safe refines)
    
    .ChanceConsumeType = 0;
    
    // Ask if wants to use a chance item?
    
    // 0 - don't ask (if item is inventory, use it)
    
    // 1 - Ask before every refine attempt
    
    // 2 - Ask once for all refine attempts
    
    // (when refining multiple times, otherwise works like 1)
    
    .ChanceAsk = 2;
    
    // Items used to increase the refine success and the increase, by Weapon Level.
    
    // These are the items consumed during the refine to increase
    
    // the success rate of the refine, they are consumed according to
    
    // .ChanceConsumeType;
    
    // Format: <Item ID>, <Increase>
    
    // An increase of 1 is equal to 1% to the total,
    
    // so if the success rate is 80%, it will be 81%.
    
    // Use 0 as ID to not use an item for this level.
    
    setarray .ChanceItems[0],
    
    30323, 3, // Armor (Level 0)
    
    30323, 5, // Level 1
    
    30323, 5, // Level 2
    
    30323, 5, // Level 3
    
    30323, 3; // Level 4
    
    }
    
    end;
     A configurable refiner with lots of options, like:
     - Use items to increase chance
     - Use items to avoid losing the item
     - Refine more than one time in a single click
     - Ask if player wants to use items to increase chance/protect
     - Different fail results
     
    The problem I have faced was the "- Refine more than one time in a single click"
    This function got problem ,it will ask how many times do you want to refine, if u keyin 10 times refine and it will straight away refine the item to +10 with 100% successful rate same like @refine
    I dont want this kind of function
     
    how could I change  or remove this function?
    Please help me to solve this problem.
     
    p/s: This script was taken by other resource.
  14. Please elaborate the problem you currently facing. Provide us with the following or more details if possible:

    - Run-time server console errors/warnings (if any).

    - Client side errors/warnings (if any).

    - Any edits to scripts or source mods (if any).

    Okay my problem is that Im using a script that from other topic and Im trying to use this script.

    After I added this NPC script to my server I realize that the NPC function got a little problem.

     

    Problem facing:

    1.This is a Bloody Branch Quest NPC.

    2. The npc function is like this "1 bloody branch =100 Dead Branch + 10M zeny

    3.If you got all the requirement items(100 Dead branch (Item id 604) + 10M zeny), the npc will gv 1 Bloody Branch(12103))

    4.After u claim for your Bloody Branch, the Dead Branch will disappear for sure and the 10m zeny will decrease from your total Zeny. But the zeny still remind the same.

     

    So how to do fix the zeny problem? can teach me?

     

    And I would like to add another require item for the BB Quest. That'all that I want to say.. =)

  15. mes "1 Bloody Branch = 100 Dead Branch + 10mZ";
    next;
    if(countitem(604) < 100 || Zeny < 10000000) {
    mes "Not enough requirements";
    close;
    }
    mes "Here you go";
    delitem 604,100;
    set Zeny,10000000;
    getitem 12103,1;
    close;
    } 

    Can I know how do I add more quest items needed?

    mes "1 Bloody Branch = 100 Dead Branch + 10mZ + 100 Apples";
    next;
    if(countitem(604) < 100 || countitem(512) < 100 || Zeny < 10000000) {
    mes "Not enough requirements";
    close;
    }
    mes "Here you go";
    delitem 604,100;
    delitem 512,100
    set Zeny,10000000;
    getitem 12103,1;
    close; 
    }
    

    And I added 1 more item 512 but it does function well and 1 more thing is the zeny doesn't decrease after i claim for my items....

  16. Replace 

    set #CASHPOINTS, #CASHPOINTS+(.@j*1);
    

    with

    set #CASHPOINTS, #CASHPOINTS + (.@j / 2 );
    

    Because the value of .@j -> is 2 and you want to only give half of the number of TCG to be cash points right?

     

    problem solved!! thank you... xD

  17. prontera,140,199,5 script Cash Point Exchanger 497,{
    
    set .@i, countitem(7227);
    
    mes "[TCG Exchanger]";
    
    mes "You have ^0055FF"+.@i+" TCG^000000.";
    
    if (!.@i) { mes "Please come back later."; close; }
    
    mes "I can trade ^FF00002 TCG^000000 for ^FF00001 Cash Points^000000.";
    
    next;
    
    if(select(" - Trade: - ^777777Leave^000000")==2) close;
    
    mes "[TCG Exchanger]";
    
    mes "How many would you like to exchange?";
    
    next;
    
    input .@j;
    
    mes "[TCG Exchanger]";
    
    if (.@j < 2 || .@j > countitem(7227)) { mes "That's an invalid amount."; close; }
    
    mes "Are you sure you want to exchange ^0055FF"+.@j+" TCG^000000?";
    
    if(select(" - Yes: - No")==2) close;
    
    mes " ";
    
    delitem 7227, .@j;
    
    set #CASHPOINTS, #CASHPOINTS+(.@j*1);
    
    mes "You now have "+#CASHPOINTS+" Cash Points.";
    
    close;
    
    }

    //This wasn't my script, I took from other people and the original script was 1 TCG to 5 Cash Point ( it worked perfectly) but I changed the TCG exchange rate: 2 TCG card to 1 cash point. It became 2 TCG card to 2 Cash point. Did I change wrong thing inside it?

    Sorry for disturb and my bad english. =)

     

    Im new to here* nice to meet y'all

×
×
  • Create New...