• 0
Sign in to follow this  
DemonChuck

Custom Enchanter

Question

I have Different kinds of orbs(enchant stone in my server)
i want to make a simple Enchant NPC that you can put an enchant stone by 100% chance Selected gears and armors
here are my orbs

//Classes
35934,Swordsman,Swordsman,3,20,,10,,,,,,,,,,,,,{ bonus bStr,1; },{},{}
35935,Mage,Mage,3,20,,10,,,,,,,,,,,,,{ bonus bInt,1; },{},{}
35936,Acolyte,Acolyte,3,20,,10,,,,,,,,,,,,,{ bonus bVit,1; },{},{}
35937,Archer,Archer,3,20,,10,,,,,,,,,,,,,{ bonus bDex,1; },{},{}
35938,Thief,Thief,3,20,,10,,,,,,,,,,,,,{ bonus bAgi,1; },{},{}
35939,Merchant,Merchant,3,20,,10,,,,,,,,,,,,,{ bonus bLuk,1; },{},{}
//Elementals
35940,Fire,Fire,3,20,,10,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Fire,3; },{},{}
35941,Water,Water,3,20,,10,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Water,3; },{},{}
35942,Earth,Earth,3,20,,10,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Earth,3; },{},{}
35943,Wind,Wind,3,20,,10,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Wind,3; },{},{}
35944,Dark,Dark,3,20,,10,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Dark,3; },{},{}
35945,Holy,Holy,3,20,,10,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Holy,3; },{},{}
35946,Ghost,Ghost,3,20,,10,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Ghost,3; },{},{}
35947,Poison,Poison,3,20,,10,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Poison,3; },{},{}

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 1

You can try this script by Sehrentos, it's one of the most configurable enchanters I've seen:

//===== rAthena Script =======================================
//= Enchant NPC
//===== By: ==================================================
//= Sehrentos
//===== Current Version: =====================================
//= 1.2
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= Enchant player's equipment. Support multiple enchants.
//===== Additional Comments: =================================
//= 1.0 Initial script.
//= 1.1 Remove enchant option.
//= 1.2 Added .max_enchant option.
//============================================================
// shop/cashshop/itemshop/pointshop
-	shop	enc_atk	-1,501:300;
-	shop	enc_def	-1,501:300;
-	shop	enc_stats	-1,501:300;

prt_in,65,68,4	script	Enchant#prt1	4_M_MERCAT1,{
	disable_items;
	switch(select("Attack:Defence:Stats:Remove")) {
		case 1: @shop_name$ = "enc_atk"; break;
		case 2: @shop_name$ = "enc_def"; break;
		case 3: @shop_name$ = "enc_stats"; break;
		case 4: callsub S_Remove; break;
		default: end;
	}
	callshop @shop_name$, 1;
	npcshopattach @shop_name$;
	end;

