You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
882 lines
26 KiB
Plaintext
882 lines
26 KiB
Plaintext
//===== rAthena Script =======================================
|
|
//= Friday Memorial Dungeon
|
|
//===== Description: =========================================
|
|
//= [Walkthrough Conversion]
|
|
//= Friday Memorial Dungeon
|
|
//===== Changelogs: ==========================================
|
|
//= 1.0 Initial release [Everade]
|
|
//= 1.1 Clean-up [Capuche]
|
|
//============================================================
|
|
|
|
gef_tower,57,170,3 script Marry Jay 4_F_JOB_BLACKSMITH,{
|
|
if (BaseLevel < 130) {
|
|
mes "[Marry Jay]";
|
|
mes "Your base level is too low, come back when you hit level 130.";
|
|
close;
|
|
}
|
|
mes "^ff0000If you do any monster processing, such as monster taming within the dungeon, it won't count towards your progress. Please take note.^000000";
|
|
next;
|
|
.@day = gettime(DT_DAYOFWEEK);
|
|
if (.@day != FRIDAY) {
|
|
mes "[Marry Jay]";
|
|
mes "Oh, a curious onlooker? I'm Marry Jay, the person in charge of Fridays among the days of the week.";
|
|
next;
|
|
select( "When is the opening time?" );
|
|
mes "[Marry Jay]";
|
|
mes "The dungeon will be open during:";
|
|
mes "^0000FFFriday 00:00 ~ Friday 23:59^000000";
|
|
next;
|
|
mes "[Marry Jay]";
|
|
mes "I hope to see you when Friday arrives~";
|
|
close;
|
|
}
|
|
.@md_name$ = "Friday Dungeon";
|
|
|
|
switch(checkquest(12379,PLAYTIME)) {
|
|
case -1:
|
|
break;
|
|
case 0:
|
|
case 1:
|
|
mes "[Marry Jay]";
|
|
mes "Sorry, but the entry period to the " + .@md_name$ + " has expired.";
|
|
mes "Take a rest while waiting for the dungeon to be available again.";
|
|
close;
|
|
case 2:
|
|
erasequest 12379;
|
|
mes "[Marry Jay]";
|
|
mes "The cooldown has expired.";
|
|
mes "You may re-enter the Memorial Dungeon.";
|
|
close;
|
|
}
|
|
mes "[Marry Jay]";
|
|
mes "You came just in time.";
|
|
mes "The memorial dungeon is just ready to be opened.";
|
|
mes "Would you like to enter now?";
|
|
next;
|
|
|
|
if (is_party_leader() == true)
|
|
.@menu$ = "Prepare Friday Memorial";
|
|
|
|
switch( select( .@menu$, "Enter Friday Memorial", "Cancel" ) ) {
|
|
case 1:
|
|
instance_create(.@md_name$);
|
|
mes "[Marry Jay]";
|
|
mes "The Memorial Dungeon has been created.";
|
|
mes "You may now enter.";
|
|
close;
|
|
case 2:
|
|
switch( instance_enter(.@md_name$) ) {
|
|
case IE_NOMEMBER:
|
|
if (is_party_leader() == true)
|
|
end;
|
|
mes "Only party members can enter this Memorial dungeon.";
|
|
close;
|
|
case IE_NOINSTANCE:
|
|
if (is_party_leader() == true) {
|
|
mes "There is no Memorial Dungeon registered.";
|
|
close;
|
|
}
|
|
mes "The Friday Memorial Dungeon does not exist.";
|
|
mes "Your party leader has not yet created the Memorial dungeon.";
|
|
close;
|
|
case IE_OTHER:
|
|
mes "An unknown error occurred.";
|
|
close;
|
|
case IE_OK:
|
|
mes "[Marry Jay]";
|
|
mes "Off you go!";
|
|
mapannounce "gef_tower", "" + strcharinfo(0) + " of the party, " + getpartyname( getcharid(1) ) + ", is entering the " + .@md_name$ + ".", bc_map, 0xFF99;
|
|
if (isbegin_quest(12379) < 1)
|
|
setquest 12379;
|
|
end;
|
|
}
|
|
end;
|
|
case 3:
|
|
mes "[Marry Jay]";
|
|
mes "You have not prepared?";
|
|
mes "Can't really help it I guess";
|
|
close;
|
|
}
|
|
end;
|
|
}
|
|
|
|
//Instance
|
|
1@md_gef,185,81 monster Shining Plant 1083,1,1800000,900000
|
|
|
|
1@md_gef,110,129,6 script Marry Jay#0_1 4_F_JOB_BLACKSMITH,{
|
|
if (is_party_leader() == false)
|
|
end;
|
|
mes "[Marry Jay]";
|
|
mes "Before we start setting up the environment here, we'll give you the chance to choose an appropriate difficulty level.";
|
|
mes "I could make my own choice, but each person handles it differently based on their abilities.";
|
|
next;
|
|
switch( select( "Cancel", "LV130 ~ 199", "LV200 + " ) ) {
|
|
case 1:
|
|
close;
|
|
case 2:
|
|
//MinLevel, Lich Lord, Nightmare, Jakk, Ghoul, Drainliar
|
|
'hard = 0;
|
|
setarray 'mob[0],130,3658,3660,3662,3664,3666;
|
|
break;
|
|
case 3:
|
|
if (BaseLevel < 200) {
|
|
mes "[Marry Jay]";
|
|
mes "You can't choose this difficulty, because your base level is below 200.";
|
|
close;
|
|
}
|
|
'hard = 1;
|
|
setarray 'mob[0],200,3659,3661,3663,3665,3667;
|
|
break;
|
|
}
|
|
if (BaseLevel < 'mob[0]) {
|
|
mes "[Marry Jay]";
|
|
mes "Your base level is too low to select this, you need to be level " + 'mob[0] + " or above.";
|
|
close;
|
|
}
|
|
close2;
|
|
npctalk "Now, this place is about to become a hunting ground. I'll get out and close the front door.";
|
|
sleep 4000;
|
|
npctalk "Good Luck~";
|
|
sleep 3000;
|
|
if ('step == 0) {
|
|
'step = 1;
|
|
donpcevent instance_npcname("md_gef_mobs_spawn") + "::OnStart";
|
|
disablenpc();
|
|
enablenpc instance_npcname("The Stranger#cadaver");
|
|
enablenpc instance_npcname("Bizzare Sculpture#boss");
|
|
}
|
|
end;
|
|
}
|
|
|
|
1@md_gef,1,1,6 script md_gef_mobs_spawn -1,{
|
|
end;
|
|
OnStart:
|
|
.@npc_name$ = instance_npcname("md_gef_mobs_spawn");
|
|
monster 'map_md_gef$,0,0,"Nightmare",'mob[2],20, .@npc_name$ + "::OnNightmareDead";
|
|
monster 'map_md_gef$,0,0,"Jakk",'mob[3],30, .@npc_name$ + "::OnJakkDead";
|
|
monster 'map_md_gef$,0,0,"Ghoul",'mob[4],30, .@npc_name$ + "::OnGhoulDead";
|
|
monster 'map_md_gef$,0,0,"Drainliar",'mob[5],20, .@npc_name$ + "::OnDrainliarDead";
|
|
end;
|
|
|
|
OnNightmareDead:
|
|
callsub( S_Mob, 'mob[2], "Nightmare", "OnNightmareDead" );
|
|
OnJakkDead:
|
|
callsub( S_Mob, 'mob[3], "Jakk", "OnJakkDead" );
|
|
OnGhoulDead:
|
|
callsub( S_Mob, 'mob[4], "Ghoul", "OnGhoulDead" );
|
|
OnDrainliarDead:
|
|
callsub( S_Mob, 'mob[5], "Drainliar", "OnDrainliarDead" );
|
|
|
|
S_Mob:
|
|
'count++;
|
|
if (('count % 100) == 0) {
|
|
'rand_chest++;
|
|
if ('rand_chest > 4)
|
|
'rand_chest = 1;
|
|
// Treasure Chest Spawn
|
|
donpcevent instance_npcname("#fd_box" + 'rand_chest) + "::OnStart";
|
|
}
|
|
sleep 10000;
|
|
monster 'map_md_gef$,0,0, getarg(1), getarg(0),1, instance_npcname("md_gef_mobs_spawn") + "::" + getarg(2);
|
|
end;
|
|
|
|
OnInstanceInit:
|
|
'step = 0;
|
|
'hard = 0;
|
|
'count = 0;
|
|
'rand_chest = 0;
|
|
'freestones = 0;
|
|
'boss_actv = 0;
|
|
'map_md_gef$ = instance_mapname("1@md_gef");
|
|
end;
|
|
}
|
|
|
|
|
|
1@md_gef,110,129,6 script(DISABLED) Mary Juj#0_2 4_F_JOB_BLACKSMITH,{
|
|
npctalk "Hello";
|
|
end;
|
|
}
|
|
|
|
1@md_gef,183,222,5 script(DISABLED) The Stranger#cadaver 4_TOWER_11,{
|
|
mes "It is a stranger's corpse.";
|
|
mes "Perhaps he died while wandering in this place on the search for treasure.";
|
|
next;
|
|
if (select( "Calm down", "Investigate the body" ) == 1) {
|
|
mes "You respect the dead and decided to leave the body alone.";
|
|
close;
|
|
}
|
|
mes "Looking at a hastily scribbled note in his pocket, perhaps the adventurer's name was Walter.";
|
|
next;
|
|
mes "[Adventurer's Log]";
|
|
mes "My name is Walter. For the adventurers who will visit this place in the future, I'm leaving this so that you don't make the same mistake again.";
|
|
next;
|
|
mes "[Adventurer's Log]";
|
|
mes "On the first day, I curiously put my hand on the slab of a strange Sculpture nearby.";
|
|
mes "...and I awokened something that I should not have.";
|
|
next;
|
|
mes "[Adventurer's Log]";
|
|
mes "Right now the revived ancient king is wandering in front of me.";
|
|
mes "Perhaps he has no memories of his previous life.";
|
|
mes "One thing is certain, he will kill me.";
|
|
next;
|
|
mes "[Adventurer's Log]";
|
|
mes "To the adventurers who will visit this place in the future, I hope you do not make the same mistake as me.";
|
|
mes "If you do see a suspicious slab, do not show any interest and pass by it.";
|
|
next;
|
|
mes "[Adventurer's Log]";
|
|
mes "Again, never touch the slab. Whatever temptation you may have.";
|
|
if ('freestones != 0)
|
|
close;
|
|
next;
|
|
mes "Several craft stones fall from his body. They were probably collected while exploring this place.";
|
|
close2;
|
|
if ('freestones == 0) {
|
|
'freestones = 1;
|
|
if ('hard == 1)
|
|
.@num = rand(7,9);
|
|
else
|
|
.@num = rand(5,7);
|
|
for ( .@i = 0; .@i < .@num; ++.@i )
|
|
makeitem 25235,1, 'map_md_gef$, rand(181,183), rand(221,224);
|
|
}
|
|
end;
|
|
}
|
|
|
|
1@md_gef,199,73,0 script(DISABLED) Bizzare Sculpture#boss CLEAR_NPC,{
|
|
if ('count < 100) {
|
|
mes "It is a strange sculpture with a lot of dust piled up. I don't see anything suspicious.";
|
|
close;
|
|
}
|
|
if ('boss_actv >= 1) {
|
|
mes "Craft Stones have been melted by a powerful force into the sockets.";
|
|
mes "Seems like the sockets can't be used for a while.";
|
|
close;
|
|
}
|
|
mes "At some point, the accumulated dust scatters, and 10 hollow holes are visible on the slab under the sculpture.";
|
|
next;
|
|
mes "Each of the 10 hollow sockets seem to perfectly fit a craft stone.";
|
|
next;
|
|
if (select( "Ignore", "Try inserting craft stones" ) == 1)
|
|
end;
|
|
if (countitem(25235) < 10) {
|
|
mes "Craft Stones have been melted by a powerful force into the sockets.";
|
|
mes "Seems like the sockets can't be used for a while.";
|
|
close;
|
|
}
|
|
mes "When you insert a craft stone into a hole, it emits a bright light and melts.";
|
|
next;
|
|
delitem 25235,10;
|
|
specialeffect EF_ANGELUS;
|
|
|
|
if (rand(1,10) == 10) {
|
|
mes "Something seems to have changed in the air around me.";
|
|
instance_announce 0, "Lord of the Dead: Who Awakened Me? I will meet you in person and ask you why.", bc_map, "0xFFFF00";
|
|
if ('boss_actv == 0) {
|
|
'boss_actv = 1;
|
|
monster 'map_md_gef$,210,110,"Lich King",'mob[1],1;
|
|
}
|
|
}
|
|
else {
|
|
mes "But nothing else happened.";
|
|
close2;
|
|
if ('boss_actv == 0) {
|
|
disablenpc(); // Disable NPC for 5 minutes when MVP didn't spawn.
|
|
initnpctimer;
|
|
}
|
|
end;
|
|
}
|
|
close;
|
|
|
|
OnTimer300000:
|
|
stopnpctimer;
|
|
enablenpc();
|
|
end;
|
|
}
|
|
|
|
|
|
// Treasure Chest Reward
|
|
1@md_gef,212,212,3 script(DISABLED) #fd_box1 4_TREASURE_BOX,{
|
|
specialeffect EF_COIN;
|
|
disablenpc();
|
|
stopnpctimer;
|
|
sleep 500;
|
|
|
|
if ('hard == 1)
|
|
.@num = rand(7,9);
|
|
else
|
|
.@num = rand(5,7);
|
|
|
|
.@npc_name$ = strnpcinfo(2);
|
|
|
|
if (.@npc_name$ == "fd_box1") {
|
|
for ( .@i = 0; .@i < .@num; ++.@i )
|
|
makeitem 25235,1, 'map_md_gef$, rand(210,214), rand(210,214);
|
|
}
|
|
if (.@npc_name$ == "fd_box2") {
|
|
for ( .@i = 0; .@i < .@num; ++.@i )
|
|
makeitem 25235,1, 'map_md_gef$, rand(188,192), rand(54,58);
|
|
}
|
|
if (.@npc_name$ == "fd_box3") {
|
|
for ( .@i = 0; .@i < .@num; ++.@i )
|
|
makeitem 25235,1, 'map_md_gef$, rand(47,51), rand(55,59);
|
|
}
|
|
if (.@npc_name$ == "fd_box4") {
|
|
for ( .@i = 0; .@i < .@num; ++.@i )
|
|
makeitem 25235,1, 'map_md_gef$, rand(42,46), rand(209,213);
|
|
}
|
|
end;
|
|
|
|
OnStart:
|
|
enablenpc();
|
|
instance_announce 0, "A treasure chest appeared somewhere in the dungeon. It'll disappear after a while, so let's find it.", bc_map, "0xff5500";
|
|
initnpctimer;
|
|
end;
|
|
OnTimer180000: //3min before chest disappears
|
|
disablenpc();
|
|
stopnpctimer;
|
|
end;
|
|
}
|
|
1@md_gef,190,56,3 duplicate(#fd_box1) #fd_box2 4_TREASURE_BOX
|
|
1@md_gef,49,57,3 duplicate(#fd_box1) #fd_box3 4_TREASURE_BOX
|
|
1@md_gef,44,211,3 duplicate(#fd_box1) #fd_box4 4_TREASURE_BOX
|
|
|
|
|
|
//Merchant
|
|
gef_tower,57,167,3 script Amateur Collector#pa0829 1_F_01,{
|
|
disable_items;
|
|
function F_equip_menu;
|
|
function F_enchant;
|
|
|
|
if (checkweight(1201,1) == 0) {
|
|
mes "You have too many kinds of objects. Clear your inventory.";
|
|
close;
|
|
}
|
|
if (MaxWeight - Weight < 10000) {
|
|
mes "Can't continue because you have too many heavy objects. Reduce your total weight by clearing your inventory.";
|
|
close;
|
|
}
|
|
mes "[Amateur Collector]";
|
|
mes "If you bring me a " + mesitemlink(25235, false) + ", I can enchant a wonderful effect on your accessory!";
|
|
next;
|
|
switch( select( "What can you do with the Crafting Stone?", "Accessory Enchantment", "Reset Enchant" ) ) {
|
|
case 1:
|
|
mes "[Amateur Collector]";
|
|
mes "I trade expensive stones from the dungeon in exchange for my craftsmanship. I'm still a beginner, but my skills are passable.";
|
|
mes "Please take care of me.";
|
|
next;
|
|
if (select( "I've heard this before.", "I'm listening." ) == 1) {
|
|
mes "[Amateur Collector]";
|
|
mes "Is that so?";
|
|
close;
|
|
}
|
|
mes "[Amateur Collector]";
|
|
mes "By using the Craft Stone, I can enchant one of your accessories with abilities.";
|
|
next;
|
|
mes "[Amateur Collector]";
|
|
mes "I need 10 x " + mesitemlink(25235, false) + " and 100,000 Zeny.";
|
|
mes "There is no failure in the enchantment process.";
|
|
next;
|
|
mes "[Amateur Collector]";
|
|
mes "However ^0000FFif the accessory has a random option, the random option will be removed after enchantment.^000000";
|
|
next;
|
|
select( "Anything else?" );
|
|
mes "[Amateur Collector]";
|
|
mes "Cards slotted to the accessory will remain after the enchantement.";
|
|
next;
|
|
mes "[Amateur Collector]";
|
|
mes "A reset is possible, but I can't say that I'm experienced.";
|
|
mes "My success rate is:";
|
|
mes "Royal Ring: 80%";
|
|
mes "Other Accessory: 20%";
|
|
next;
|
|
mes "[Amateur Collector]";
|
|
mes "^0000FFIf the accessory has a random option, the random option will be removed after initialization.^000000";
|
|
close;
|
|
case 2:
|
|
.@type = 1;
|
|
.@type_name$ = "enchant";
|
|
break;
|
|
case 3:
|
|
.@type = 2;
|
|
.@type_name$ = "reset";
|
|
break;
|
|
}
|
|
|
|
.@slot = F_equip_menu();
|
|
.@equip_id = getequipid(.@slot);
|
|
setarray .@equip_card[0], getequipcardid(.@slot,0), getequipcardid(.@slot,1), getequipcardid(.@slot,2), getequipcardid(.@slot,3);
|
|
copyarray .@card[0], .@equip_card[0], 4;
|
|
|
|
switch( .@equip_id ) {
|
|
case 0:
|
|
mes "[Amateur Collector]";
|
|
mes "Please equip your accessory.";
|
|
close;
|
|
case 28483:
|
|
case 2601:
|
|
case 2602:
|
|
case 2603:
|
|
case 2605:
|
|
case 2607:
|
|
case 2608:
|
|
case 2609:
|
|
case 2610:
|
|
case 2611:
|
|
case 2612:
|
|
case 2613:
|
|
case 2614:
|
|
case 2615:
|
|
case 2616:
|
|
case 2617:
|
|
case 2618:
|
|
case 2619:
|
|
case 2620:
|
|
case 2621:
|
|
case 2622:
|
|
case 2623:
|
|
case 2625:
|
|
case 2626:
|
|
case 2627:
|
|
case 2628:
|
|
case 2636:
|
|
case 2637:
|
|
case 2638:
|
|
case 2639:
|
|
case 2640:
|
|
case 2641:
|
|
case 2645:
|
|
case 2648:
|
|
case 2649:
|
|
case 2650:
|
|
case 2651:
|
|
case 2652:
|
|
case 2653:
|
|
case 2654:
|
|
case 2655:
|
|
case 2656:
|
|
case 2658:
|
|
case 2663:
|
|
case 2664:
|
|
case 2665:
|
|
case 2666:
|
|
case 2667:
|
|
case 2671:
|
|
case 2680:
|
|
case 2692:
|
|
case 2700:
|
|
case 2701:
|
|
case 2702:
|
|
case 2703:
|
|
case 2712:
|
|
case 2714:
|
|
case 2715:
|
|
case 2716:
|
|
case 2718:
|
|
case 2719:
|
|
case 2720:
|
|
case 2721:
|
|
case 2722:
|
|
case 2723:
|
|
case 2724:
|
|
case 2725:
|
|
case 2726:
|
|
case 2727:
|
|
case 2728:
|
|
case 2729:
|
|
case 2730:
|
|
case 2731:
|
|
case 2732:
|
|
case 2736:
|
|
case 2737:
|
|
case 2743:
|
|
case 2744:
|
|
case 2745:
|
|
case 2746:
|
|
case 2747:
|
|
case 2748:
|
|
case 2749:
|
|
case 2766:
|
|
case 2767:
|
|
case 2768:
|
|
case 2769:
|
|
case 2770:
|
|
case 2771:
|
|
case 2772:
|
|
case 2773:
|
|
case 2774:
|
|
case 2777:
|
|
case 2778:
|
|
case 2779:
|
|
case 2780:
|
|
case 2781:
|
|
case 2783:
|
|
case 2784:
|
|
case 2787:
|
|
case 2788:
|
|
case 2789:
|
|
case 2790:
|
|
case 2794:
|
|
case 2795:
|
|
case 2800:
|
|
case 2801:
|
|
case 2802:
|
|
case 2803:
|
|
case 2804:
|
|
case 2805:
|
|
case 2807:
|
|
case 2808:
|
|
case 2809:
|
|
case 2810:
|
|
case 2826:
|
|
case 2827:
|
|
case 2843:
|
|
case 2853:
|
|
case 2854:
|
|
case 2881:
|
|
case 2956:
|
|
break;
|
|
default:
|
|
mes "[Amateur Collector]";
|
|
mes "I cannot " + .@type_name$ + " this " + mesitemlink(.@equip_id, false) + " accessory.";
|
|
close;
|
|
}
|
|
|
|
if (.@type == 1) { // enchant
|
|
switch( .@equip_id ) {
|
|
case 28483: //Royal Ring Enchantment
|
|
if (.@equip_card[2] != 0) {
|
|
mes "[Amateur Collector]";
|
|
mes "The " + mesitemlink(.@equip_id, false) + " already has maximum enchantment.";
|
|
mes "I cannot work on this any further.";
|
|
close;
|
|
}
|
|
.@pos = .@equip_card[3] != 0 ? 2 : 3;
|
|
mes "[Amateur Collector]";
|
|
mes "Please select an enchantment type~";
|
|
next;
|
|
switch( select( "Physical", "Magical", "Ranged" ) ) {
|
|
case 1:
|
|
if (.@pos == 2)
|
|
.@equip_card[2] = F_enchant(2);
|
|
else
|
|
.@equip_card[3] = F_enchant(3);
|
|
break;
|
|
case 2:
|
|
if (.@pos == 2)
|
|
.@equip_card[2] = F_enchant(4);
|
|
else
|
|
.@equip_card[3] = F_enchant(5);
|
|
break;
|
|
case 3:
|
|
if (.@pos == 2)
|
|
.@equip_card[2] = F_enchant(6);
|
|
else
|
|
.@equip_card[3] = F_enchant(7);
|
|
break;
|
|
}
|
|
if (.@pos == 2) {
|
|
mes "[Amateur Collector]";
|
|
mes "Are you sure to enhance the " + mesitemlink(.@equip_id, false) + "?";
|
|
mes "^0000FFThere is a no chance of failure^000000.";
|
|
next;
|
|
if (select( "Yes, please proceed", "Cancel" ) == 2)
|
|
end;
|
|
}
|
|
if (countitem(25235) < 10) {
|
|
mes "[Amateur Collector]";
|
|
mes "Please bring me 10 x " + mesitemlink(25235, false) + ".";
|
|
close;
|
|
}
|
|
if (Zeny < 100000) {
|
|
mes "[Amateur Collector]";
|
|
mes "I need 100,000 zeny!";
|
|
close;
|
|
}
|
|
delitem 25235,10; //Catalyst
|
|
Zeny -= 100000;
|
|
|
|
// anti-hack
|
|
if (callfunc("F_IsEquipIDHack", .@slot, .@equip_id) || callfunc("F_IsEquipCardHack", .@slot, .@card[0], .@card[1], .@card[2], .@card[3]))
|
|
end;
|
|
|
|
delequip .@slot;
|
|
specialeffect2 EF_REPAIRWEAPON;
|
|
mes "[Amateur Collector]";
|
|
mes "The " + mesitemlink(.@equip_id, false) + " has been enchanted!!";
|
|
getitem2 .@equip_id,1,1,0,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@equip_card[3];
|
|
close;
|
|
|
|
default: // Normal Accessory Enchantment
|
|
if (.@equip_card[3] != 0) {
|
|
mes "[Amateur Collector]";
|
|
mes "The " + mesitemlink(.@equip_id, false) + " already has an enchant.";
|
|
mes "I cannot work on this any further.";
|
|
close;
|
|
}
|
|
mes "[Amateur Collector]";
|
|
mes "Are you sure you want to enhance the " + mesitemlink(.@equip_id, false) + "?";
|
|
mes "^0000FFThere is a no chance of failure^000000.";
|
|
next;
|
|
if (select( "Yes, please proceed", "Cancel") == 2)
|
|
end;
|
|
if (countitem(25235) < 10) {
|
|
mes "[Amateur Collector]";
|
|
mes "Please bring me 10 x " + mesitemlink(25235, false) + ".";
|
|
close;
|
|
}
|
|
if (Zeny < 100000) {
|
|
mes "[Amateur Collector]";
|
|
mes "I need 100,000 zeny!";
|
|
close;
|
|
}
|
|
delitem 25235,10; //Catalyst
|
|
Zeny -= 100000;
|
|
|
|
// anti-hack
|
|
if (callfunc("F_IsEquipIDHack", .@slot, .@equip_id) || callfunc("F_IsEquipCardHack", .@slot, .@card[0], .@card[1], .@card[2], .@card[3]))
|
|
end;
|
|
|
|
delequip .@slot;
|
|
.@enchant = F_enchant(1);
|
|
specialeffect2 EF_REPAIRWEAPON;
|
|
mes "[Amateur Collector]";
|
|
mes "The " + mesitemlink(.@equip_id, false) + " has been enchanted with " + mesitemlink(.@enchant, false) + ".";
|
|
getitem2 .@equip_id,1,1,0,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@enchant;
|
|
close;
|
|
}
|
|
end;
|
|
}
|
|
else { // reset
|
|
if (.@equip_id == 28483) {
|
|
.@pos = 2;
|
|
.@success = 80; // success royal
|
|
} else {
|
|
.@pos = 3;
|
|
.@success = 20; // success normal
|
|
}
|
|
if (.@equip_card[.@pos] == 0) {
|
|
mes "[Amateur Collector]";
|
|
mes "The " + mesitemlink(.@equip_id, false) + " is not at its maximum enchantment.";
|
|
mes "I cannot reset this accessory.";
|
|
close;
|
|
}
|
|
mes "[Amateur Collector]";
|
|
mes "All enchanted effects will be removed from the " + mesitemlink(.@equip_id, false) + "?";
|
|
mes "^FF0000There is a " + .@success + "% chance of success. The accessory will be destroyed if the reset fails!^000000";
|
|
next;
|
|
if (select( "I'll be back later", "Please proceed") == 1)
|
|
end;
|
|
if (countitem(25235) < 10) {
|
|
mes "[Amateur Collector]";
|
|
mes "Please bring me 10 x " + mesitemlink(25235, false) + "";
|
|
close;
|
|
}
|
|
if (Zeny < 100000) {
|
|
mes "[Amateur Collector]";
|
|
mes "I need 100,000 zeny!";
|
|
close;
|
|
}
|
|
delitem 25235,10; //Catalyst
|
|
Zeny -= 100000;
|
|
|
|
// anti-hack
|
|
if (callfunc("F_IsEquipIDHack", .@slot, .@equip_id) || callfunc("F_IsEquipCardHack", .@slot, .@card[0], .@card[1], .@card[2], .@card[3]))
|
|
end;
|
|
|
|
delequip .@slot;
|
|
if (rand(100) > .@success) {
|
|
specialeffect2 EF_SUI_EXPLOSION;
|
|
mes "[Amateur Collector]";
|
|
mes "Darn it...";
|
|
mes "I have failed and the accessory has been destroyed. I'm so sorry.";
|
|
close;
|
|
}
|
|
specialeffect2 EF_REPAIRWEAPON;
|
|
mes "[Amateur Collector]";
|
|
mes "I have succeeded.";
|
|
mes "The " + mesitemlink(.@equip_id, false) + " has been initialized.";
|
|
getitem2 .@equip_id,1,1,0,0,.@equip_card[0],.@equip_card[1],0,0;
|
|
close;
|
|
}
|
|
end;
|
|
|
|
function F_equip_menu {
|
|
.@l$ = getitemname(getequipid(EQI_ACC_L));
|
|
.@r$ = getitemname(getequipid(EQI_ACC_R));
|
|
.@acc_l$ = .@l$ == "null" ? "" : "Left Acc - " + .@l$;
|
|
.@acc_r$ = .@r$ == "null" ? "" : "Right Acc - " + .@r$;
|
|
|
|
switch( select( .@acc_l$, .@acc_r$ ) ) {
|
|
case 1:
|
|
.@slot = EQI_ACC_L;
|
|
break;
|
|
case 2:
|
|
.@slot = EQI_ACC_R;
|
|
break;
|
|
}
|
|
return .@slot;
|
|
}
|
|
|
|
function F_enchant {
|
|
.@type = getarg(0);
|
|
|
|
switch(.@type) {
|
|
case 1: //Normal Enchant
|
|
.@i = rand(920);
|
|
if (.@i < 30) .@enchant = 4701; //STR+2
|
|
else if (.@i < 60) .@enchant = 4702; //STR+3
|
|
else if (.@i < 90) .@enchant = 4703; //STR+4
|
|
else if (.@i < 120) .@enchant = 4711; //INT+2
|
|
else if (.@i < 150) .@enchant = 4712; //INT+3
|
|
else if (.@i < 180) .@enchant = 4713; //INT+4
|
|
else if (.@i < 210) .@enchant = 4721; //DEX+2
|
|
else if (.@i < 240) .@enchant = 4722; //DEX+3
|
|
else if (.@i < 270) .@enchant = 4723; //DEX+4
|
|
else if (.@i < 300) .@enchant = 4731; //AGI+2
|
|
else if (.@i < 330) .@enchant = 4732; //AGI+3
|
|
else if (.@i < 360) .@enchant = 4733; //AGI+4
|
|
else if (.@i < 390) .@enchant = 4741; //VIT+2
|
|
else if (.@i < 420) .@enchant = 4742; //VIT+3
|
|
else if (.@i < 450) .@enchant = 4743; //VIT+4
|
|
else if (.@i < 480) .@enchant = 4796; //HP+200
|
|
else if (.@i < 510) .@enchant = 4798; //HP+400
|
|
else if (.@i < 540) .@enchant = 4792; //DEF+6
|
|
else if (.@i < 570) .@enchant = 4794; //DEF+12
|
|
else if (.@i < 600) .@enchant = 4800; //SP+50
|
|
else if (.@i < 630) .@enchant = 4801; //SP+100
|
|
else if (.@i < 660) .@enchant = 4786; //MDEF+2
|
|
else if (.@i < 690) .@enchant = 4787; //MDEF+4
|
|
else if (.@i < 710) .@enchant = 4861; //MHP+1%
|
|
else if (.@i < 730) .@enchant = 4862; //MHP+2%
|
|
else if (.@i < 750) .@enchant = 4929; //MSP+1%
|
|
else if (.@i < 770) .@enchant = 4882; //ATK+1%
|
|
else if (.@i < 790) .@enchant = 4883; //MATK+1%
|
|
else if (.@i < 800) .@enchant = 4817; //Sharp2
|
|
else if (.@i < 810) .@enchant = 4816; //Sharp3
|
|
else if (.@i < 815) .@enchant = 4843; //Sharp4
|
|
else if (.@i < 825) .@enchant = 29047; //Fatal
|
|
else if (.@i < 835) .@enchant = 4863; //Fatal1Lv
|
|
else if (.@i < 840) .@enchant = 4864; //Fatal2Lv
|
|
else if (.@i < 850) .@enchant = 4832; //Expert Archer1
|
|
else if (.@i < 860) .@enchant = 4813; //Spell3
|
|
else if (.@i < 870) .@enchant = 4812; //Spell4
|
|
else if (.@i < 875) .@enchant = 4826; //Spell5
|
|
else if (.@i < 885) .@enchant = 4805; //Archbishop1Lv
|
|
else if (.@i < 895) .@enchant = 4850; //Heal Amount2
|
|
else if (.@i < 905) .@enchant = 4809; //Fighting Spirit3
|
|
else if (.@i < 915) .@enchant = 4808; //Fighting Spirit4
|
|
else .@enchant = 4820; //Fighting Spirit5
|
|
break;
|
|
case 2: //Royal Physical Slot 3
|
|
.@i = rand(225);
|
|
if (.@i < 30) .@enchant = 4809; //Fighting Spirit3
|
|
else if (.@i < 60) .@enchant = 4808; //Fighting Spirit4
|
|
else if (.@i < 70) .@enchant = 4820; //Fighting Spirit5
|
|
else if (.@i < 80) .@enchant = 4821; //Fighting Spirit6
|
|
else if (.@i < 85) .@enchant = 4822; //Fighting Spirit7
|
|
else if (.@i < 115) .@enchant = 4818; //Sharp1
|
|
else if (.@i < 145) .@enchant = 4817; //Sharp2
|
|
else if (.@i < 155) .@enchant = 4816; //Sharp3
|
|
else if (.@i < 165) .@enchant = 4843; //Sharp4
|
|
else if (.@i < 170) .@enchant = 4844; //Sharp5
|
|
else if (.@i < 200) .@enchant = 4819; //Atk1
|
|
else if (.@i < 210) .@enchant = 4766; //ATK+2%
|
|
else if (.@i < 215) .@enchant = 4767; //ATK+3%
|
|
else if (.@i < 220) .@enchant = 4807; //Atk Speed1
|
|
else .@enchant = 4842; //Atk Speed2
|
|
break;
|
|
case 3: //Royal Physical Slot 4
|
|
.@i = rand(375);
|
|
if (.@i < 50) .@enchant = 4702; //STR+3
|
|
else if (.@i < 100) .@enchant = 4703; //STR+4
|
|
else if (.@i < 110) .@enchant = 4704; //STR+5
|
|
else if (.@i < 120) .@enchant = 4705; //STR+6
|
|
else if (.@i < 125) .@enchant = 4706; //STR+7
|
|
else if (.@i < 175) .@enchant = 4732; //AGI+3
|
|
else if (.@i < 225) .@enchant = 4733; //AGI+4
|
|
else if (.@i < 235) .@enchant = 4734; //AGI+5
|
|
else if (.@i < 245) .@enchant = 4735; //AGI+6
|
|
else if (.@i < 250) .@enchant = 4736; //AGI+7
|
|
else if (.@i < 300) .@enchant = 4742; //VIT+3
|
|
else if (.@i < 350) .@enchant = 4743; //VIT+4
|
|
else if (.@i < 360) .@enchant = 4744; //VIT+5
|
|
else if (.@i < 370) .@enchant = 4745; //VIT+6
|
|
else .@enchant = 4746; //VIT+7
|
|
break;
|
|
case 4: //Royal Magical Slot 3
|
|
.@i = rand(230);
|
|
if (.@i < 30) .@enchant = 4813; //Spell3
|
|
else if (.@i < 60) .@enchant = 4812; //Spell4
|
|
else if (.@i < 70) .@enchant = 4826; //Spell5
|
|
else if (.@i < 80) .@enchant = 4827; //Spell6
|
|
else if (.@i < 85) .@enchant = 4828; //Spell7
|
|
else if (.@i < 115) .@enchant = 4929; //MSP+1%
|
|
else if (.@i < 145) .@enchant = 4805; //Archbishop1Lv
|
|
else if (.@i < 155) .@enchant = 4850; //Archbishop2Lv
|
|
else if (.@i < 165) .@enchant = 4851; //Archbishop3Lv
|
|
else if (.@i < 170) .@enchant = 4852; //Archbishop4Lv
|
|
else if (.@i < 200) .@enchant = 4883; //MATK + 1%
|
|
else if (.@i < 210) .@enchant = 4896; //MATK + 2%
|
|
else if (.@i < 215) .@enchant = 4897; //MATK + 3%
|
|
else if (.@i < 225) .@enchant = 4760; //MATK 1Lv
|
|
else .@enchant = 4761; //MATK 2Lv
|
|
break;
|
|
case 5: //Royal Magical Slot 4
|
|
.@i = rand(375);
|
|
if (.@i < 50) .@enchant = 4712; //INT+3
|
|
else if (.@i < 100) .@enchant = 4713; //INT+4
|
|
else if (.@i < 110) .@enchant = 4714; //INT+5
|
|
else if (.@i < 120) .@enchant = 4715; //INT+6
|
|
else if (.@i < 125) .@enchant = 4716; //INT+7
|
|
else if (.@i < 175) .@enchant = 4722; //DEX+3
|
|
else if (.@i < 225) .@enchant = 4723; //DEX+4
|
|
else if (.@i < 235) .@enchant = 4724; //DEX+5
|
|
else if (.@i < 245) .@enchant = 4725; //DEX+6
|
|
else if (.@i < 250) .@enchant = 4726; //DEX+7
|
|
else if (.@i < 300) .@enchant = 4742; //VIT+3
|
|
else if (.@i < 350) .@enchant = 4743; //VIT+4
|
|
else if (.@i < 360) .@enchant = 4744; //VIT+5
|
|
else if (.@i < 370) .@enchant = 4745; //VIT+6
|
|
else .@enchant = 4746; //VIT+7
|
|
break;
|
|
case 6: //Royal Ranged Slot 3
|
|
.@i = rand(225);
|
|
if (.@i < 30) .@enchant = 29047; //Fatal
|
|
else if (.@i < 60) .@enchant = 4863; //Fatal1Lv
|
|
else if (.@i < 70) .@enchant = 4864; //Fatal2Lv
|
|
else if (.@i < 80) .@enchant = 4865; //Fatal3Lv
|
|
else if (.@i < 85) .@enchant = 4866; //Fatal4Lv
|
|
else if (.@i < 115) .@enchant = 4818; //Sharp1
|
|
else if (.@i < 145) .@enchant = 4817; //Sharp2
|
|
else if (.@i < 155) .@enchant = 4816; //Sharp3
|
|
else if (.@i < 165) .@enchant = 4843; //Sharp4
|
|
else if (.@i < 170) .@enchant = 4844; //Sharp5
|
|
else if (.@i < 200) .@enchant = 4832; //Expert Archer1
|
|
else if (.@i < 210) .@enchant = 4833; //Expert Archer2
|
|
else if (.@i < 215) .@enchant = 4834; //Expert Archer3
|
|
else if (.@i < 220) .@enchant = 4807; //Atk Speed1
|
|
else .@enchant = 4842; //Atk Speed2
|
|
break;
|
|
case 7: //Royal Ranged Slot 4
|
|
.@i = rand(375);
|
|
if (.@i < 50) .@enchant = 4732; //AGI+3
|
|
else if (.@i < 100) .@enchant = 4733; //AGI+4
|
|
else if (.@i < 110) .@enchant = 4734; //AGI+5
|
|
else if (.@i < 120) .@enchant = 4735; //AGI+6
|
|
else if (.@i < 125) .@enchant = 4736; //AGI+7
|
|
else if (.@i < 175) .@enchant = 4722; //DEX+3
|
|
else if (.@i < 225) .@enchant = 4723; //DEX+4
|
|
else if (.@i < 235) .@enchant = 4724; //DEX+5
|
|
else if (.@i < 245) .@enchant = 4725; //DEX+6
|
|
else if (.@i < 250) .@enchant = 4726; //DEX+7
|
|
else if (.@i < 300) .@enchant = 4752; //LUK+3
|
|
else if (.@i < 350) .@enchant = 4753; //LUK+4
|
|
else if (.@i < 360) .@enchant = 4754; //LUK+5
|
|
else if (.@i < 370) .@enchant = 4755; //LUK+6
|
|
else .@enchant = 4756; //LUK+7
|
|
break;
|
|
}
|
|
return .@enchant;
|
|
}
|
|
}
|