//===== rAthena Script =======================================
//= Ticket Refiner
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.1
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= [Official Conversion]
//= Refiner that uses +5~9/+11 refine tickets to refine
//= equipment with no chance of failure.
//= NOTE: This NPC is currently disabled on official servers.
//===== Additional Comments: =================================
//= 1.0 First version. [Euphy]
//= 1.1 Do not refine above ticket level. [Euphy]
//============================================================
// Main NPC :: safety_Ref_NPC
//============================================================
prontera,184,177,6 script Refine Master 851,{
disable_items;
if (countitem(6238) || countitem(6228) || countitem(6229) || countitem(6230) || countitem(6231) || countitem(6456))
set
[email protected],1;
if (countitem(6239) || countitem(6232) || countitem(6233) || countitem(6234) || countitem(6235) || countitem(6457))
set
[email protected],1;
if (
[email protected] &&
[email protected]) {
mes "[Refine Master]";
mes "Hello!";
mes "What's up?";
mes "I'm a specialist";
mes "for refining items,";
mes "but I don't work anymore.";
next;
switch(select("I'll go on my way.:Hmm... this makes me curious.")) {
case 1:
mes "[Refine Master]";
mes "Take care, adventurer.";
close;
case 2:
mes "[Refine Master]";
mes "Actully, I sometimes provide refine services for adventurers with a ^006400Refine Ticket^000000...";
mes "Bye bye~!";
close;
}
}
emotion ET_SURPRISE;
mes "[Refine Master]";
mes "Greetings!";
mes "I can refine an item up to the ^006400same level as your ticket^000000.";
mes "You don't have to worry! There's no chance of breaking your item.";
next;
if(select("I'll come back later.:Refine item with ticket.") == 1) {
mes "[Refine Master]";
mes "Okay.";
mes "You can come again later.";
close;
}
mes "[Refine Master]";
mes "Which equipment would you like to refine?";
next;
setarray
[email protected]$[1],"Head upper","Armor","Left hand","Right hand","Robe","Shoes","Accessory 1","Accessory 2","Head middle","Head lower";
setarray
[email protected][1], EQI_HEAD_TOP, EQI_ARMOR, EQI_HAND_L, EQI_HAND_R, EQI_GARMENT, EQI_SHOES, EQI_ACC_L, EQI_ACC_R, EQI_HEAD_MID, EQI_HEAD_LOW;
for(set
[email protected],1;
[email protected]<=10; set
[email protected],
[email protected]+1)
set
[email protected]$,
[email protected]$+((getequipisequiped(
[email protected][
[email protected]]))?getequipname(
[email protected][
[email protected]]):
[email protected]$[
[email protected]]+"- [Empty]")+":";
set
[email protected],
[email protected][ select(
[email protected]$) ];
if (!getequipisequiped(
[email protected])) {
mes "[Refine Master]";
mes "You have to equip the item you want to refine.";
close;
}
if (!getequipisenableref(
[email protected])) {
emotion ET_OTL;
mes "[Refine Master]";
mes "Oh, I'm sorry.";
mes "This item is impossible to refine.";
close;
}
[email protected] = getequipid(
[email protected]); // save id of the item
[email protected] = getequiprefinerycnt(
[email protected]); //save refinery count
setarray
[email protected][0], getequipcardid(
[email protected],0), getequipcardid(
[email protected],1), getequipcardid(
[email protected],2), getequipcardid(
[email protected],3);
switch(getequipweaponlv(
[email protected])) {
default:
case 0:
setarray
[email protected][0],6457,6235,6234,6233,6232,6239;
setarray
[email protected][0],5,6,7,8,9,11;
set
[email protected]$,"Armor";
set
[email protected],
[email protected];
break;
case 1:
case 2:
case 3:
case 4:
setarray
[email protected][0],6456,6231,6230,6229,6228,6238;
setarray
[email protected][0],5,6,7,8,9,11;
set
[email protected]$,"Weapon";
set
[email protected],
[email protected];
break;
}
if (
[email protected]) {
emotion ET_THINK;
mes "[Refine Master]";
mes "If you want to refine this ^006400"
[email protected]$+"^000000, please come along with ^006400"
[email protected]$+" Refine Ticket^000000.";
mes "See you later!";
close;
}
mes "[Refine Master]";
mes "Please choose which ^006400"
[email protected]$+" Refine Ticket^000000 you want to use.";
next;
set
[email protected]$,"";
for(set
[email protected],0;
[email protected]<getarraysize(
[email protected]); set
[email protected],
[email protected]+1)
set
[email protected]$,
[email protected]$+getitemname(
[email protected][
[email protected]])+":";
set
[email protected], select(
[email protected]$)-1;
set
[email protected]_lv,
[email protected][
[email protected]];
set
[email protected]_id,
[email protected][
[email protected]];
if (countitem(
[email protected]_id) == 0) {
emotion ET_QUESTION;
mes "[Refine Master]";
mes getitemname(
[email protected]_id)+" is not in your inventory. Did you put it in your storage?";
mes "Please check again.";
mes "See you later!";
close;
}
if (getequiprefinerycnt(
[email protected]) >=
[email protected]_lv) {
emotion ET_PROFUSELY_SWEAT;
mes "[Refine Master]";
mes "^8B4513This item is already refined as much as your deed.^000000";
mes "Please come along with an item refined less than your ticket.";
close;
}
mes "[Refine Master]";
mes "I'm going to refine ^006400"+getequipname(
[email protected])+"^8B4513 up to the +"
[email protected]_lv+" level^000000 with ^006400"+getitemname(
[email protected]_id)+"^000000.";
mes "May I proceed?";
next;
if(select("No.:Yes.") == 1) {
emotion ET_THINK;
mes "[Refine Master]";
mes "Oh, you changed your mind.";
mes "Ok.";
mes "You can come back later.";
close;
}
mes "[Refine Master]";
mes "Great.";
mes "As you wish!";
mes "I have my own special way to refine...";
mes ".......ka boom!";
if (countitem(
[email protected]_id)) {
delitem
[email protected]_id,1;
// anti-hack
if (callfunc("F_IsEquipIDHack",
[email protected],
[email protected]) ||
callfunc("F_IsEquipRefineHack",
[email protected],
[email protected]) || callfunc("F_IsEquipCardHack",
[email protected],
[email protected][0],
[email protected][1],
[email protected][2],
[email protected][3])) {
mes "[Refine Master]";
emotion ET_FRET;
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;
}
} else {
next;
mes "Error!";
mes "Please report this.";
close;
}
set .value, rand(0,100);
if(.value >= 98){
specialeffect EF_SUI_EXPLOSION;
successrefitem
[email protected],
[email protected]_lv - getequiprefinerycnt(
[email protected]);
}else{
mes "Refinement failed, ticket was consuming. Try again.";
}
next;
emotion ET_DELIGHT;
mes "[Refine Master]";
mes "Alright, here it is~";
mes "Well, ^0000FF"+strcharinfo(0)+"^000000!";
mes "Congratulations on your shining "
[email protected]$+".";
mes "You look GREAT!";
mes "Farewell~!";
close;
}
It's like 2% success, you'll see it will fail!
Just edit the value down there again to correct it for 40 ..
I changed the effect of success for when it succeeds, I have no way to test or refine the code now, because I'm in the company ...