OnInit:
	// Settings: shop names, currencies, items, prices
	.max_enchant = 2; // Max amount of enchants 0-4
	setarray .shop_name$[0],   "enc_atk", "enc_def", "enc_stats";
	setarray .shop_currency$[0],"Zeny",    "Zeny",    "Zeny";
	setarray .enc_atk_id[0],    4760, 4761, 4806, 4815, 4814, 4813, 4812, 4826, 4827, 4828, 4829, 4830,  4831, 4819, 4766, 4767,4764,4765, 4807, 4842, 4818, 4817, 4816, 4843, 4844, 4811, 4810, 4809, 4808, 4820, 4821, 4822, 4823, 4824,  4825, 4832, 4833, 4834, 4835, 4836, 4837, 4838, 4839, 4840,  4841;
	setarray .enc_atk_price[0],10000,20000,30000,10000,20000,30000,40000,50000,60000,70000,80000,90000,100000,10000,20000,30000,5000,7000,10000,20000,10000,20000,30000,40000,50000,10000,20000,30000,40000,50000,60000,70000,80000,90000,100000,10000,20000,30000,40000,50000,60000,70000,80000,90000,100000;
	setarray .enc_def_id[0],    4805, 4850, 4851, 4852,4762, 4763,4786,4787,4788,4789, 4790,4791,4792,4793, 4794,4795,4796,4797,4798,4799,4800,4801, 4802;
	setarray .enc_def_price[0],10000,20000,40000,60000,5000,12000,2000,4000,6000,8000,10000,3000,5000,9000,12000,1000,2000,3000,4000,5000,2500,5000,10000;
	setarray .enc_stats_id[0],   4700,4710,4720,4730,4740,4750, 4701,4711,4721,4731,4741,4751, 4702,4712,4722,4732,4742,4752, 4703,4713,4723,4733,4743,4753, 4704,4714,4724,4734,4744,4754, 4705,4715,4725,4735,4745,4755, 4706,4716,4726,4736,4746,4756, 4707,4717,4727,4737,4747,4757, 4708,4718,4728,4738,4748,4758, 4709, 4719, 4729, 4739, 4749, 4759;
	setarray .enc_stats_price[0],1500,1500,1500,1500,1500,1500, 2500,2500,2500,2500,2500,2500, 3500,3500,3500,3500,3500,3500, 4500,4500,4500,4500,4500,4500, 5500,5500,5500,5500,5500,5500, 6500,6500,6500,6500,6500,6500, 7500,7500,7500,7500,7500,7500, 8500,8500,8500,8500,8500,8500, 9500,9500,9500,9500,9500,9500, 10500,10500,10500,10500,10500,10500;

	// Load shop items
	for([email protected] = 0; [email protected] < getarraysize(.shop_name$); [email protected]++) {
		[email protected]$ = .shop_name$[[email protected]];
		deletearray [email protected][0],getarraysize([email protected]);
		deletearray [email protected][0],getarraysize([email protected]);
		copyarray [email protected][0], getd("."[email protected]$+"_id[0]"), getarraysize(getd("."[email protected]$+"_id"));
		copyarray [email protected][0], getd("."[email protected]$+"_price[0]"), getarraysize(getd("."[email protected]$+"_price"));
		npcshopdelitem [email protected]$,501;// Remove apple
		for([email protected] = 0; [email protected] < getarraysize([email protected]); [email protected]++) {
			npcshopadditem [email protected]$, [email protected][[email protected]], [email protected][[email protected]];
		}
	}
	end;

OnSellItem:
	end;

