123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- //===== rAthena Script =======================================
- //= Shadow Blacksmith
- //===== Description: =========================================
- //= [Official Conversion]
- //= Shadow equipments refining NPC.
- //===== Changelog: ===========================================
- //= 1.0 First version [Aleos]
- //= 1.1 Removed re-roll behavior and fetch materials from db
- //= [Secret]
- //= 1.2 Added Refine UI [Atemo, Lemongrass]
- //= 1.3 Moved to Cash Mall [Lemongrass]
- //============================================================
- - script ::ShadowBlacksmith -1,{
- if( getbattleflag( "feature.refineui" ) ){
- mes "[Shadow Blacksmith]";
- mes "Now Basta is in charge of refinement for shadow items.";
- mes "If you'd like to refine a shadow item, please visit him.";
- close;
- }
- .@zeny_cost = 200000; // Zeny cost is 200,000 according to official script [Secret]
- disable_items;
- mes "[Shadow Blacksmith]";
- mes "Do you want to refine a shadow item? Pick yer poison!";
- next;
- setarray .@indices[1], EQI_SHADOW_ARMOR, EQI_SHADOW_WEAPON, EQI_SHADOW_SHIELD, EQI_SHADOW_SHOES, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L;
- .@indlen = getarraysize(.@indices) - 1;
- for(.@i = 1; .@i <= .@indlen; .@i++)
- .@menu$ = .@menu$ + (getequipisequiped(.@indices[.@i]) ? getequipname(.@indices[.@i]) : F_getpositionname(.@indices[.@i]) +"-[Not equipped]") +":";
- .@menu$ = .@menu$ + "Refine info";
- .@choice = select(.@menu$);
- if (.@choice == .@indlen + 1) { // Refine info
- mes "[Shadow Blacksmith]";
- mes "When a shadow item is refined, it gains extra bonuses very much like normal items.";
- next;
- mes "[Shadow Blacksmith]";
- mes "Weapon: ATK, MATK + 1 increase for each +1 refine success.";
- mes "Etc: HP + 10 increase for each +1 refine success.";
- next;
- mes "[Shadow Blacksmith]";
- mes "All types of Oridecon and Elunium can be used to refine shadow items. Each attempt will also cost 20,000 zeny.";
- next;
- mes "[Shadow Blacksmith]";
- mes "HD ores can be used for gear that is at least refine level +7 and will prevent breaking as long as you stay talking to me.";
- close;
- }
- .@part = .@indices[.@choice];
- if (!getequipisequiped(.@part)) {
- mes "[Shadow Blacksmith]";
- mes "There's nothing here!";
- close;
- }
- .@equip_id = getequipid(.@part);
- setarray .@card[0], getequipcardid(.@part,0), getequipcardid(.@part,1), getequipcardid(.@part,2), getequipcardid(.@part,3);
- while(1) {
- .@equip_refine = getequiprefinerycnt(.@part);
- mes "[Shadow Blacksmith]";
- mes "I require " + callfunc("F_InsertComma", .@zeny_cost) + " zeny as a fee for EACH refine attempt.";
- mes "Choose your Ore and start refining.";
- next;
- .@material[0] = getequiprefinecost(.@part, REFINE_COST_NORMAL, REFINE_MATERIAL_ID);
- .@material[1] = getequiprefinecost(.@part, REFINE_COST_ENRICHED, REFINE_MATERIAL_ID);
- .@material[2] = getequiprefinecost(.@part, REFINE_COST_HD, REFINE_MATERIAL_ID);
- .@is_enriched = false;
- if (countitem(.@material[0]))
- .@mate$[0] = getitemname(.@material[0]);
- else
- .@mate$[0] = "^8C8C8C"+ getitemname(.@material[0]) +"^000000";
- if (countitem(.@material[1]))
- .@mate$[1] = getitemname(.@material[1]);
- else
- .@mate$[1] = "^8C8C8C"+ getitemname(.@material[1]) +"^000000";
- if (.@equip_refine > 6 && countitem(.@material[2]))
- .@mate$[2] = getitemname(.@material[2]);
- else
- .@mate$[2] = "^8C8C8C"+ getitemname(.@material[2]) +"^000000";
- switch( select( .@mate$[0], .@mate$[1], .@mate$[2], "Cancel" ) ) {
- case 1:// NORMAL
- .@choose = .@material[0];
- break;
- case 2:// ENRICHED
- .@is_enriched = true;
- .@choose = .@material[1];
- break;
- case 3:// HD
- if (.@equip_refine < 7) {
- mes "[Shadow Blacksmith]";
- mes "HD Ore can only used for +7 or higher refine level items.";
- close;
- }
- .@hoihoi = 1;
- .@choose = .@material[2];
- break;
- case 4:
- mes "[Shadow Blacksmith]";
- mes "You've cancelled refining.";
- close;
- }
- if (!countitem(.@choose)) {
- mes "[Shadow Blacksmith]";
- mes "You do not have enough "+ getitemname(.@choose) +".";
- close;
- }
- if (Zeny < .@zeny_cost) {
- mes "[Shadow Blacksmith]";
- mes "You do not have enough zeny.";
- close;
- }
- if (.@equip_refine > 9) {
- mes "[Shadow Blacksmith]";
- mes "Shadow Equipment can be refined to the maximum of 10...";
- close;
- }
- if (!getequipisenableref(.@part)) {
- mes "[Shadow Blacksmith]";
- mes "This item cannot be refined.";
- close;
- }
- if (getequippercentrefinery(.@part) < 100) {
- mes "[Shadow Blacksmith]";
- mes "The safety refine level for Shadow Equipment is +4.";
- if (!.@hoihoi)
- mes "Shadow equipment may be destroyed in subsequent refinements. Want to get started?";
- else
- mes "The next refinement, if it fails, will degrade the refinement. Do you want to refine?";
- next;
- if (select("Proceed","Cancel") == 2) {
- mes "[Shadow Blacksmith]";
- mes "Heh, I knew it!";
- close;
- }
- }
- mes "[Shadow Blacksmith]";
- mes "Well then.. here goes nothing!";
- next;
- delitem .@choose,1;
- Zeny -= .@zeny_cost;
- // anti-hack
- if (callfunc("F_IsEquipIDHack", .@part, .@equip_id) || callfunc("F_IsEquipCardHack", .@part, .@card[0], .@card[1], .@card[2], .@card[3]) || callfunc("F_IsEquipRefineHack", .@part, .@equip_refine))
- close;
- if (getequippercentrefinery(.@part, .@is_enriched) > rand(100)) {
- successrefitem .@part;
- mes "[Shadow Blacksmith]";
- mes "It worked! It worked!";
- next;
- } else {
- if (.@hoihoi)
- downrefitem .@part;
- else
- failedrefitem .@part;
- mes "[Shadow Blacksmith]";
- mes "Oh Odin No!";
- close;
- }
- }
- }
- //moc_paraup,45,185,5 duplicate(ShadowBlacksmith) Shadow Blacksmith#eden1 4_F_JOB_BLACKSMITH // Commented out until it's added to the map index
- //prt_in,61,54,3 duplicate(ShadowBlacksmith) Shadow Blacksmith#itemmall 4_F_JOB_BLACKSMITH
- itemmall,31,76,3 duplicate(ShadowBlacksmith) Shadow Blacksmith#itemmall 4_F_JOB_BLACKSMITH
|