//================= Hercules Script ======================================= //= _ _ _ //= | | | | | | //= | |_| | ___ _ __ ___ _ _| | ___ ___ //= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| //= | | | | __/ | | (__| |_| | | __/\__ \ //= \_| |_/\___|_| \___|\__,_|_|\___||___/ //================= License =============================================== //= This file is part of Hercules. //= http://herc.ws - http://github.com/HerculesWS/Hercules //= //= Copyright (C) 2012-2020 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