OnBuyItem:
	[email protected]_count = getarraysize(@bought_nameid);
	if([email protected]_count < 1) end;
	// Get shop data by @shop_name$
	[email protected]_index = inarray(.shop_name$[0], @shop_name$);
	if([email protected]_index == -1 || getarraysize(.shop_name$) < 1) {
		message strcharinfo(0), "Shop was not found!";
		debugmes "Incorrect shop array detected in '"[email protected]_name$+"'! FIXME!";
		end;
	}
	copyarray [email protected]_id[0], getd("."[email protected]_name$+"_id"), getarraysize(getd("."[email protected]_name$+"_id"));
	copyarray [email protected]_price[0], getd("."[email protected]_name$+"_price"), getarraysize(getd("."[email protected]_name$+"_price"));

	for([email protected] = 0; [email protected] < [email protected]_count; [email protected]++) {
		[email protected] = inarray([email protected]_id[0], @bought_nameid[[email protected]]);
		if([email protected] == -1) {
			message strcharinfo(0), "Price was not found!";
			debugmes "Incorrect price array detected in '"[email protected]_name$+"'! FIXME!";
			end;
		}
		setarray [email protected]_cost[getarraysize([email protected]_cost)],[email protected]_price[[email protected]]*@bought_quantity[[email protected]];
		for ([email protected] = 0; [email protected] < @bought_quantity[[email protected]]; [email protected]++) {
			setarray [email protected][getarraysize([email protected])],@bought_nameid[[email protected]];
		}
	}

	// Count total cost
	for([email protected] = 0; [email protected] < [email protected]_count; [email protected]++) {
		[email protected]_cost = [email protected]_cost + [email protected]_cost[[email protected]];
	}

	// Currency check
	if(.shop_currency$[[email protected]_index] == "Zeny" && Zeny < [email protected]_cost) {
		message strcharinfo(0), "("[email protected]_cost+") Not enough "+.shop_currency$[[email protected]_index]+"!";
		end;
	}
	// Other currency checks...

	// Select equipment (EQI)
	mes "[ " + strnpcinfo(1) + " ]";
	mes "Please select which equipment you want me to enchant.";
	[email protected] = callsub(S_SelectPosition);

	// Check if position has equipment
	if(!getequipisequiped([email protected])) {
		clear;
		mes "[ " + strnpcinfo(1) + " ]";
		mes "You don't have anything equipped there!";
		close;
	}

	[email protected]_id = getequipid([email protected]); //Equipped item id
	[email protected] = getequiprefinerycnt([email protected]); //Equipped refine value
	[email protected] = getitemslots([email protected]_id);
	setarray [email protected][0],
		getequipcardid([email protected],0),
		getequipcardid([email protected],1),
		getequipcardid([email protected],2),
		getequipcardid([email protected],3);
	[email protected]_count = getarraysize([email protected]);
	[email protected]_count = getarraysize([email protected]);

	/*if([email protected]_count > .max_enchant) {
		clear;
		mes "[ " + strnpcinfo(1) + " ]";
		mes "This item has been crafted or produced and cannot be enchanted.";
		close;
	}*/
	// Check for enabled refinement
	/*if(!getequipisenableref([email protected])) {
		clear;
		mes "[ " + strnpcinfo(1) + " ]";
		mes "I don't think I can enchant this item at all.";
		mes "Sorry...";
		close;
	}*/

	// Add all card slots
	for([email protected] = 0; [email protected] < [email protected]; [email protected]++) {
		setarray [email protected][getarraysize([email protected])], ([email protected][[email protected]] > 0 ? [email protected][[email protected]] : -1);
	}
	// Add previous enchants
	for([email protected] = [email protected]; [email protected] < [email protected]_count; [email protected]++) {
		if([email protected][[email protected]] > 0) {
			setarray [email protected][getarraysize([email protected])], [email protected][[email protected]];
		}
	}
	// Add new enchants
	for([email protected] = 0; [email protected] < [email protected]_count; [email protected]++) {
		setarray [email protected][getarraysize([email protected])], [email protected][[email protected]];
	}

	// Check for produced/crafted items 254,255
	if([email protected][0] == CARD0_FORGE || [email protected][0] == CARD0_CREATE) {
		clear;
		mes "[ " + strnpcinfo(1) + " ]";
		mes "This item has been crafted or produced and cannot be enchanted.";
		close;
	}

	// Has card sockets 4 - slots
	if([email protected]_count > (.max_enchant - [email protected])) {
		clear;
		mes "[ " + strnpcinfo(1) + " ]";
		mes "This equipment can hold "+(.max_enchant - [email protected])+" enchant.";
		close;
	}

	// Has free sockets
	if(([email protected] + [email protected]_count) > .max_enchant || getarraysize([email protected]) > .max_enchant) {
		clear;
		mes "[ " + strnpcinfo(1) + " ]";
		mes "This item does not have enough free sockets to enchant.";
		close;
	}

	// Confirm the setup
	clear;
	mes "[ " + strnpcinfo(1) + " ]^6E6E6E Setup^000000";
	for([email protected] = 0; [email protected] < [email protected]_count; [email protected]++) {
		mes "Enchant: "+ getitemname([email protected][[email protected]]);
	}
	mes "Equipment: "+ getitemname(getequipid([email protected]));
	mes "Cost: "[email protected]_cost+" "+.shop_currency$[[email protected]_index]+".";
	if (select("Create enchant:Cancel") != 1) {
		clear;
		mes "[ " + strnpcinfo(1) + " ]";
		mes "Farewell.";
		close;
	}

	// Create selected enchant
	clear;
	mes "[ " + strnpcinfo(1) + " ]^6E6E6E Done^000000";
	mes "Here is your enchanted equipment!";
	delequip([email protected]);
	specialeffect2 154;

	if(.shop_currency$[[email protected]_index] == "Zeny") {
		Zeny = Zeny - [email protected]_cost;
	}

	getitem2 [email protected]_id, 1, 1, [email protected], 0,
		([email protected][0] > 0 ? [email protected][0] : 0),
		([email protected][1] > 0 ? [email protected][1] : 0),
		([email protected][2] > 0 ? [email protected][2] : 0),
		([email protected][3] > 0 ? [email protected][3] : 0);
	close;

