Jump to content
  • 0

Advanced refiner issue


Santafe

Question


  • Group:  Members
  • Topic Count:  91
  • Topics Per Day:  0.02
  • Content Count:  325
  • Reputation:   34
  • Joined:  06/01/13
  • Last Seen:  

Hey everyone. i have an issue with this script could someone solve it? it shows i have an unknown syntanx in this line:

callfunc "refinemainx","Advanced Hollgrehenn",1;

I use rAthena eamod version and heres the main script i tried to use:

//<?> -o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o \\
//          Blacksmith/Card Removal Npc V.2.0         \\
//                   by Luther                        \\
//<?> -o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o \\
//          Blacksmith/Card Removal Npc V.2.0         \\
//                   by Luther                        \\
// Credit To : Mytzer,TyrNemisis,ShadowMaster and     \\
// who ever made the Item Identifyer Deckard Cain.    \\
// Whoms Scripts were used in making this npc.        \\
// Also ToastOfDoom and Chachi911 for helping Debug it\\
// (V.2.0 Uses the original eAthena Refine Script that\\ 
//can have its rates configured in the refine_db.txt) \\
// -o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o \\
prontera,166,231,3	script	Refiner	85,{
	set .soundef_number, .soundef_number + 1;

	switch (.soundef_number)
	{

		case 1:
		soundeffect "hollen2.wav",0;
		break;

		case 2:
		soundeffect "hollen3.wav",0;
		break;

		case 3:
		soundeffect "hollen4.wav",0;
		break;

		case 4:
		soundeffect "hollen5.wav",0;
		break;

	}

	if (.soundef_number >= 3)
	{
		set .soundef_number, 0;
	}

	end;

}
callfunc "refinemainx","Advanced Hollgrehenn",1;
	end;
    }
