//================= Hercules Script =======================================
//= _ _ _
//= | | | | | |
//= | |_| | ___ _ __ ___ _ _| | ___ ___
//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
//= | | | | __/ | | (__| |_| | | __/\__ \
//= \_| |_/\___|_| \___|\__,_|_|\___||___/
//================= License ===============================================
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
//= Copyright (C) 2012-2015 Hercules Dev Team
//= Copyright (C) Euphy
//= Copyright (C) Muad_Dib
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
//= the Free Software Foundation, either version 3 of the License, or
//= (at your option) any later version.
//=
//= This program is distributed in the hope that it will be useful,
//= but WITHOUT ANY WARRANTY; without even the implied warranty of
//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//= GNU General Public License for more details.
//=
//= You should have received a copy of the GNU General Public License
//= along with this program. If not, see .
//=========================================================================
//= Card Separation System
//================= Description ===========================================
//= Separates cards from equipment.
//================= Current Version =======================================
//= 1.1
//=========================================================================
- script ::CardSeparation_mal FAKE_NPC,{
disable_items;
if (checkweight(Knife,1) == 0) {
mes "You have too many kinds of objects. Let's try to continue after reducing those objects.";
close;
}
if (MaxWeight - Weight < 10000) {
mes "Can't continue because you have too many heavy objects. Let's try to continue after reducing the weight.";
close;
}
if (strnpcinfo(NPC_NAME_VISIBLE) == "Jeremy") {
.@Jeremy = 1;
.@n$ = "[Jeremy]";
setarray .@equip_name$[0], "Armor", "Shoes", "Garment", "Upper Hat";
setarray .@equip_slot[0], EQI_ARMOR,EQI_SHOES,EQI_GARMENT,EQI_HEAD_TOP;
mes .@n$;
mes "Long time no see~";
mes "I have learned a new skill that separates cards from Armor, Shoes, Garment and Headgear. Do you want to try it?";
} else {
.@Jeremy = 0;
.@n$ = "[Richard]";
setarray .@equip_name$[0], "Left hand", "Right hand";
setarray .@equip_slot[0], EQI_HAND_L, EQI_HAND_R;
mes .@n$;
mes "Silly Jeremy does not want to touch weapons and shields because of picking several cards that might be damaged. That is why I prepared a card separaion skill for weapons and shields...";
}
next;
mes .@n$;
mes "Generally the fee is 1,000,000 Zeny. During the card separation, you can use ^990000special items that reduce the rate of destroying equipment or cards^000000. We don't charge additional zeny for this.";
next;
mes .@n$;
mes "There is a possibility of destroying them even using a special item. Also, ^ff0000the refine level might be lost^000000. Do you have any equipment to separate?";
next;
for(.@i = 0; .@i= 4700 // Armor Enchant System
|| .@equip_card[.@i] == 0) {
.@equip_card[.@i] = 0;
--.@cardcount;
}
}
if (!.@cardcount) {
mes .@n$;
mes "The card is not equipped. Do you want to check again?";
close;
}
for (.@i = 0; .@i < 4; ++.@i) {
if (.@equip_card[.@i] == 0)
continue;
for (.@j = 0; .@j < getarraysize(.@mvp_list); ++.@j) {
if (.@equip_card[.@i] == .@mvp_list[.@j])
.@boss_chk = true;
}
}
} else {
// Official "Richard" script uses a hardcoded list including every possible item.
//if (!getequipisequiped(.@equip_num)) {
// mes "[Richard]";
// mes "I'm sorry. We don't provide that equipmnet yet.";
// close;
//}
mes "[Richard]";
mes "Which number socket do you want to separate the card? From the left socket, they are sorted 1,2,3,4.";
next;
.@menu$ = "";
for(.@i = 0; .@i<4; ++.@i) {
if (.@equip_card[.@i] && .@equip_card[.@i] < 4700) // Armor Enchant System
.@menu$ += "Socket "+(.@i+1)+" - "+getitemname(.@equip_card[.@i])+":";
else
.@menu$ += "^777777Socket "+(.@i+1)+" - No card^000000:";
}
.@i = select("Stop the work:"+ .@menu$);
switch(.@i) {
case 1:
mes .@n$;
mes "Whenever you need to work, please come to me.";
close;
default:
.@slot = .@i-2;
if (.@equip_card[.@slot] == 0 || .@equip_card[.@slot] >= 4700) {
mes .@n$;
mes "This socket is not equipped with any card. Why don't you check again?";
close;
}
break;
}
for (.@i = 0; .@i < getarraysize(.@mvp_list); ++.@i) {
if (.@equip_card[.@slot] == .@mvp_list[.@i])
.@boss_chk = true;
}
}
if (!.@boss_chk) {
mes .@n$;
if (.@Jeremy)
mes "Except cards, ^ff0000all enchanted effects will disappear.^000000 If you agree to this, please choose the work type:";
else
mes "Please choose the working fee.";
next;
.@menu$ = "Next time...:"+
((Zeny >= 1000000)?"Use 1,000,000z (Do not use special item):":"^999999Use 1,000,000z (Insufficient)^000000:")+
((countitem(High_RankLubricant))?"Use Premium Lubricant:":"^999999Premium Lubricant (Insufficient)^000000:")+
((countitem(General_Lubricant))?"Use Ordinary Lubricant":"^999999Ordinary Lubricant (Insufficient)^000000");
switch(select(.@menu$)) {
case 1:
mes .@n$;
mes "Whenever you need the work, visit me here.";
close;
case 2:
if (Zeny < 1000000) {
mes .@n$;
mes "You don't have enough zeny. Please come back with enough fees.";
close;
}
mes .@n$;
mes "This is pretty old equipment. There is a high rate of destroying the cards or equipment during the work. Are you sure you want to continue?";
next;
if(select("Next time...", "Continue") == 1) {
mes .@n$;
mes "Whenever you need the work, visit me here.";
close;
}
.@sf_c_num = 150;
.@sf_r_num = 150;
.@sf_w_num = 150;
Zeny -= 1000000;
break;
case 3:
if (countitem(High_RankLubricant) == 0) {
mes .@n$;
mes "You don't have Premium Lubricant.";
close;
}
mes .@n$;
mes "If you use the Premium Lubricant, the rate of destruction will be decreased highly, but I can't give you a 100% guarantee. Are you sure you want to continue?";
next;
if(select("Next time...", "Continue") == 1) {
mes .@n$;
mes "Whenever you need the work, visit me here.";
close;
}
.@sf_c_num = 75;
.@sf_r_num = 75;
.@sf_w_num = 75;
delitem High_RankLubricant,1;
break;
case 4:
if (countitem(General_Lubricant) == 0) {
mes .@n$;
mes "You don't have Ordinary Lubricant.";
close;
}
mes .@n$;
mes "If you use the Ordinary Lubricant, the rate of destruction will be decreased highly, but I can't give you a 100% guarantee. Are you sure you want to continue?";
next;
if(select("Next time...", "Continue") == 1) {
mes .@n$;
mes "Whenever you need the work, visit me here.";
close;
}
.@sf_c_num = 75;
.@sf_r_num = 150;
.@sf_w_num = 150;
delitem General_Lubricant,1;
break;
}
} else {
mes .@n$;
mes "This equipment contains a precious MVP card. This card can't be separated with lubricant. If you bring the super surfactant ^0000ffSillit Pong^000000, I will be able to work.";
next;
switch(select("Next time...", "I have a Sillit Pong.")) {
case 1:
mes .@n$;
mes "Whenever you need the work, visit me here.";
close;
case 2:
if (countitem(Sillit_Pong_Bottle) == 0) {
mes .@n$;
mes "You don't have Sillit Pong.";
close;
}
break;
}
mes .@n$;
if (.@Jeremy) {
mes "Except cards, ^ff0000all enchanted effects will disappear.^000000 If you agree to this, please choose the work type:";
.@menu$ = "Alright, let's do it!";
} else {
mes "May I continue?";
.@menu$ = "I got it. Just do it quickly!";
}
next;
switch(select("Next time...:"+ .@menu$)) {
case 1:
mes .@n$;
mes "Whenever you need the work, visit me here.";
close;
case 2:
.@sf_c_num = 60;
.@sf_r_num = 60;
.@sf_w_num = 60;
delitem Sillit_Pong_Bottle,1;
break;
}
}
.@equip_id = getequipid(.@equip_num);
.@equip_refine = getequiprefinerycnt(.@equip_num);
delequip .@equip_num;
// Chance of retaining refine level.
if (rand(1,.@sf_r_num) >= 61)
.@equip_refine = 0;
if (.@Jeremy) {
// Chance of retaining equipment.
if (rand(1,.@sf_w_num) < 61) {
.@equip_safe = 1;
getitem2 .@equip_id,1,1,.@equip_refine,0,0,0,0,0;
}
// Chance of retaining cards.
for(.@i = 0; .@i<4; ++.@i) {
if (.@equip_card[.@i]) {
if (rand(1,.@sf_c_num) < 61)
getitem .@equip_card[.@i],1;
else
.@card_break = 1;
}
}
} else {
.@card = .@equip_card[.@slot];
.@equip_card[.@slot] = 0;
// Chance of retaining equipment.
if (rand(1,.@sf_w_num) < 61) {
.@equip_safe = 1;
getitem2 .@equip_id,1,1,.@equip_refine,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@equip_card[3];
}
// Chance of retaining card.
if (rand(1,.@sf_c_num) < 61)
getitem .@card,1;
else
.@card_break = 1;
}
// Display corresponding effect.
if (!.@equip_safe && .@card_break)
specialeffect(EF_LORD, AREA, playerattached());
else if (.@equip_safe && .@card_break)
specialeffect(EF_SUI_EXPLOSION, AREA, playerattached());
else if (!.@equip_safe && !.@card_break)
specialeffect(EF_FIREPILLAR, AREA, playerattached());
else
specialeffect(EF_MAXPOWER, AREA, playerattached());
// Output results.
mes "-- Result of Card Separation --";
if (.@equip_safe) {
mes "Crack has not occured during the card separation process.";
mes "^0000FFEquipment separation is normal.^000000";
} else {
mes "Crack has occured during the card separation process.";
mes "Equipment has been damaged. ^ff0000Unrecoverable.^000000";
}
mes "-------------------";
if (!.@card_break) {
mes "Erosion of surface has not occured during the card separation process.";
mes "^0000ffCard separation has succeeded.^000000";
} else {
mes "Erosion of surface has occured during the card separation process.";
mes "Card has been damaged. ^ff0000Unrecoverable.^000000";
}
next;
mes .@n$;
mes "That is all for the results of the card separation. Please come again.";
close;
}
malangdo,215,166,4 duplicate(CardSeparation_mal) Jeremy#pa0829 4_CAT_DOWN
malangdo,208,166,6 duplicate(CardSeparation_mal) Richard#pa0829 4_CAT_ADV1