S_Remove:
	// Select equipment (EQI)
	mes "[ " + strnpcinfo(1) + " ]";
	mes "Please select which equipment you want me to work on.";
	[email protected] = callsub(S_SelectPosition);

	// Check if position has equipment
	if(!getequipisequiped([email protected])) {
		clear;
		mes "[ " + strnpcinfo(1) + " ]";
		mes "You don't have anything equipped there!";
		close;
	}

	[email protected]_id = getequipid([email protected]); //Equipped item id
	[email protected] = getequiprefinerycnt([email protected]); //Equipped refine value
	[email protected] = getitemslots([email protected]_id);
	setarray [email protected][0],
		getequipcardid([email protected],0),
		getequipcardid([email protected],1),
		getequipcardid([email protected],2),
		getequipcardid([email protected],3);
	[email protected]_count = getarraysize([email protected]);
	[email protected]_count = getarraysize([email protected]);

	// Create selected item
	clear;
	mes "[ " + strnpcinfo(1) + " ]^6E6E6E Done^000000";
	mes "Here is your equipment back!";
	delequip([email protected]);
	specialeffect2 169;

	getitem2 [email protected]_id, 1, 1, [email protected], 0,0,0,0,0;
	for([email protected]=0; [email protected]<[email protected]; [email protected]++) {
		if([email protected][[email protected]] > 0)
			getitem [email protected][[email protected]], 1;
	}
	close;

S_SelectPosition:
	setarray [email protected][1], EQI_HEAD_TOP, EQI_HEAD_MID, EQI_HEAD_LOW, EQI_ARMOR, EQI_HAND_L, EQI_HAND_R, EQI_GARMENT, EQI_SHOES, EQI_ACC_L, EQI_ACC_R;
	setarray [email protected]$[1], "Top", "Mid", "Low", "Armor", "Left Hand", "Right Hand", "Garment", "Shoes", "Accessory L", "Accessory R";
	setarray [email protected][1], 1, 1, 1, 1, 1, 1, 1, 1, 1, 1; // 1=allow, 0=deny
	for([email protected]=1; [email protected]<getarraysize([email protected]); [email protected]++) {
		if([email protected][[email protected]] && getequipisequiped([email protected][[email protected]])) {
			[email protected]$ = [email protected]$ + [email protected]$[[email protected]] + "-[" + getequipname([email protected][[email protected]]) + "]";
		}
		[email protected]$ = [email protected]$ + ":";
	}
	[email protected] = [email protected][select([email protected]$)];
	return [email protected];
}

 

  • Upvote 1
  • MVP 2

Share this post


Link to post
Share on other sites
  • 0
Posted (edited)

@n0tttt how to make it use proof of donation instead of zeny?

Nevermind i figured out how to change it. Thanks for this script @n0tttt

Update: I figured out how to change it to itemshop but it didn't work like the way it was. 

Edited by walter307

Share this post


Link to post
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.

Loading...
Sign in to follow this