//============================================================
//= Main Refiner Function
//============================================================
//= To allow auto safe refining/multiple refining set the
//= 0 after Melchior to '1' in the function call.
//= To Change the Name of the NPC, just Edit it in the
//= Beginning of the Script and the Melchior part of the
//= Call function. 
//============================================================
function	script	refinemainx	{
	set .@features,getarg(1);
  mes "[" + getarg(0) + "]";
	mes "I can Refine, Extract Cards, Identify Items, and Repair Broken Items ^FF0000which of my services are you interested in?^000000";
	menu "Refining",L_Refine,"Item Repair",L_Repair;
	
  L_Refine:
  mes "refining eh?";
  next;
  mes "[" + getarg(0) + "]";
	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( set .@i,1; .@i <= 10; set .@i,.@i+1 )
	{
		if( getequipisequiped(.@i) )
			set .@menu$, .@menu$ + .@position$[.@i] + "-" + "[" + getequipname(.@i) + "]";

		set .@menu$, .@menu$ + ":";
	}
	set .@part,select(.@menu$);
	if(!getequipisequiped(.@part)) {
		mes "[" + getarg(0) + "]";
		mes "You're not wearing";
		mes "anything there that";
		mes "I can refine.";
		emotion 6;
		close;
	}
	//Check if the item is refinable...
	if(!getequipisenableref(.@part)) {
		mes "[" + getarg(0) + "]";
		mes "I don't think I can";
		mes "refine this item at all...";
		close;
	}
	//Check if the item is identified... (Don't know why this is in here... but kept it anyway)
	if(!getequipisidentify(.@part)) {
		mes "[" + getarg(0) + "]";
		mes "You can't refine this";
		mes "if you haven't appraised";
		mes "it first. Make sure your";
		mes "stuff is identified before";
		mes "I can refine it.";
		close;
	}
	//Check to see if the items is already +10
	if(getequiprefinerycnt(.@part) >= 10) {
		mes "[" + getarg(0) + "]";
		mes "I can't refine this";
		mes "any more. This is as";
		mes "refined as it gets!";
		close;
	}
	set .@refineitemid, getequipid(.@part); // save id of the item
	set .@refinerycnt, getequiprefinerycnt(.@part); //save refinery count
	switch(getequipweaponlv(.@part)){
	case 0: 	//Refine Armor
		set .@price,2000;
		set .@material,985;
		set .@safe,4;
		break;
	case 1: 	//Refine Level 1 Weapon
		set .@price,50;
		set .@material,1010;
		set .@safe,7; 
		break;
	case 2: 	//Refine Level 2 Weapon
		set .@price,200;
		set .@material,1011;
		set .@safe,6; 
		break;
	case 3: 	//Refine Level 3 Weapon
		set .@price,5000;
		set .@material,984;
		set .@safe,5; 
		break;
	case 4: 	//Refine Level 4 Weapon
		set .@price,20000;
		set .@material,984;
		set .@safe,4; 
		break;
	case 5: 	//Refine other stuff?
		set .@price,2000;
		set .@material,985;
		set .@safe,4; 
		break;
	}
	if(.@features != 1) {
		mes "[" + getarg(0) + "]";
		mes "To refine this I need";
		mes "one ^003366"+getitemname(.@material)+"^000000 and";
		mes "a service fee of " + .@price + " Zeny.";
		mes "Do you really wish to continue?";
		next;
		if(select("Yes:No") == 2){
			mes "[" + getarg(0) + "]";
			mes "Yeah...";
			mes "There's no need to";
			mes "rush. Take your time.";
			close;
		}
		if(getequippercentrefinery(.@part) < 100) {
			mes "[" + getarg(0) + "]";
			mes "Oh no! If I continue to";
			mes "refine this, there's a risk it could";
			switch(.@material) {
			case 985:
				mes "be destroyed! That means that ^FF0000this equipment^000000, and ^FF0000any cards^000000 or special properties added to this armor, ^FF0000will be gone^000000.";
				break;
			default:
				mes "be destroyed, and you'd ^FF0000lose the weapon^000000, any ^FF0000cards in the weapon^000000,";
				mes "or any added special properties.";
				break;
			}
			next;
			mes "["+getarg(0)+"]";
			mes "I can't make it any clearer.";
			mes "Once a weapon is destroyed,";	
			mes "there's no getting it back.";
			mes "You really have a chance to";
			mes "^FF0000lose this weapon^000000 forever.";
			mes "Do you still want to refine?";
			next;
			if(select("Yes:No") == 2){
				mes "[" + getarg(0) + "]";
				mes "I completely agree...";
				mes "I might be a great refiner, but sometimes even I make mistakes.";
				close;
			}
		}
		if((countitem(.@material) < 1) || (Zeny < .@price)) {
			mes "[" + getarg(0) + "]";
			mes "You don't seem to have";
			mes "enough Zeny or "+getitemname(.@material)+"...";
			mes "Go get some more. I'll be";
			mes "here all day if you need me.";
			close;
		}
		set Zeny,Zeny-.@price;
		delitem .@material,1;
		if(getequipisequiped(.@part) == 0) { // hacker has removed the item (not changed, why?)
			mes "[" + getarg(0) + "]";
			mes "Look here... you don't have any Items on...";
			close;
		}
		if(getequiprefinerycnt(.@part) != .@refinerycnt || getequipid(.@part) != .@refineitemid) { // hacker has changed the item
			mes "[" + getarg(0) + "]";
			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;
		}
		if(getequippercentrefinery(.@part) <= rand(100)) {
			failedrefitem .@part;
			mes "[" + getarg(0) + "]";
			set .@emo,rand(1,5);
			if (.@emo == 1) {
				Emotion e_cash;
			} else {
				Emotion e_swt;
			}
			set .@lose,rand(1,3);
			if (.@lose == 1) {
				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 if(.@lose == 2) {
				mes "Nooooooo!";
				mes "It broke!";
				mes "I-I'm sorry!";
			} else {
				mes "Crap!";
				mes "It couldn't take";
				mes "much more tempering!";
				mes "Sorry about this...";
			}
			close;
		}
		mes "["+getarg(0)+"]";
		successrefitem .@part;
		Emotion e_heh;
		set .@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;
	}

// New Refining Functions ========================
	if(getequiprefinerycnt(.@part) < .@safe) {
		mes "[" + getarg(0) + "]";
		mes "I can refine this to the safe limit or a desired number of times... it's your choice...";
		next;
		set .@menu2,select("To the safe limit please.","I'll decide how many times.","I've changed my mind...");
	} else set .@menu2,2;
	switch(.@menu2){
	case 1: 
		set .@refinecnt,.@safe - getequiprefinerycnt(.@part);
		break;
	case 2:
		next;
		mes "[" + getarg(0) + "]";
		mes "So how many times would you like me to refine your item?";
		next;
		input .@refinecnt;
		set .@refinecheck,.@refinecnt + getequiprefinerycnt(.@part);
		if (.@refinecnt < 1 || .@refinecheck > 10) {
			mes "[" + getarg(0) + "]";
			mes "I can't refine this item that many times.";
			close;
		}
		if(.@refinecheck > .@safe) {
			set .@refinecheck,.@refinecheck - .@safe;
			mes "[" + getarg(0) + "]";
			mes "This will try to refine the equipment " + .@refinecheck + " times past the safe limit. Your equipment may be destroyed... is that ok?";
			next;
			if(select("Yes...","No...") == 2){
				mes "[" + getarg(0) + "]";
				mes "You said so..Hmm so be it...";
				close;
			}
		}
		break;
	case 3:
		next;
		mes "[" + getarg(0) + "]";
		mes "You said so..Hmm so be it...";
		close;
	}
	set .@fullprice,.@price * .@refinecnt;
	mes "[" + getarg(0) + "]";
	mes "That will cost you " + .@refinecnt + " " + getitemname(.@material) + " and " + .@fullprice + " Zeny. Is that ok?";
	next;
	if(select("Yes","No...") == 2){
		mes "[" + getarg(0) + "]";
		mes "You said so..Hmm so be it...";
		close;
	}
	if(countitem(.@material) < .@refinecnt || Zeny < .@fullprice) {
		mes "[" + getarg(0) + "]";
		mes "Is that all you got? Unfortunately I can't work for you at a lower price. Try putting yourself in my shoes.";
		close;
	}
	set Zeny,Zeny - .@fullprice;
	delitem .@material,.@refinecnt;
	while(.@refinecnt){
		if (getequipisequiped(.@part) == 0) {
			mes "[" + getarg(0) + "]";
			mes "Look here... you don't have any Items on...";
			close;
		}
		if (getequipid(.@part) != .@refineitemid || (.@menu2 == 1 && getequippercentrefinery(.@part) < 100)) {
			mes "[" + getarg(0) + "]";
			mes "Clan... No, but Did you imagine I could be so stupid !?!";
			mes "You have changed it...";
			mes "Go out before I stun you with my Hammer!!!";
			close;
		} 
		mes "Clang, clang!!!";
		if(.@menu2 == 2 && getequippercentrefinery(.@part) <= rand(100)) {
			failedrefitem .@part;
			emotion 23;
			mes "[" + getarg(0) + "]";
			mes "WAHHHH!!! I'm so sorry... I warned you this could happen...";
			set .@refinecnt,.@refinecnt - 1;
			if(.@refinecnt == 0) close;
			mes "Here's the unused Zeny and Material back...";
			getitem .@material,.@refinecnt;
			set .@fullprice,.@refinecnt * .@price;
			set Zeny,Zeny + .@fullprice;
			close;
		}
		successrefitem .@part;
		emotion 21;
		set .@refinecnt,.@refinecnt - 1;
		next;
	}
	mes "[" + getarg(0) + "]";
	mes "All finished... Come again soon.";
	close;		

L_Repair:
mes "Repairing it is!";
next;
if (getbrokenid(1) == 0) goto L_Waste;
mes "[" + getarg(0) + "]";
mes "Each repair costs 2000 zeny would you like to repair an item now?";
menu "Yes",L_RepairItem,"No",L_Bye;

L_RepairItem:
if(zeny < (2000)) goto L_NoZeny;
mes "Select the item to repair from the menu.";
set @choice, select(getitemname(getbrokenid(1)), getitemname(getbrokenid(2)), getitemname(getbrokenid(3)), getitemname(getbrokenid(4)), getitemname(getbrokenid(5)), getitemname(getbrokenid(6)), getitemname(getbrokenid(7)), getitemname(getbrokenid(8)), getitemname(getbrokenid(9)), getitemname(getbrokenid(10)));

set zeny, zeny - 2000;
repair(@choice);
goto L_Repaired;

L_Waste:
mes "[" + getarg(0) + "]";
mes "Do not waste my time, you have no items in need of repair.";
close;
L_Repaired:
mes "[" + getarg(0) + "]";
mes "Your item has been repaired, please be more careful.";
close;

}

Hope someone can help :/ Really need this one X_X Thanks in advance <3

Link to comment
Share on other sites

3 answers to this question

Recommended Posts


  • Group:  Members
  • Topic Count:  31
  • Topics Per Day:  0.01
  • Content Count:  283
  • Reputation:   31
  • Joined:  07/08/14
  • Last Seen:  

Guess that's how it should be:

//<?> -o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o \\
//          Blacksmith/Card Removal Npc V.2.0         \\
//                   by Luther                        \\
//<?> -o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o \\
//          Blacksmith/Card Removal Npc V.2.0         \\
//                   by Luther                        \\
// Credit To : Mytzer,TyrNemisis,ShadowMaster and     \\
// who ever made the Item Identifyer Deckard Cain.    \\
// Whoms Scripts were used in making this npc.        \\
// Also ToastOfDoom and Chachi911 for helping Debug it\\
// (V.2.0 Uses the original eAthena Refine Script that\\ 
//can have its rates configured in the refine_db.txt) \\
// -o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o \\

prontera,166,231,3	script	Refiner	85,{
	set .soundef_number, .soundef_number + 1;
 
	switch (.soundef_number)
	{
 
		case 1:
		soundeffect "hollen2.wav",0;
		break;
 
		case 2:
		soundeffect "hollen3.wav",0;
		break;
 
		case 3:
		soundeffect "hollen4.wav",0;
		break;
 
		case 4:
		soundeffect "hollen5.wav",0;
		break;
 
	}
 
	if (.soundef_number >= 3)
	{
		set .soundef_number, 0;
	}
 
	end;
 

callfunc "refinemainx","Advanced Hollgrehenn",1;
	end;
    }
//============================================================
//= Main Refiner Function
//============================================================
//= To allow auto safe refining/multiple refining set the
//= 0 after Melchior to '1' in the function call.
//= To Change the Name of the NPC, just Edit it in the
//= Beginning of the Script and the Melchior part of the
//= Call function. 
//============================================================
function	script	refinemainx	{
	set .@features,getarg(1);
  mes "[" + getarg(0) + "]";
	mes "I can Refine, Extract Cards, Identify Items, and Repair Broken Items ^FF0000which of my services are you interested in?^000000";
	menu "Refining",L_Refine,"Item Repair",L_Repair;
	
  L_Refine:
  mes "refining eh?";
  next;
  mes "[" + getarg(0) + "]";
	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( set .@i,1; .@i <= 10; set .@i,.@i+1 )
	{
		if( getequipisequiped(.@i) )
			set .@menu$, .@menu$ + .@position$[.@i] + "-" + "[" + getequipname(.@i) + "]";
 
		set .@menu$, .@menu$ + ":";
	}
	set .@part,select(.@menu$);
	if(!getequipisequiped(.@part)) {
		mes "[" + getarg(0) + "]";
		mes "You're not wearing";
		mes "anything there that";
		mes "I can refine.";
		emotion 6;
		close;
	}
	//Check if the item is refinable...
	if(!getequipisenableref(.@part)) {
		mes "[" + getarg(0) + "]";
		mes "I don't think I can";
		mes "refine this item at all...";
		close;
	}
	//Check if the item is identified... (Don't know why this is in here... but kept it anyway)
	if(!getequipisidentify(.@part)) {
		mes "[" + getarg(0) + "]";
		mes "You can't refine this";
		mes "if you haven't appraised";
		mes "it first. Make sure your";
		mes "stuff is identified before";
		mes "I can refine it.";
		close;
	}
	//Check to see if the items is already +10
	if(getequiprefinerycnt(.@part) >= 10) {
		mes "[" + getarg(0) + "]";
		mes "I can't refine this";
		mes "any more. This is as";
		mes "refined as it gets!";
		close;
	}
	set .@refineitemid, getequipid(.@part); // save id of the item
	set .@refinerycnt, getequiprefinerycnt(.@part); //save refinery count
	switch(getequipweaponlv(.@part)){
	case 0: 	//Refine Armor
		set .@price,2000;
		set .@material,985;
		set .@safe,4;
		break;
	case 1: 	//Refine Level 1 Weapon
		set .@price,50;
		set .@material,1010;
		set .@safe,7; 
		break;
	case 2: 	//Refine Level 2 Weapon
		set .@price,200;
		set .@material,1011;
		set .@safe,6; 
		break;
	case 3: 	//Refine Level 3 Weapon
		set .@price,5000;
		set .@material,984;
		set .@safe,5; 
		break;
	case 4: 	//Refine Level 4 Weapon
		set .@price,20000;
		set .@material,984;
		set .@safe,4; 
		break;
	case 5: 	//Refine other stuff?
		set .@price,2000;
		set .@material,985;
		set .@safe,4; 
		break;
	}
	if(.@features != 1) {
		mes "[" + getarg(0) + "]";
		mes "To refine this I need";
		mes "one ^003366"+getitemname(.@material)+"^000000 and";
		mes "a service fee of " + .@price + " Zeny.";
		mes "Do you really wish to continue?";
		next;
		if(select("Yes:No") == 2){
			mes "[" + getarg(0) + "]";
			mes "Yeah...";
			mes "There's no need to";
			mes "rush. Take your time.";
			close;
		}
		if(getequippercentrefinery(.@part) < 100) {
			mes "[" + getarg(0) + "]";
			mes "Oh no! If I continue to";
			mes "refine this, there's a risk it could";
			switch(.@material) {
			case 985:
				mes "be destroyed! That means that ^FF0000this equipment^000000, and ^FF0000any cards^000000 or special properties added to this armor, ^FF0000will be gone^000000.";
				break;
			default:
				mes "be destroyed, and you'd ^FF0000lose the weapon^000000, any ^FF0000cards in the weapon^000000,";
				mes "or any added special properties.";
				break;
			}
			next;
			mes "["+getarg(0)+"]";
			mes "I can't make it any clearer.";
			mes "Once a weapon is destroyed,";	
			mes "there's no getting it back.";
			mes "You really have a chance to";
			mes "^FF0000lose this weapon^000000 forever.";
			mes "Do you still want to refine?";
			next;
			if(select("Yes:No") == 2){
				mes "[" + getarg(0) + "]";
				mes "I completely agree...";
				mes "I might be a great refiner, but sometimes even I make mistakes.";
				close;
			}
		}
		if((countitem(.@material) < 1) || (Zeny < .@price)) {
			mes "[" + getarg(0) + "]";
			mes "You don't seem to have";
			mes "enough Zeny or "+getitemname(.@material)+"...";
			mes "Go get some more. I'll be";
			mes "here all day if you need me.";
			close;
		}
		set Zeny,Zeny-.@price;
		delitem .@material,1;
		if(getequipisequiped(.@part) == 0) { // hacker has removed the item (not changed, why?)
			mes "[" + getarg(0) + "]";
			mes "Look here... you don't have any Items on...";
			close;
		}
		if(getequiprefinerycnt(.@part) != .@refinerycnt || getequipid(.@part) != .@refineitemid) { // hacker has changed the item
			mes "[" + getarg(0) + "]";
			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;
		}
		if(getequippercentrefinery(.@part) <= rand(100)) {
			failedrefitem .@part;
			mes "[" + getarg(0) + "]";
			set .@emo,rand(1,5);
			if (.@emo == 1) {
				Emotion e_cash;
			} else {
				Emotion e_swt;
			}
			set .@lose,rand(1,3);
			if (.@lose == 1) {
				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 if(.@lose == 2) {
				mes "Nooooooo!";
				mes "It broke!";
				mes "I-I'm sorry!";
			} else {
				mes "Crap!";
				mes "It couldn't take";
				mes "much more tempering!";
				mes "Sorry about this...";
			}
			close;
		}
		mes "["+getarg(0)+"]";
		successrefitem .@part;
		Emotion e_heh;
		set .@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;
	}
 
// New Refining Functions ========================
	if(getequiprefinerycnt(.@part) < .@safe) {
		mes "[" + getarg(0) + "]";
		mes "I can refine this to the safe limit or a desired number of times... it's your choice...";
		next;
		set .@menu2,select("To the safe limit please.","I'll decide how many times.","I've changed my mind...");
	} else set .@menu2,2;
	switch(.@menu2){
	case 1: 
		set .@refinecnt,.@safe - getequiprefinerycnt(.@part);
		break;
	case 2:
		next;
		mes "[" + getarg(0) + "]";
		mes "So how many times would you like me to refine your item?";
		next;
		input .@refinecnt;
		set .@refinecheck,.@refinecnt + getequiprefinerycnt(.@part);
		if (.@refinecnt < 1 || .@refinecheck > 10) {
			mes "[" + getarg(0) + "]";
			mes "I can't refine this item that many times.";
			close;
		}
		if(.@refinecheck > .@safe) {
			set .@refinecheck,.@refinecheck - .@safe;
			mes "[" + getarg(0) + "]";
			mes "This will try to refine the equipment " + .@refinecheck + " times past the safe limit. Your equipment may be destroyed... is that ok?";
			next;
			if(select("Yes...","No...") == 2){
				mes "[" + getarg(0) + "]";
				mes "You said so..Hmm so be it...";
				close;
			}
		}
		break;
	case 3:
		next;
		mes "[" + getarg(0) + "]";
		mes "You said so..Hmm so be it...";
		close;
	}
	set .@fullprice,.@price * .@refinecnt;
	mes "[" + getarg(0) + "]";
	mes "That will cost you " + .@refinecnt + " " + getitemname(.@material) + " and " + .@fullprice + " Zeny. Is that ok?";
	next;
	if(select("Yes","No...") == 2){
		mes "[" + getarg(0) + "]";
		mes "You said so..Hmm so be it...";
		close;
	}
	if(countitem(.@material) < .@refinecnt || Zeny < .@fullprice) {
		mes "[" + getarg(0) + "]";
		mes "Is that all you got? Unfortunately I can't work for you at a lower price. Try putting yourself in my shoes.";
		close;
	}
	set Zeny,Zeny - .@fullprice;
	delitem .@material,.@refinecnt;
	while(.@refinecnt){
		if (getequipisequiped(.@part) == 0) {
			mes "[" + getarg(0) + "]";
			mes "Look here... you don't have any Items on...";
			close;
		}
		if (getequipid(.@part) != .@refineitemid || (.@menu2 == 1 && getequippercentrefinery(.@part) < 100)) {
			mes "[" + getarg(0) + "]";
			mes "Clan... No, but Did you imagine I could be so stupid !?!";
			mes "You have changed it...";
			mes "Go out before I stun you with my Hammer!!!";
			close;
		} 
		mes "Clang, clang!!!";
		if(.@menu2 == 2 && getequippercentrefinery(.@part) <= rand(100)) {
			failedrefitem .@part;
			emotion 23;
			mes "[" + getarg(0) + "]";
			mes "WAHHHH!!! I'm so sorry... I warned you this could happen...";
			set .@refinecnt,.@refinecnt - 1;
			if(.@refinecnt == 0) close;
			mes "Here's the unused Zeny and Material back...";
			getitem .@material,.@refinecnt;
			set .@fullprice,.@refinecnt * .@price;
			set Zeny,Zeny + .@fullprice;
			close;
		}
		successrefitem .@part;
		emotion 21;
		set .@refinecnt,.@refinecnt - 1;
		next;
	}
	mes "[" + getarg(0) + "]";
	mes "All finished... Come again soon.";
	close;		
 
L_Repair:
mes "Repairing it is!";
next;
if (getbrokenid(1) == 0) goto L_Waste;
mes "[" + getarg(0) + "]";
mes "Each repair costs 2000 zeny would you like to repair an item now?";
menu "Yes",L_RepairItem,"No",L_Bye;
 
L_RepairItem:
if(zeny < (2000)) goto L_NoZeny;
mes "Select the item to repair from the menu.";
set @choice, select(getitemname(getbrokenid(1)), getitemname(getbrokenid(2)), getitemname(getbrokenid(3)), getitemname(getbrokenid(4)), getitemname(getbrokenid(5)), getitemname(getbrokenid(6)), getitemname(getbrokenid(7)), getitemname(getbrokenid(8)), getitemname(getbrokenid(9)), getitemname(getbrokenid(10)));
 
set zeny, zeny - 2000;
repair(@choice);
goto L_Repaired;
 
L_Waste:
mes "[" + getarg(0) + "]";
mes "Do not waste my time, you have no items in need of repair.";
close;
L_Repaired:
mes "[" + getarg(0) + "]";
mes "Your item has been repaired, please be more careful.";
close;
 
}

Didn't try it but the structure seems ok this way.

  • Upvote 1
Link to comment
Share on other sites


  • Group:  Forum Moderator
  • Topic Count:  33
  • Topics Per Day:  0.01
  • Content Count:  1268
  • Reputation:   382
  • Joined:  02/03/12
  • Last Seen:  

That's because it isn't enclosed within the proper braces.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  91
  • Topics Per Day:  0.02
  • Content Count:  325
  • Reputation:   34
  • Joined:  06/01/13
  • Last Seen:  

Guess that's how it should be:

//<?> -o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o \\
//          Blacksmith/Card Removal Npc V.2.0         \\
//                   by Luther                        \\
//<?> -o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o \\
//          Blacksmith/Card Removal Npc V.2.0         \\
//                   by Luther                        \\
// Credit To : Mytzer,TyrNemisis,ShadowMaster and     \\
// who ever made the Item Identifyer Deckard Cain.    \\
// Whoms Scripts were used in making this npc.        \\
// Also ToastOfDoom and Chachi911 for helping Debug it\\
// (V.2.0 Uses the original eAthena Refine Script that\\ 
//can have its rates configured in the refine_db.txt) \\
// -o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o \\

prontera,166,231,3	script	Refiner	85,{
	set .soundef_number, .soundef_number + 1;
 
	switch (.soundef_number)
	{
 
		case 1:
		soundeffect "hollen2.wav",0;
		break;
 
		case 2:
		soundeffect "hollen3.wav",0;
		break;
 
		case 3:
		soundeffect "hollen4.wav",0;
		break;
 
		case 4:
		soundeffect "hollen5.wav",0;
		break;
 
	}
 
	if (.soundef_number >= 3)
	{
		set .soundef_number, 0;
	}
 
	end;
 

callfunc "refinemainx","Advanced Hollgrehenn",1;
	end;
    }
//============================================================
//= Main Refiner Function
//============================================================
//= To allow auto safe refining/multiple refining set the
//= 0 after Melchior to '1' in the function call.
//= To Change the Name of the NPC, just Edit it in the
//= Beginning of the Script and the Melchior part of the
//= Call function. 
//============================================================
function	script	refinemainx	{
	set .@features,getarg(1);
  mes "[" + getarg(0) + "]";
	mes "I can Refine, Extract Cards, Identify Items, and Repair Broken Items ^FF0000which of my services are you interested in?^000000";
	menu "Refining",L_Refine,"Item Repair",L_Repair;
	
  L_Refine:
  mes "refining eh?";
  next;
  mes "[" + getarg(0) + "]";
	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( set .@i,1; .@i <= 10; set .@i,.@i+1 )
	{
		if( getequipisequiped(.@i) )
			set .@menu$, .@menu$ + .@position$[.@i] + "-" + "[" + getequipname(.@i) + "]";
 
		set .@menu$, .@menu$ + ":";
	}
	set .@part,select(.@menu$);
	if(!getequipisequiped(.@part)) {
		mes "[" + getarg(0) + "]";
		mes "You're not wearing";
		mes "anything there that";
		mes "I can refine.";
		emotion 6;
		close;
	}
	//Check if the item is refinable...
	if(!getequipisenableref(.@part)) {
		mes "[" + getarg(0) + "]";
		mes "I don't think I can";
		mes "refine this item at all...";
		close;
	}
	//Check if the item is identified... (Don't know why this is in here... but kept it anyway)
	if(!getequipisidentify(.@part)) {
		mes "[" + getarg(0) + "]";
		mes "You can't refine this";
		mes "if you haven't appraised";
		mes "it first. Make sure your";
		mes "stuff is identified before";
		mes "I can refine it.";
		close;
	}
	//Check to see if the items is already +10
	if(getequiprefinerycnt(.@part) >= 10) {
		mes "[" + getarg(0) + "]";
		mes "I can't refine this";
		mes "any more. This is as";
		mes "refined as it gets!";
		close;
	}
	set .@refineitemid, getequipid(.@part); // save id of the item
	set .@refinerycnt, getequiprefinerycnt(.@part); //save refinery count
	switch(getequipweaponlv(.@part)){
	case 0: 	//Refine Armor
		set .@price,2000;
		set .@material,985;
		set .@safe,4;
		break;
	case 1: 	//Refine Level 1 Weapon
		set .@price,50;
		set .@material,1010;
		set .@safe,7; 
		break;
	case 2: 	//Refine Level 2 Weapon
		set .@price,200;
		set .@material,1011;
		set .@safe,6; 
		break;
	case 3: 	//Refine Level 3 Weapon
		set .@price,5000;
		set .@material,984;
		set .@safe,5; 
		break;
	case 4: 	//Refine Level 4 Weapon
		set .@price,20000;
		set .@material,984;
		set .@safe,4; 
		break;
	case 5: 	//Refine other stuff?
		set .@price,2000;
		set .@material,985;
		set .@safe,4; 
		break;
	}
	if(.@features != 1) {
		mes "[" + getarg(0) + "]";
		mes "To refine this I need";
		mes "one ^003366"+getitemname(.@material)+"^000000 and";
		mes "a service fee of " + .@price + " Zeny.";
		mes "Do you really wish to continue?";
		next;
		if(select("Yes:No") == 2){
			mes "[" + getarg(0) + "]";
			mes "Yeah...";
			mes "There's no need to";
			mes "rush. Take your time.";
			close;
		}
		if(getequippercentrefinery(.@part) < 100) {
			mes "[" + getarg(0) + "]";
			mes "Oh no! If I continue to";
			mes "refine this, there's a risk it could";
			switch(.@material) {
			case 985:
				mes "be destroyed! That means that ^FF0000this equipment^000000, and ^FF0000any cards^000000 or special properties added to this armor, ^FF0000will be gone^000000.";
				break;
			default:
				mes "be destroyed, and you'd ^FF0000lose the weapon^000000, any ^FF0000cards in the weapon^000000,";
				mes "or any added special properties.";
				break;
			}
			next;
			mes "["+getarg(0)+"]";
			mes "I can't make it any clearer.";
			mes "Once a weapon is destroyed,";	
			mes "there's no getting it back.";
			mes "You really have a chance to";
			mes "^FF0000lose this weapon^000000 forever.";
			mes "Do you still want to refine?";
			next;
			if(select("Yes:No") == 2){
				mes "[" + getarg(0) + "]";
				mes "I completely agree...";
				mes "I might be a great refiner, but sometimes even I make mistakes.";
				close;
			}
		}
		if((countitem(.@material) < 1) || (Zeny < .@price)) {
			mes "[" + getarg(0) + "]";
			mes "You don't seem to have";
			mes "enough Zeny or "+getitemname(.@material)+"...";
			mes "Go get some more. I'll be";
			mes "here all day if you need me.";
			close;
		}
		set Zeny,Zeny-.@price;
		delitem .@material,1;
		if(getequipisequiped(.@part) == 0) { // hacker has removed the item (not changed, why?)
			mes "[" + getarg(0) + "]";
			mes "Look here... you don't have any Items on...";
			close;
		}
		if(getequiprefinerycnt(.@part) != .@refinerycnt || getequipid(.@part) != .@refineitemid) { // hacker has changed the item
			mes "[" + getarg(0) + "]";
			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;
		}
		if(getequippercentrefinery(.@part) <= rand(100)) {
			failedrefitem .@part;
			mes "[" + getarg(0) + "]";
			set .@emo,rand(1,5);
			if (.@emo == 1) {
				Emotion e_cash;
			} else {
				Emotion e_swt;
			}
			set .@lose,rand(1,3);
			if (.@lose == 1) {
				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 if(.@lose == 2) {
				mes "Nooooooo!";
				mes "It broke!";
				mes "I-I'm sorry!";
			} else {
				mes "Crap!";
				mes "It couldn't take";
				mes "much more tempering!";
				mes "Sorry about this...";
			}
			close;
		}
		mes "["+getarg(0)+"]";
		successrefitem .@part;
		Emotion e_heh;
		set .@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;
	}
 
// New Refining Functions ========================
	if(getequiprefinerycnt(.@part) < .@safe) {
		mes "[" + getarg(0) + "]";
		mes "I can refine this to the safe limit or a desired number of times... it's your choice...";
		next;
		set .@menu2,select("To the safe limit please.","I'll decide how many times.","I've changed my mind...");
	} else set .@menu2,2;
	switch(.@menu2){
	case 1: 
		set .@refinecnt,.@safe - getequiprefinerycnt(.@part);
		break;
	case 2:
		next;
		mes "[" + getarg(0) + "]";
		mes "So how many times would you like me to refine your item?";
		next;
		input .@refinecnt;
		set .@refinecheck,.@refinecnt + getequiprefinerycnt(.@part);
		if (.@refinecnt < 1 || .@refinecheck > 10) {
			mes "[" + getarg(0) + "]";
			mes "I can't refine this item that many times.";
			close;
		}
		if(.@refinecheck > .@safe) {
			set .@refinecheck,.@refinecheck - .@safe;
			mes "[" + getarg(0) + "]";
			mes "This will try to refine the equipment " + .@refinecheck + " times past the safe limit. Your equipment may be destroyed... is that ok?";
			next;
			if(select("Yes...","No...") == 2){
				mes "[" + getarg(0) + "]";
				mes "You said so..Hmm so be it...";
				close;
			}
		}
		break;
	case 3:
		next;
		mes "[" + getarg(0) + "]";
		mes "You said so..Hmm so be it...";
		close;
	}
	set .@fullprice,.@price * .@refinecnt;
	mes "[" + getarg(0) + "]";
	mes "That will cost you " + .@refinecnt + " " + getitemname(.@material) + " and " + .@fullprice + " Zeny. Is that ok?";
	next;
	if(select("Yes","No...") == 2){
		mes "[" + getarg(0) + "]";
		mes "You said so..Hmm so be it...";
		close;
	}
	if(countitem(.@material) < .@refinecnt || Zeny < .@fullprice) {
		mes "[" + getarg(0) + "]";
		mes "Is that all you got? Unfortunately I can't work for you at a lower price. Try putting yourself in my shoes.";
		close;
	}
	set Zeny,Zeny - .@fullprice;
	delitem .@material,.@refinecnt;
	while(.@refinecnt){
		if (getequipisequiped(.@part) == 0) {
			mes "[" + getarg(0) + "]";
			mes "Look here... you don't have any Items on...";
			close;
		}
		if (getequipid(.@part) != .@refineitemid || (.@menu2 == 1 && getequippercentrefinery(.@part) < 100)) {
			mes "[" + getarg(0) + "]";
			mes "Clan... No, but Did you imagine I could be so stupid !?!";
			mes "You have changed it...";
			mes "Go out before I stun you with my Hammer!!!";
			close;
		} 
		mes "Clang, clang!!!";
		if(.@menu2 == 2 && getequippercentrefinery(.@part) <= rand(100)) {
			failedrefitem .@part;
			emotion 23;
			mes "[" + getarg(0) + "]";
			mes "WAHHHH!!! I'm so sorry... I warned you this could happen...";
			set .@refinecnt,.@refinecnt - 1;
			if(.@refinecnt == 0) close;
			mes "Here's the unused Zeny and Material back...";
			getitem .@material,.@refinecnt;
			set .@fullprice,.@refinecnt * .@price;
			set Zeny,Zeny + .@fullprice;
			close;
		}
		successrefitem .@part;
		emotion 21;
		set .@refinecnt,.@refinecnt - 1;
		next;
	}
	mes "[" + getarg(0) + "]";
	mes "All finished... Come again soon.";
	close;		
 
L_Repair:
mes "Repairing it is!";
next;
if (getbrokenid(1) == 0) goto L_Waste;
mes "[" + getarg(0) + "]";
mes "Each repair costs 2000 zeny would you like to repair an item now?";
menu "Yes",L_RepairItem,"No",L_Bye;
 
L_RepairItem:
if(zeny < (2000)) goto L_NoZeny;
mes "Select the item to repair from the menu.";
set @choice, select(getitemname(getbrokenid(1)), getitemname(getbrokenid(2)), getitemname(getbrokenid(3)), getitemname(getbrokenid(4)), getitemname(getbrokenid(5)), getitemname(getbrokenid(6)), getitemname(getbrokenid(7)), getitemname(getbrokenid(8)), getitemname(getbrokenid(9)), getitemname(getbrokenid(10)));
 
set zeny, zeny - 2000;
repair(@choice);
goto L_Repaired;
 
L_Waste:
mes "[" + getarg(0) + "]";
mes "Do not waste my time, you have no items in need of repair.";
close;
L_Repaired:
mes "[" + getarg(0) + "]";
mes "Your item has been repaired, please be more careful.";
close;
 
}

Didn't try it but the structure seems ok this way.

Works perfectly now thanks man :)

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...