diff options
-rw-r--r-- | db/quest_db.conf | 80 | ||||
-rw-r--r-- | db/re/item_db.conf | 72 | ||||
-rw-r--r-- | db/re/map_zone_db.conf | 32 | ||||
-rw-r--r-- | npc/jobs/1-1e/ninja.txt | 7 | ||||
-rw-r--r-- | npc/other/gm_npcs.txt | 3 | ||||
-rw-r--r-- | npc/quests/quests_ein.txt | 2 | ||||
-rw-r--r-- | npc/quests/thana_quest.txt | 5 | ||||
-rw-r--r-- | npc/re/instances/BakonawaLake.txt | 4 | ||||
-rw-r--r-- | npc/re/jobs/2e/kagerou_oboro.txt | 2862 | ||||
-rw-r--r-- | npc/re/scripts_jobs.conf | 2 | ||||
-rw-r--r-- | sql-files/item_db_re.sql | 34 | ||||
-rw-r--r-- | src/map/battle.c | 17 | ||||
-rw-r--r-- | src/map/skill.c | 1 | ||||
-rw-r--r-- | src/map/status.c | 273 | ||||
-rw-r--r-- | src/map/status.h | 3 | ||||
-rw-r--r-- | src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc | 4 | ||||
-rw-r--r-- | src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc | 1 | ||||
-rw-r--r-- | src/plugins/HPMHooking/HPMHooking_map.Hooks.inc | 26 |
18 files changed, 3247 insertions, 181 deletions
diff --git a/db/quest_db.conf b/db/quest_db.conf index 7c2fcb591..55588dea2 100644 --- a/db/quest_db.conf +++ b/db/quest_db.conf @@ -3373,54 +3373,132 @@ quest_db: ( { Id: 5113 Name: "[Rest] Lord Knight" + Targets: ( + { + MobId: 1646 + Count: 1 + }, + ) }, { Id: 5114 Name: "[Rest] Paladin" + Targets: ( + { + MobId: 2235 + Count: 1 + }, + ) }, { Id: 5115 Name: "[Rest] High Priest" + Targets: ( + { + MobId: 1649 + Count: 1 + }, + ) }, { Id: 5116 Name: "[Rest] Champion" + Targets: ( + { + MobId: 2238 + Count: 1 + }, + ) }, { Id: 5117 Name: "[Rest] High Wizard" + Targets: ( + { + MobId: 1651 + Count: 1 + }, + ) }, { Id: 5118 Name: "[Rest] Professor" + Targets: ( + { + MobId: 2237 + Count: 1 + }, + ) }, { Id: 5119 Name: "[Rest] Whitesmith" + Targets: ( + { + MobId: 1648 + Count: 1 + }, + ) }, { Id: 5120 Name: "[Rest] Creator" + Targets: ( + { + MobId: 2236 + Count: 1 + }, + ) }, { Id: 5121 Name: "[Rest] Assassin Cross" + Targets: ( + { + MobId: 1647 + Count: 1 + }, + ) }, { Id: 5122 Name: "[Rest] Stalker" + Targets: ( + { + MobId: 2239 + Count: 1 + }, + ) }, { Id: 5123 Name: "[Rest] Sniper" + Targets: ( + { + MobId: 1650 + Count: 1 + }, + ) }, { Id: 5124 Name: "[Rest] Clown" + Targets: ( + { + MobId: 2240 + Count: 1 + }, + ) }, { Id: 5125 Name: "[Rest] Gypsy" + Targets: ( + { + MobId: 2241 + Count: 1 + }, + ) }, // Kagerou/Oboro Job Quest { @@ -5186,7 +5264,7 @@ quest_db: ( { Id: 7349 Name: "Vote" - TimeLimit: 1800 + TimeLimit: 7200 }, // Port Malaya { diff --git a/db/re/item_db.conf b/db/re/item_db.conf index c8d6c6ae0..5155db1f0 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -14126,6 +14126,7 @@ item_db: ( Script: <" bonus bInt,4; bonus bMdef,1; + bonus bMdef,getrefine(); bonus2 bSkillAtk,WZ_STORMGUST,getrefine(); if (getrefine() > 9) bonus2 bVariableCastrate,WZ_STORMGUST,-8; "> @@ -18620,6 +18621,7 @@ item_db: ( } if(getrefine()>8) { bonus bVariableCastrate,-20; + bonus bFixedCast,-200; } "> }, @@ -54151,6 +54153,9 @@ item_db: ( Loc: 256 Refine: false View: 615 + Script: <" + skill "SM_PROVOKE",3; + "> }, { Id: 5738 @@ -79964,7 +79969,7 @@ item_db: ( Id: 12402 AegisName: "29Fruit" Name: "29Truth" - Type: 2 + Type: 0 Buy: 0 Trade: { nodrop: true @@ -79975,6 +79980,7 @@ item_db: ( nomail: true noauction: true } + Script: <" percentheal 5,5; "> }, { Id: 12403 @@ -106847,7 +106853,7 @@ item_db: ( { Id: 16457 AegisName: "Tw_Nov_Scroll" - Name: "±?????????" + Name: "±???Â?Â?????" Type: 2 Buy: 20 Weight: 10 @@ -109443,7 +109449,7 @@ item_db: ( View: 11 Script: <" bonus2 bSkillAtk,RA_ARROWSTORM,(getrefine()*5); - bonus2 bSkillUseSP,RA_ARROWSTORM,(getrefine()*5); + bonus2 bSkillUseSP,RA_ARROWSTORM,(getrefine()*-5); if(readparam(bAgi)>=120) { bonus bAspd,1; } @@ -111051,11 +111057,11 @@ item_db: ( bonus bInt,2; bonus bHealPower,1; bonus bHealPower2,1; - if(getrefine() >= 6) { - bonus bHealPower,1; - } if(getrefine() >= 7) { - bonus bHealPower,1; + bonus bHealPower,5; + } + if(getrefine() >= 9) { + bonus bHealPower,3; } "> }, @@ -111353,13 +111359,9 @@ item_db: ( View: 761 Script: <" bonus bAtkRate,5; - if(getrefine() > 5 && getrefine() <= 12) { - bonus2 bAddRace,RC_DemiHuman,(getrefine() - 5); - bonus2 AddRaceTolerance,RC_DemiHuman,(getrefine() - 5); - } - if(getrefine() > 12) { - bonus2 bAddRace,RC_DemiHuman,7; - bonus2 AddRaceTolerance,RC_DemiHuman,7; + if(getrefine()>5) { + bonus2 bAddRace,RC_DemiHuman,(getrefine()-5); + bonus2 bAddRaceTolerance,RC_DemiHuman,(getrefine()-5); } "> }, @@ -111377,8 +111379,8 @@ item_db: ( bonus bMdef,5; bonus bMatkRate,5; if(getrefine()>5) { - bonus2 bAddRaceTolerance,RC_DemiHuman,(getrefine()-5); bonus2 bMagicAddRace,RC_DemiHuman,(getrefine()-5); + bonus2 bAddRaceTolerance,RC_DemiHuman,(getrefine()-5); } "> }, @@ -111437,7 +111439,12 @@ item_db: ( Loc: 256 EquipLv: 10 View: 766 - Script: <" bonus bMdef,3; "> + Script: <" + bonus bMdef,3; + autobonus "{ bonus bAtkEle,Ele_Dark; }",30,60000; + bonus2 bSubEle,Ele_Holy,-10; + bonus2 bSubRace,RC_Angel,-10; + "> }, { Id: 18606 @@ -112083,6 +112090,10 @@ item_db: ( Loc: 256 EquipLv: 80 View: 804 + Script: <" + bonus2 bHPDrainRate,10*(5+1*(getrefine()>7)+2*(getrefine()>8)+2*(getrefine()>9)),1+2*(getrefine()>5)+2*(getrefine()>7)+3*(getrefine()>9); + bonus2 bSPDrainRate,10*(5+1*(getrefine()>8)+2*(getrefine()>9)),1+(getrefine()>7)+2*(getrefine()>9); + "> }, { Id: 18653 @@ -112178,6 +112189,10 @@ item_db: ( Slots: 1 Loc: 768 View: 808 + Script: <" + bonus3 bAutoSpell,"SA_FLAMELAUNCHER",5,10; + bonus3 bAutoSpell,"AS_SONICBLOW",5,10; + "> }, { Id: 18660 @@ -112375,8 +112390,11 @@ item_db: ( Loc: 256 View: 817 Script: <" - bonus bMdef,1; - bonus bUnbreakableHelm,0; + bonus bMdef,7; + bonus bHealPower,5; + if(getrefine()>6) bonus bHealPower,5; + if(getrefine()>8) bonus bMatkRate,7; + if(getrefine()>11) bonus bMatkRate,5; "> }, { @@ -112391,7 +112409,11 @@ item_db: ( Job: 0xFFFFFFFE Loc: 256 View: 11 - Script: <" bonus bAgi,3; "> + Script: <" + bonus bAgi,3; + bonus bAspdRate,1; + bonus2 bSPLossRate,5,10000; + "> }, { Id: 18675 @@ -112745,6 +112767,10 @@ item_db: ( Loc: 256 Refine: false View: 844 + Script: <" + bonus2 bSubRace,RC_Fish,15; + bonus3 bAddMonsterDropItem,579,RC_Fish,5; + "> }, { Id: 18700 @@ -112868,6 +112894,9 @@ item_db: ( Loc: 256 EquipLv: 20 View: 853 + Script: <" + skill "AL_HEAL",3; + "> }, { Id: 18709 @@ -113365,7 +113394,10 @@ item_db: ( Slots: 1 Loc: 256 View: 888 - Script: <" bonus bStr,2; "> + Script: <" + bonus bStr,2; + bonus bMaxHP,100; + "> }, { Id: 18750 diff --git a/db/re/map_zone_db.conf b/db/re/map_zone_db.conf index 71616c4d4..eade47a40 100644 --- a/db/re/map_zone_db.conf +++ b/db/re/map_zone_db.conf @@ -181,6 +181,38 @@ zones: ( Assumptio_5_Scroll: true Greed_Scroll: true Pty_Assumptio_Scroll: true + Velum_Jamadhar: false + Velum_Scare: false + Velum_Buster: false + Velum_Guillotine: false + Velum_Spear: false + Velum_Glaive: false + Velum_Bible: false + Velum_Encyclopedia: false + Velum_Claw: false + Velum_Arc_Wand: false + Velum_Damascus: false + Velum_Stunner: false + Velum_Flail: false + Velum_Arbalest: false + Velum_CrossBow: false + Velum_Claymore: false + Velum_Katzbalger: false + Siege_Arrow_A: false + Siege_Arrow_S: false + Siege_Greave: false + Siege_Boots: false + Siege_Shoes: false + Siege_Manteau: false + Siege_Muffler: false + Siege_White_Potion: false + Siege_Blue_Potion: false + Woe_Violet_Potion: false + Woe_White_Potion: false + Woe_Blue_Potion: false + Siege_Plate: false + Siege_Suits: false + Siege_Robe: false } /* 5 second duration increase on GvG */ /* knockback disabled */ diff --git a/npc/jobs/1-1e/ninja.txt b/npc/jobs/1-1e/ninja.txt index be8753834..485f4afd1 100644 --- a/npc/jobs/1-1e/ninja.txt +++ b/npc/jobs/1-1e/ninja.txt @@ -3,7 +3,7 @@ //===== By: ================================================== //= Legionaire, Kisuka //===== Current Version: ===================================== -//= 1.6 +//= 1.7 //===== Description: ========================================= //= Ninja Job Change Quest //===== Additional Comments: ================================= @@ -13,6 +13,7 @@ //= 1.4 Fixed a minor bug [SinSloth] //= 1.5 Updated to match AEGIS script and Added Quest Log commands. [Kisuka] //= 1.6 Fixed AEGIS amatsu warp typo. [Kisuka] +//= 1.7 Kagerou/Oboro support (Class -> BaseClass) [Euphy] //============================================================ alberta,30,65,3 script Akagi 4_M_JOB_ASSASSIN,{ @@ -349,7 +350,7 @@ que_ng,30,65,3 script Cougar#nq 4_M_JOB_ASSASSIN,{ close; } } else { - if (Class == Job_Ninja) { + if (BaseClass == Job_Ninja) { mes "[Cougar]"; mes "How have you been?"; mes "Train hard: you want"; @@ -563,7 +564,7 @@ einbroch,184,194,3 script Suspicious Man#nq 4_M_SITDOWN,{ mes "to beat him in a fair fight~"; close; } - else if (NINJ_Q == 5 && Class == Job_Ninja) { + else if (NINJ_Q == 5 && BaseClass == Job_Ninja) { mes "[Red Leopard Joe]"; mes "Oh, you're a Ninja~"; mes "I hope you continue to"; diff --git a/npc/other/gm_npcs.txt b/npc/other/gm_npcs.txt index 76d95974e..cd34f0578 100644 --- a/npc/other/gm_npcs.txt +++ b/npc/other/gm_npcs.txt @@ -88,6 +88,9 @@ List of GM Management NPCs (incomplete) - Bangungot Gate (RE) [ Job-related ] +----- Extended (RE) ------ +- Battle Test Control#ko +- Guide#ko_helper ----- 3rd Class (RE) ----- - control#arch - #GMhelper01_gc diff --git a/npc/quests/quests_ein.txt b/npc/quests/quests_ein.txt index ca27cd431..75391e529 100644 --- a/npc/quests/quests_ein.txt +++ b/npc/quests/quests_ein.txt @@ -385,7 +385,7 @@ einbech,97,167,5 script Cavitar 4_M_EINOLD,{ switch(select("Sure~!:No, thanks.")) { case 1: Zeny -= 1000; - ++$einamanoama; + ++$ein_amano; ein_gear1 = 1; mes "[Cavitar]"; mes "Great...!"; diff --git a/npc/quests/thana_quest.txt b/npc/quests/thana_quest.txt index ec925a6a7..4123d8669 100644 --- a/npc/quests/thana_quest.txt +++ b/npc/quests/thana_quest.txt @@ -3,13 +3,14 @@ //===== By: ================================================== //= Muad_Dib //===== Current Version: ===================================== -//= 1.0a +//= 1.1 //===== Description: ========================================= //= [Official Conversion] //= Episode 13.1 Thanatos Tower quest. //===== Additional Comments: ================================= //= 1.0 Adapted from official release. [Euphy] //= 1.0a Added 'npcskill' command. [Euphy] +//= 1.1 Kagerou/Oboro support (Class -> BaseClass) [Euphy] //============================================================ hu_fild01,140,163,5 script Tower Keeper 4_M_EIN_SOLDIER,3,3,{ @@ -2289,7 +2290,7 @@ tha_t04,81,36,0 warp to 5th Floor 1,1,tha_t05,62,8 tha_t06,119,120,0 script to 7th Floor WARPNPC,1,1,{ end; OnTouch: - if (eaclass()&(EAJL_2|EAJL_UPPER) || eaclass()&EAJL_THIRD || ((Class == Job_SuperNovice || Class == Job_Taekwon || Class == Job_Star_Gladiator || Class == Job_Soul_Linker || Class == Job_Ninja || Class == Job_Gunslinger) && BaseLevel > 94)) { + if (eaclass()&(EAJL_2|EAJL_UPPER) || eaclass()&EAJL_THIRD || ((Class == Job_SuperNovice || Class == Job_Taekwon || Class == Job_Star_Gladiator || Class == Job_Soul_Linker || BaseClass == Job_Ninja || Class == Job_Gunslinger) && BaseLevel > 94)) { if (countitem(7425) > 0) { mes "The shadow of a Black Key is gleaming in the center of the portal."; mes "To pass this way, looks like I need something."; diff --git a/npc/re/instances/BakonawaLake.txt b/npc/re/instances/BakonawaLake.txt index 9cf9ea8cd..d8f88e471 100644 --- a/npc/re/instances/BakonawaLake.txt +++ b/npc/re/instances/BakonawaLake.txt @@ -84,7 +84,7 @@ ma_scene01,174,179,4 script Taho 4_M_DEWZATIMAN,{ mes "The party leader did not generate the dungeon yet."; close; } else { - mapannounce "ma_scene01","A party memeber, "+strcharinfo(0)+" of the party "+getpartyname(.@party_id)+" is entering the dungeon, "+.@md_name$+".",bc_map,"0x00ff99"; //FW_NORMAL 12 0 0 + mapannounce "ma_scene01","A party member, "+strcharinfo(0)+" of the party "+getpartyname(.@party_id)+" is entering the dungeon, "+.@md_name$+".",bc_map,"0x00ff99"; //FW_NORMAL 12 0 0 setquest 12278; warp "1@ma_b",64,51; end; @@ -512,7 +512,7 @@ OnTimer10000: mes "[Taho]"; mes "Are we going to try again?"; next; - switch(select("Hold on a sec!:Of couse! We cannot stand back now!")) { + switch(select("Hold on a sec!:Of course! We cannot stand back now!")) { case 1: mes "[Taho]"; mes "AWW... I almost brought him out."; diff --git a/npc/re/jobs/2e/kagerou_oboro.txt b/npc/re/jobs/2e/kagerou_oboro.txt new file mode 100644 index 000000000..8c8e0bf3e --- /dev/null +++ b/npc/re/jobs/2e/kagerou_oboro.txt @@ -0,0 +1,2862 @@ +//===== Hercules Script ======================================= +//= Kagerou / Oboro Job Quest +//===== By: ================================================== +//= (1.0) Dastgir, M45T3R +//===== Current Version: ===================================== +//= 1.1.1 +//===== Description: ========================================= +//= [Official Conversion] +//= Job change Quest from Ninja -> Kagerou / Oboro. +//===== Additional Comments: ================================= +//= 1.0.0 Initial Release. [Dastgir, M45T3R] +//= 1.1.0 Structure Clean-Up. [Euphy] +//= 1.1.1 Updated questlog commands. [Kisuka] +//============================================================ + +// Starting the Quest +//============================================================ +que_ng,28,156,0 script Start#ko HIDDEN_WARP_NPC,1,1,{ + end; + +OnTouch: + if (BaseLevel >= 99 && JobLevel >= 70 && job_kagero == 0 && Class == Job_Ninja) { + mes "Secret Passage to ^25C18DNinja Guild^25C18D"; + mes "You hear familiar voices talking to each other."; + next; + mes "[Unknown Voice A]"; + mes "Long time, no see. How are you? How are the kids you've taken in?"; + next; + mes "[Unknown Voice B]"; + mes "I have to hand it to you. You've picked some competitive ones."; + next; + mes "[Unknown Voice A]"; + mes "Sounds like music to my ears. Being sent to a foreign land with air pollution was bad enough, now haunted with memories of this place..."; + next; + mes "[Unknown Voice A]"; + mes "What do you think? Should we rotate now?"; + next; + mes "[Unknown Voice B]"; + mes "Haven't given up, have ya. Do you really think he'll approve?"; + next; + mes "[Unknown Voice A]"; + mes "No need to be bitter. Hey! Were any of the kids that come and go here the ones that found the ^BD0408place^BD0408?"; + next; + mes "[Unknown Voice B]"; + mes "Since finding the hidden place was also a part of the test."; + next; + mes "[Unknown Voice A]"; + mes "You are as stubborn as the first time I met you. It's just a wall in some place..."; + next; + mes "[Unknown Voice B]"; + mes "Shssh! I think someone is eavesdropping. Hurry! Go back to the mission area."; + next; + mes "The conversation stopped abruptly. Hidden place? Wall? Part of a test? What is all this about?"; + setquest 5131; + set job_kagero,1; + close; + } else if (BaseJob != Job_Ninja && job_kagero > 0) { + for (set .@i,5131; .@i<=5146; set .@i,.@i+1) + if (questprogress(.@i)) erasequest .@i; + set job_kagero,0; + } + end; +} + +que_ng,21,76,0 script Wall with a Drawing#ko CLEAR_NPC,{ + if (Class == Job_Oboro || Class == Job_Kagerou) { + mes "You should no longer use this secret passage."; + close; + } else if (job_kagero == 1 && Class == Job_Ninja) { + mes "You found a location that resembles the hidden place."; + next; + mes "This wall was here ever since. How come I didn't notice it before?"; + next; + mes "Now that I know it's a secret passage, what do I do to get in?"; + next; + if(select("Tear the drawing down.", "Touch the drawing with your hand.") == 1) { + mes "I can't rip it down because I don't own it."; + close; + } + mes "You touch the drawing with the tip of your hand and felt a sudden sensation of being pulled."; + close2; + warp "job_ko",26,111; + end; + } else if (job_kagero > 1 && Class == Job_Ninja) { + mes "Entrance to the ^25C18DNinja Guild^000000 hideout."; + next; + if(select("Enter.", "Do not enter.") == 2) + close; + mes "When touching the drawing, you get the feeling of being pulled..."; + close2; + warp "job_ko",26,111; + end; + } else { + mes "There is a wall with a great drawing on it."; + close; + } + end; +} + +job_ko,25,115,4 script Old Man#ko 4_M_KAGE_OLD,{ + if (MaxWeight - Weight < 1000 || checkweight("Knife",1) == 0) { + mes "[Cougar]"; + mes "You don't need to carry so many things."; + close; + } + if (BaseJob != Job_Ninja) { + for (set .@i,5131; .@i<=5146; set .@i,.@i+1) + if (questprogress(.@i)) erasequest .@i; + set job_kagero,0; + mes "[Cougar]"; + mes "You are not in the Family of the Ninja."; + close2; + warp "amatsu",147,136; + end; + } + if (job_kagero == 1) { + cutin "job_ko03",2; + mes "^1A95E6An old man looking hale and hearty is sitting and gazing vacantly.^1A95E6"; + next; + if(select("Ignore.", "Talk to him.") == 1) { + close2; + cutin "",255; + end; + } + mes "["+strcharinfo(0)+"]"; + mes "Excuse me..."; + next; + mes "^1A95E6You tried to talk to the old man but there is no response. Just when you are about to turn away...^1A95E6"; + next; + mes "[Old Man]"; + mes "At last, a customer! Hmm... and a live one, too!"; + next; + select("Excuse me... where am I?"); + mes "[Old Man]"; + mes "^1A95E6He keeps talking and doesn't stop to answer your question.^1A95E6"; + next; + mes "[Old Man]"; + mes "There once was a quiet family living in ancient Amatsu times that is never mentioned in history books or stories."; + next; + mes "[Old Man]"; + mes "They lived beneath shadows but always yearned for the bright sun, like a sunflower."; + next; + mes "[Old Man]"; + mes "A family that was loyal to their lord who they served as their bright sun."; + next; + mes "[Old Man]"; + mes "...a very trustworthy family..."; + next; + mes "[Old Man]"; + mes "....loyal to their core..."; + next; + mes "[Old Man]"; + mes "...a family of integrity..."; + next; + select("What happened to them?"); + mes "^1A95E6The old man looks at you with a melancholy face.^1A95E6"; + next; + mes "[Old Man]"; + mes "Why are you interested in a family that was abandoned by their lord and disappeared from history itself?"; + next; + if(select("I'm a Ninja.", "I'm bored.") == 2) { + mes "[Old Man]"; + mes "Was nice to meet you."; + close2; + warp "amatsu",147,136; + end; + } + cutin "job_ko02",2; + mes "[Old Man]"; + mes "Ninja! There was a time when the family was called ninjas, too."; + next; + erasequest 5131; + setquest 5132; + set job_kagero,2; + mes "[Old Man]"; + mes "You'll have to lend me your ear for I have so much to tell you about the family story."; + close2; + cutin "",255; + end; + } else if (job_kagero == 2) { + cutin "job_ko01",2; + mes "^1A95E6The Old Man starts the story with a very soothing tone as if he is telling his grandchild a story.^1A95E6"; + next; + mes "[Old Man]"; + mes "This goes way back to ancient times and nobody in Amatsu remembers about it."; + next; + mes "[Old Man]"; + mes "The family worked behind the scenes and basically lived their lives for their lord."; + next; + mes "[Old Man]"; + mes "They were very loyal doing whatever deed their lord asked for."; + next; + mes "[Old Man]"; + mes "Ninja, the family was known as the dark family but that doesn't mean they wanted to be hidden in the darkness."; + next; + mes "[Old Man]"; + mes "They were loyal enough to be satisfied as the lord's servants but their loyalty became the problem."; + next; + select("Problem?"); + mes "[Old Man]"; + mes "They are a secret organization that even the lord didn't know much about."; + next; + mes "[Old Man]"; + mes "The few that knew about the family's existence, tried to investigate them but nobody was able to reveal their true identity."; + next; + mes "[Old Man]"; + mes "That is why this family has grown from loyal servants to a group feared for its secrets."; + next; + mes "[Old Man]"; + mes "The lord shunned the family and didn't call them for their service any more but they never betrayed him."; + next; + select("They were really loyal people."); + cutin "job_ko03",2; + mes "[Old Man]"; + mes "Yes, they were. Very loyal."; + next; + erasequest 5132; + setquest 5133; + set job_kagero,3; + mes "^1A95E6The old man looks even more forlorn.^1A95E6"; + close2; + cutin "",255; + end; + } else if (job_kagero == 3) { + cutin "job_ko03",2; + mes "[Old Man]"; + mes "The family has been living in hiding for so long since the old days. The current lord didn't even know of their existence."; + next; + select("........."); + cutin "job_ko01",2; + mes "[Old Man]"; + mes "I'm Guide Gion, the last of the dark ninja family."; + next; + if(select("I think your time has ended.", "I need your teaching.") == 1) { + cutin "job_ko04",2; + mes "[Guide Gion]"; + mes "Are you an assassin to end this old man's life?"; + next; + mes "[Guide Gion]"; + mes "So that is why you've shown interest in my family. I won't give up easily."; + next; + percentheal -99,0; + mes "Pow!!"; + mes "^1A95E6You lose conscience with the great impact.^000000"; + close2; + warp "amatsu",147,136; + end; + } + cutin "job_ko02",2; + mes "[Guide Gion]"; + mes "Teaching..."; + mes "Been a long time since I last heard that word."; + next; + mes "[Guide Gion]"; + mes "I guess this little visit was not by coincidence but a start of a connection."; + next; + mes "[Guide Gion]"; + mes "Sorry I am not a teacher. But!"; + next; + mes "[Guide Gion]"; + mes "I can help you on the path you've chosen, the ^33CC71"+((Sex)?"Kagerou":"Oboro")+"^000000 path."; + next; + mes "^1A95E6You hear Guide Gion's voice faintly as you slip away.^1A95E6"; + next; + erasequest 5133; + setquest 5134; + set job_kagero,4; + mes "[Guide Gion]"; + mes "If you are prepared to follow me, Guide Gion, on the "+((Sex)?"Kagerou":"Oboro")+" path, we will meet again."; + close2; + warp "amatsu",147,136; + end; + } else if (job_kagero == 4) { + cutin "job_ko02",2; + mes "[Guide Gion]"; + mes "I thought you were afraid of the ^33CC71path of the "+((Sex)?"Kagerou":"Oboro")+"^33CC71 and wouldn't come back."; + next; + mes "[Guide Gion]"; + mes "But from the look of your eyes, I guess I misjudged you."; + next; + mes "[Guide Gion]"; + mes "You will have to train your mind and body to walk steadily in the unknown world and never fall into temptation to stay on the path."; + next; + mes "[Guide Gion]"; + mes "Our ancestors had 4 tests to train our people."; + next; + select("4 tests?"); + cutin "job_ko01",2; + mes "[Guide Gion]"; + mes "Yes, there are 4 tests."; + mes "My ancestors trained my people with 4 tests that involve ^087FF8knowledge^000000, ^087FF8survival^000000, ^087FF8weapons^000000, and ^087FF8battle^000000."; + next; + mes "[Guide Gion]"; + mes "I know you are curious what these tests are. Let me explain one by one."; + next; + while(1) { + set .@i, select("Test of Knowledge", "Test of Survival", "Test of Weaponry", "Test of Battle"); + set .@test, .@test | (1<<(.@i-1)); + switch (.@i) { + case 1: + mes "[Guide Gion]"; + mes "We need to be knowledgeable in order to assist the lord. This test is for this purpose."; + next; + mes "[Guide Gion]"; + mes "You can pass the test if you successfully solve more than 9 out of 10 questions."; + next; + if (.@test != 15) { + mes "[Guide Gion]"; + mes "The test will be easy to pass if you've been steady in your studies. Now what other test are you curious about?"; + next; + } + break; + case 2: + mes "[Guide Gion]"; + mes "Missions aren't always easy and safe. That is why survival instincts are vital to us."; + next; + mes "[Guide Gion]"; + mes "My ancestors call this test the dice test. It is a test to advance forward depending on the dice results."; + next; + mes "[Guide Gion]"; + mes "Think of it as the simple dice games people play."; + next; + mes "[Guide Gion]"; + mes "But never let your guard down during the test because it isn't called the survival test for nothing."; + next; + mes "[Guide Gion]"; + mes "There will be blocks that help you while there are blocks that will interrupt you."; + next; + if (.@test != 15) { + mes "[Guide Gion]"; + mes "If you deal with various situations wisely, you will be able to pass the test. Now what other test are you curious about?"; + next; + } + break; + case 3: + mes "[Guide Gion]"; + mes "My family was famous for using unique weapons that we created."; + next; + mes "[Guide Gion]"; + mes "You would be considered blessed if you created your own unique weapon."; + next; + mes "[Guide Gion]"; + mes "Creating a weapon for yourself and refining it is the purpose of this test."; + next; + if (.@test != 15) { + mes "[Guide Gion]"; + mes "I hope you will be blessed and find the best weapon for yourself. Now what other test are you curious about?"; + next; + } + break; + case 4: + mes "[Guide Gion]"; + mes "Missions are not always done alone. You will often work in teams of 2 or 3 for a common goal."; + next; + mes "[Guide Gion]"; + mes "The battle test is only for those that pass that knowledge, survival and weapon tests. So! It is the very last test."; + next; + mes "[Guide Gion]"; + mes "Unlike the other three tests that are done alone, you will have to compete with others in this final test."; + next; + mes "[Guide Gion]"; + mes "There is only one target!!"; + mes "And only the first to get to the target passes the test."; + next; + mes "[Guide Gion]"; + mes "You'll be lucky if you have no competitors during your test."; + next; + if (.@test != 15) { + mes "[Guide Gion]"; + mes "A challenge is better than explaining it a hundred times. It's the actual experience that makes you better."; + next; + } + break; + } + if (.@test == 15) break; + } + cutin "job_ko02",2; + mes "[Guide Gion]"; + mes "Seeing is believing, so go on and take the challenge."; + next; + erasequest 5134; + setquest 5135; + set job_kagero,5; + mes "[Guide Gion]"; + mes "Let's start right away after you are done with preparations."; + close2; + cutin "",255; + end; + } else if (job_kagero == 5) { + set .@ko_test_01, questprogress(5136); + set .@ko_test_02, questprogress(5137); + set .@ko_test_03, questprogress(5138); + set .@ko_test, .@ko_test_01 + .@ko_test_02 + .@ko_test_03; + if (.@ko_test == 0) { + cutin "job_ko03",2; + mes "[Guide Gion]"; + mes "It's been a while."; + next; + mes "[Guide Gion]"; + mes "Since I felt happy like this. I feel young and energetic seeing young people like you challenge themselves with a new path."; + next; + mes "[Guide Gion]"; + mes "We're done with explaining about the tests, now should I tell you my family story?"; + next; + cutin "job_ko01",2; + mes "[Guide Gion]"; + mes "My family started from two warriors."; + next; + mes "[Guide Gion]"; + mes "Kagerou, a warrior like the dancing flames of the sun."; + next; + mes "[Guide Gion]"; + mes "Oboro, a warrior like the misty moonlight."; + next; + mes "[Guide Gion]"; + mes "The Sun and the Moon."; + mes "The sunlight that lights up the world and the moonlight that lights up the night. Both were very similar but different warriors."; + next; + mes "[Guide Gion]"; + mes "There was a time there was an enmity between both warriors."; + next; + mes "[Guide Gion]"; + mes "But it didn't take long for them to become one as a family."; + next; + select("How did it go afterwards?"); + cutin "job_ko02",2; + mes "[Guide Gion]"; + mes "Ha ha ha. It is never fun to listen to the whole story all at once, no? Come back after passing a test and I'll continue my story."; + next; + mes "[Guide Gion]"; + mes "Which test will you select as your first test?"; + next; + callsub L_StartTest,select("Test of Knowledge", "Test of Survival", "Test of Weaponry"),1; + end; + } else if (.@ko_test == 2) { + cutin "job_ko01",2; + mes "[Guide Gion]"; + if (.@ko_test_01 == 2) { + set .@menu$,":Test of Survival:Test of Weaponry"; + mes "You've passed the Test of Knowledge."; + next; + mes "[Guide Gion]"; + mes "My friend doesn't approve of others that easily but I guess he liked you."; + next; + } else if (.@ko_test_02 == 2) { + set .@menu$,"Test of Knowledge::Test of Weaponry"; + mes "You've passed the Test of Survival."; + next; + mes "[Guide Gion]"; + mes "Looks like you went through hell with this test."; + next; + } else if (.@ko_test_03 == 2) { + set .@menu$,"Test of Knowledge:Test of Survival:"; + mes "You've passed the Test of Weaponry."; + next; + mes "[Guide Gion]"; + mes "I wonder if Joe is satisfied with your performance."; + next; + } + select("Please continue with the family story."); + cutin "job_ko02",2; + mes "[Guide Gion]"; + mes "Looks like you are pretty eager to hear more. Where did I leave off... Ah! I remember."; + next; + mes "[Guide Gion]"; + mes "Kagerou, a warrior like the dancing flames of the sun."; + next; + mes "[Guide Gion]"; + mes "Oboro, a warrior like the misty moonlight."; + next; + mes "[Guide Gion]"; + mes "Both warriors weren't close at first, because personality and everything else was completely opposite of each other."; + next; + mes "[Guide Gion]"; + mes "The first place they met was the battlefield. And you know how enemies greet each other on a battlefield."; + next; + mes "[Guide Gion]"; + mes "They ended up injuring each other badly."; + next; + mes "[Guide Gion]"; + mes "But what can you do? War is a war."; + next; + mes "[Guide Gion]"; + mes "The friend you've laughed with yesterday is a foe that you have to fight with in a war today."; + next; + mes "[Guide Gion]"; + mes "So nobody can get along with anyone during a war."; + next; + mes "[Guide Gion]"; + mes "I'll continue the story after you pass another test."; + next; + mes "[Guide Gion]"; + mes "Which test will you choose for the second test?"; + next; + callsub L_StartTest,select(.@menu$),2; + end; + } else if (.@ko_test == 4) { + cutin "job_ko04",2; + mes "[Guide Gion]"; + if (.@ko_test_01 == 2 && .@ko_test_02 == 2) { + set .@last_test,3; + mes "You've passed the ^339CCCTests of Knowledge and Survival^000000!"; + } else if (.@ko_test_01 == 2 && .@ko_test_03 == 2) { + set .@last_test,2; + mes "You've passed the ^339CCCTests of Knowledge and Weaponry^000000!"; + } else if (.@ko_test_02 == 2 && .@ko_test_03 == 2) { + set .@last_test,1; + mes "You've passed the ^339CCCTests of Survival and Weaponry^000000!"; + } + next; + mes "[Guide Gion]"; + mes "You are already done with two tests. Hope you've learned a lot from them."; + next; + cutin "job_ko01",2; + mes "[Guide Gion]"; + mes "Shall we continue with the story?"; + next; + mes "[Guide Gion]"; + mes "Kagerou, a warrior like the dancing flames of the sun."; + next; + mes "[Guide Gion]"; + mes "Oboro, a warrior like the misty moonlight."; + next; + mes "[Guide Gion]"; + mes "I think I left off when the two warriors met at the battlefield as enemies."; + next; + mes "[Guide Gion]"; + mes "The long war ended eventually but the wounds and pain of those that survived had just started."; + next; + mes "[Guide Gion]"; + mes "So these two warriors started to embrace and heal the war wounds together and became one."; + next; + mes "[Guide Gion]"; + mes "There is a backstory of a man appearing in front of them and winning the loyalty from both warriors."; + next; + select("Who is this man?"); + mes "[Guide Gion]"; + mes "There isn't much known about this man. Only a short mentioning of the two warriors pledging their allegiance."; + next; + mes "[Guide Gion]"; + mes "Maybe current generations like me are the ancestors of the current Amatsu lord? But this is only an assumption."; + next; + mes "[Guide Gion]"; + mes "I'm almost at the end of my family story. Come back after you've passed the third test and I will tell you the rest."; + next; + callsub L_StartTest,.@last_test,3; + end; + } else if (.@ko_test == 6) { + cutin "job_ko01",2; + mes "[Guide Gion]"; + mes "You've gone through three tests leaving only one to pass."; + next; + mes "[Guide Gion]"; + mes "As I've told you before, the last test is different because you have to compete against others."; + next; + select("Will you continue the story?"); + cutin "job_ko02",2; + mes "[Guide Gion]"; + mes "Ha ha ha. I will finish the story."; + next; + mes "[Guide Gion]"; + mes "Kagerou, a warrior like the dancing flames of the sun."; + next; + mes "[Guide Gion]"; + mes "Oboro, a warrior like the misty moonlight."; + next; + mes "[Guide Gion]"; + mes "It is told that the man that earned the loyalty of the two warriors was a humorous person."; + next; + mes "[Guide Gion]"; + mes "He like the jokes and conversations better than quarrels and he liked women over men."; + next; + mes "[Guide Gion]"; + mes "Hmm... I don't know why this part of the story was kept alive all these years but this man wanted to bring these two warriors together."; + next; + mes "[Guide Gion]"; + mes "Both warriors did travel together after the war but kept an awkward distance from each other."; + next; + mes "[Guide Gion]"; + mes "They must have had their reasons but their lord would send them out to a difficult mission together, put them in a secret room together and all sorts of situations together."; + next; + select("Sounds like an odd person."); + mes "[Guide Gion]"; + mes "Yes, he was. And his efforts didn't go in vain since the two warriors eventually got acquainted and married."; + next; + mes "[Guide Gion]"; + mes "This is how the family started."; + next; + select("What happened after?"); + mes "[Guide Gion]"; + mes "Sadly, the next part of story was purposely discontinued."; + next; + mes "[Guide Gion]"; + mes "I think it's because someone wanted us to let go of the past and move forward."; + next; + mes "[Guide Gion]"; + mes "That's that. Now shouldn't you be preparing for the last test?"; + next; + set job_kagero,6; + mes "[Guide Gion]"; + mes "But you must be tired from all the tests so far. Take a rest."; + close2; + cutin "",255; + end; + } else if (.@ko_test == 1 || .@ko_test == 3 || .@ko_test == 5) { + cutin "job_ko04",2; + if (.@ko_test_01 == 1) + set .@test_ko$, "Knowledge"; + else if (.@ko_test_02 == 1) + set .@test_ko$, "Survival"; + else if (.@ko_test_03 == 1) + set .@test_ko$, "Weaponry"; + mes "[Guide Gion]"; + mes "Weren't you taking the Test of " + .@test_ko$ + " just now?"; + next; + switch(select("I want to go back to test site.", "Ah... no.")) { + case 1: + mes "[Guide Gion]"; + mes "The Test of " + .@test_ko$ + " site is over here."; + close2; + if (.@ko_test_01 == 1) + warp "job_ko",72,128; + else if (.@ko_test_02 == 1) + warp "job_ko",62,16; + else if (.@ko_test_03 == 1) + warp "job_ko",121,129; + end; + case 2: + mes "[Guide Gion]"; + mes "The village is over here."; + close2; + warp "amatsu",147,136; + end; + } + } + } else if (job_kagero == 6) { + cutin "job_ko01",2; + mes "[Guide Gion]"; + mes "You've come back already? You could have rested more. Is there a reason to hurry?"; + next; + input .@inputstr$; + cutin "job_ko03",2; + mes "[Guide Gion]"; + mes "Because of ^B24E59" + .@inputstr$ + "^000000?"; + next; + mes "[Guide Gion]"; + mes "I have to admit, I don't understand you now."; + next; + mes "[Guide Gion]"; + mes "But since you've gone through much, I'm sure you will do good with the final test."; + next; + cutin "job_ko01",2; + mes "[Guide Gion]"; + mes "Now! No more small talk. I'll let you know what the target is for the Test of Battle."; + next; + mes "[Guide Gion]"; + mes "The target is a monster called the ^FF0000Family Secret^000000."; + next; + mes "[Guide Gion]"; + mes "You will have to be careful because there are many similiar shaped and named monsters in test site."; + next; + mes "[Guide Gion]"; + mes "And if you are lucky, there will be others targeting the monster."; + next; + mes "[Guide Gion]"; + mes "May the blessings of '" + ((Sex)?"Kagerou, dancing sun":"Oboro, misty moonlight") + "' be with you."; + next; + setquest 5146; + set job_kagero,7; + mes "[Guide Gion]"; + mes "Then let's go to the battle test field."; + close2; + switch(rand(3)) { + case 0: warp "job_ko",142,20; break; + case 1: warp "job_ko",141,80; break; + case 2: warp "job_ko",107,60; break; + } + end; + } else if (job_kagero == 7 || job_kagero == 8) { + cutin "job_ko03",2; + mes "[Guide Gion]"; + mes "I see you are in the middle of the ^339CCCTest of Battle^000000. Will you go back to the test site?"; + next; + switch(select("Go back to the test site.", "Visit the village.")) { + case 1: + mes "[Guide Gion]"; + mes "The test site is over here."; + close2; + switch(rand(3)) { + case 0: warp "job_ko",142,20; break; + case 1: warp "job_ko",141,80; break; + case 2: warp "job_ko",107,60; break; + } + end; + case 2: + mes "[Guide Gion]"; + mes "The village is over here."; + close2; + cutin "",255; + end; + } + } else { + cutin "job_ko03",2; + mes "[Guide Gion]"; + mes "You should not be here. Leave!"; + close2; + warp "amatsu",147,136; + end; + } + end; + +//callsub L_StartTest,<1=Knowledge,2=Survival,3=Weaponry>,<test number [1..3]>; +L_StartTest: + switch (getarg(1)) { + case 1: set .@str$,"You are starting with the ^339CCCTest of %s^000000? "; break; + case 2: set .@str$,"You are taking the ^339CCCTest of %s^000000 as the second test? "; break; + case 3: set .@str$,"Your third test is the ^339CCCTest of %s^000000! "; break; + } + mes "[Guide Gion]"; + switch (getarg(0)) { + case 1: + mes sprintf(.@str$ + "Then I will get to see a familiar face after so long...","Knowledge"); + next; + select("Familiar face?"); + setquest 5136; + mes "[Guide Gion]"; + mes "Ha ha ha. You'll know when we get there. The Test of Knowledge is taken over here."; + close2; + warp "job_ko",72,128; + end; + case 2: + mes sprintf(.@str$ + "It's a lonesome test that you have to face alone.","Survival"); + next; + setquest 5137; + mes "[Guide Gion]"; + mes "But I believe you can handle it. The Test of Survival is taken over here."; + close2; + warp "job_ko",62,16; + end; + case 3: + mes sprintf(.@str$ + "I have something to give you before you go.","Weaponry"); + next; + setquest 5138; + getitem "Iron_Ore", 5; + getitem "Phracon", 1; + mes "You receive 5 Iron Ore and 1 Phracon."; + next; + mes "[Guide Gion]"; + mes "You will find these useful. The Test of Weaponry is taken over here."; + close2; + warp "job_ko",121,129; + end; + } +} + +// Test of Knowledge +//============================================================ +job_ko,81,124,4 script Cougar#ko 4_M_JOB_ASSASSIN,{ + if (BaseJob != Job_Ninja) { + for (set .@i,5131; .@i<=5146; set .@i,.@i+1) + if (questprogress(.@i)) erasequest .@i; + set job_kagero,0; + mes "[Cougar]"; + mes "Sorry, your family is not same as ours, is there something wrong?"; + close2; + warp "amatsu",147,136; + end; + } + if (job_kagero != 5) { + goto L_Kick; + } + if (MaxWeight - Weight < 1000 || checkweight("Knife",1) == 0) { + mes "[Cougar]"; + mes "This is a test of knowledge, so why did you bring so many things?"; + close; + } + set .@ko_test_01, questprogress(5136); + set .@ko_test_01_1, questprogress(5139); + if (.@ko_test_01 == 1 && .@ko_test_01_1 == 0) { + mes "[Cougar]"; + mes "It's been a while."; + next; + select("Aren't you..."); + mes "[Cougar]"; + mes "I remember you from before looking for the way of the ninja."; + next; + mes "[Cougar]"; + mes "You've grown this strong already?"; + next; + mes "[Cougar]"; + mes "Ha ha ha-"; + mes "A truly determined youth! I like that."; + next; + mes "[Cougar]"; + mes "Good! The test you are about to take is the ^339CCCTest of Knowledge^000000."; + next; + mes "[Cougar]"; + mes "I hope you haven't been lazy with your studies while focusing on getting stronger?"; + next; + switch(select("Yes", "No")) { + case 1: + setquest 5139; + mes "[Cougar]"; + mes "That's a relief. Let me know when you are ready to start the test."; + close; + case 2: + setquest 5139; + mes "[Cougar]"; + mes "So you were all talk? Well, let me know when you are ready then."; + close; + } + } else if (.@ko_test_01 == 1 && .@ko_test_01_1 == 1) { + mes "[Cougar]"; + mes "I'm ready at my end. Are you ready for the test?"; + next; + if(select("Yes", "No") == 2) { + mes "[Cougar]"; + mes "Well, what can I do but wait for you."; + close; + } + mes "[Cougar]"; + mes "This isn't your first test, is it?"; + next; + mes "[Cougar]"; + mes "You only need to choose the correct answer to my questions."; + next; + mes "[Cougar]"; + mes "Let's start."; + next; + + set .@questions,10; // number of questions to ask + + // shuffle array an array of questions to be asked + freeloop(1); + setarray .@n[0], + 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25, + 26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50; + for (set .@i,getarraysize(.@n)-1; .@i>0; set .@i,.@i-1) { + set .@rand, rand(.@i); + set .@tmp, .@n[.@i]; + set .@n[.@i], .@n[.@rand]; + set .@n[.@rand], .@tmp; + } + deletearray .@n[10],getarraysize(.@n) - .@questions; + freeloop(0); + + set @job_ko_cougar,0; + for (set .@i,1; .@i<=.@questions; set .@i,.@i+1) { + mes "[Cougar]"; + mes (.@i < .@questions)?"Question number "+.@i+":":"Last question:"; + switch (.@n[.@i-1]) { + case 1: callsub L_Question,"What is the DEX + LUK total for a Job Master?",2,"8:10:12:14"; break; + case 2: callsub L_Question,"What is the highest job level for a ninja?",1,"70:50:99:100"; break; + case 3: callsub L_Question,"How many skill points do you need to master the Throw Coins skill?",3,"25:30:35:37"; break; + case 4: callsub L_Question,"Which of the following is the correct number of Evasion and effect duration for Mirror Image level 10?",4,"Up to 7 and 200 seconds:Up to 5 and 220 seconds:Up to 6 and 240 seconds:Up to 5 and 240 seconds"; break; + case 5: callsub L_Question,"How many skill points do you need to master the Cicada Skin Shed?",1,"5:3:1:4"; break; + case 6: callsub L_Question,"If Dagger Throwing Practice is at 7, how much ATK is added to Shuriken attacks?",2,"18:21:27:30"; break; + case 7: callsub L_Question,"What is the basic attack range for Throw Shuriken?",3,"7 blocks:8 blocks:9 blocks:10 blocks"; break; + case 8: callsub L_Question,"What is the maximum moving range of Shadow Leap?",4,"6 blocks:7 blocks:8 blocks:9 blocks"; break; + case 9: callsub L_Question,"How much money is used for Throw Coins level 6?",4,"2000-8000:1000-6000:3000-8000:3000-6000"; break; + case 10: callsub L_Question,"What is the most important aspect of increasing ATK for the Killing Strike skill?",2,"VIT:MAXHP:INT:MAXSP"; break; + case 11: callsub L_Question,"What is not the effect you get after reaching the STR status?",3,"Close range attack increase:Weight limit increase:Magic attack increase:Weapon attack increase"; break; + case 12: callsub L_Question,"What is not the effect you get after reaching the INT status?",4,"MAXSP increase:MATK increase:Magic damage increase:Staff attack increase"; break; + case 13: callsub L_Question,"What is not the effect you get after reaching the DEX status?",2,"Casting time decrease:Evasion increase:Accuracy increase:Long range attack increase"; break; + case 14: callsub L_Question,"What is not the effect you get after reaching the AGI status?",1,"Accuracy increase:Flee increase:Attack speed increase:Delay after attack decrease"; break; + case 15: callsub L_Question,"What is not the effect you get after reaching the VIT status?",4,"Weapon defense increase:MAXHP increase:Magic defense increase:Attack increase"; break; + case 16: callsub L_Question,"What is not the effect you get after reaching the LUK status?",3,"Accuracy increase:Complete evasion increase:Magic damage decrease:Critical rate increase"; break; + case 17: callsub L_Question,"You need to equip a card to your shoes to enhance Killing Strike attack. Which of the following is the appropriate card to equip?",2,"Gold Acidus Card:Matyr Card:Odium of Thantos Card:Eddga Card"; break; + case 18: callsub L_Question,"You need a catalyst to use ninja skills. Which of the following skills does not need a catalyst?",3,"Blaze Shield:Watery Evasion:Flaming Petals:Snow Flake Draft"; break; + case 19: callsub L_Question,"How much does STR/INT go up when Ninja Aura level 5 is used?",2,"4:5:6:7"; break; + case 20: callsub L_Question,"You are hunting the Orc Warrior. Which Kunai would you use? ",1,"Heat Wave Kunai:Icicle Kunai:Fell Poison Kunai:High Wind Kunai"; break; + case 21: callsub L_Question,"Which village is the Ninja Guild located in?",2,"Lutie:Amatsu:Dewata:Comodo"; break; + case 22: callsub L_Question,"How do Ninjas get promoted?",3,"By Val Kiwi:By Randgris:None:By Valkyrie"; break; + case 23: callsub L_Question,"What was next to me when you first met me?",4,"A cushion:A folding screen:A flowerpot:A brazier"; break; + case 24: callsub L_Question,"What is the level of Dagger Throwing Practice you have to reach to learn the Killing Strike skill?",1,"7:5:6:8"; break; + case 25: callsub L_Question,"How many hits does a Throw Kunai give to a monster?",2,"2:3:4:5"; break; + case 26: callsub L_Question,"When your First Wind is at level 4, what will go with the MATK and range?",3,"MATK400, 8 blocks:MATK500, 7 blocks:MATK500, 8 blocks:MATK400, 7 blocks"; break; + case 27: callsub L_Question,"Which of the following skills can't you learn at Dagger Throwing Practice level 7?",4,"Throw Kunai:Throw Huuma Shuriken:Killing Strike:Throw Coins"; break; + case 28: callsub L_Question,"What level do you have to be in Dagger Throwing Practice in order to learn the Throw Coins skill?",4,"4:6:8:10"; break; + case 29: callsub L_Question,"What is the attack range for the Exploding Dragon?",3,"3*3:4*4:5*5:6*6"; break; + case 30: callsub L_Question,"How long is the effect time for the Watery Evasion level 7 skill?",2,"40 seconds:45 seconds:50 seconds:55 seconds"; break; + case 31: callsub L_Question,"What is the attack effect for Haze Slasher level 4?",1,"140%:150%:160%:170%"; break; + case 32: callsub L_Question,"How much power is in the Huuma Blaze Shuriken weapon?",1,"Fireball 5 , DEX-2:Fireball 5 , DEX-3:Fireball 4 , DEX-2:Fireball 4 , DEX-3"; break; + case 33: callsub L_Question,"How much power is in the Murasame weapon?",2,"Human attack 10%:Human critical +10:Demon attack 10%:Demon critical +10"; break; + case 34: callsub L_Question,"What is the maximum hit number for Blaze Shield level 10?",3,"7:8:9:10"; break; + case 35: callsub L_Question,"What is the property of the Lightning Jolt?",4,"Fire:Water:Ground:Wind"; break; + case 36: callsub L_Question,"You are creating a weapon for small monsters. What is the best card to use?",4,"Hydra Card:Minorous Card:Skel Woker Card:Desert Wolf Card"; break; + case 37: callsub L_Question,"You are creating a weapon for mid-sized monsters. What is the best card to use?",3,"Hydra Card:Minorous Card:Skel Woker Card:Desert Wolf Card"; break; + case 38: callsub L_Question,"You are creating a weapon for huge monsters. What is the best card to use?",2,"Hydra Card:Minorous Card:Skel Woker Card:Desert Wolf Card"; break; + case 39: callsub L_Question,"Which NPC promotes you?",1,"Valkyrie:Val Kiwi:Balp Hiri:Elephant"; break; + case 40: callsub L_Question,"Which catalyst do you need to use the Blaze Shield skill?",2,"Ice Stone:Flame Stone:Wind Stone:Earth Stone"; break; + case 41: callsub L_Question,"Which of the following is not an effect of the Watery Evasion skill?",4,"Movement speed decrease:Waterball availability:Holy Water craftability:VIT decrease"; break; + case 42: callsub L_Question,"Which of the following matches are incorrect for skill and property?",3,"Flaming Petals-Fire:Snow Flake Draft-Water:Freezing Spear-Ground:Lightning Jolt-Wind"; break; + case 43: callsub L_Question,"Which of the following is the best skill to use when attacking a ground property enemy?",2,"First Wind:Exploding Dragon:Snow Flake Draft:Wind Blade"; break; + case 44: callsub L_Question,"Which Ninja Mastery skill level do you need to learn the Exploding Dragon skill?",1,"10:9:8:1"; break; + case 45: callsub L_Question,"What is the attack range when you master Flip Tatami?",3,"5:7:3:1"; break; + case 46: callsub L_Question,"What weapon cannot be made by the blacksmith Khaibara?",4,"Khukri:Murasame:Hakujin:Humma Wing Shuriken"; break; + case 47: callsub L_Question,"Which of the following correctly matches material needed to make a Icicle Kunai?",2,"4 Nimbus Shuriken, 2 Ice Stone:8 Nimbus Shuriken, 2 Ice Stone:2 Nimbus Shuriken, 1 Ice Stone:1 Nimbus Shuriken, 2 Ice Stone"; break; + case 48: callsub L_Question,"Which of the following Kunai will give the most damage to the ground property monster, Porcellio?",1,"Heat Wave Kunai:Icicle Kunai:Fell Poison Kunai:High Wind Kunai"; break; + case 49: callsub L_Question,"Which of the following blacksmiths do not create ninja items?",2,"Khaibara:Aiku:Tetsu:Toshu"; break; + case 50: callsub L_Question,"What is the name of the suspicious man you can meet during the Ninja job change quest?",3,"Red Leopard Jack:Black Leopard Jack:Red Leopard Joe:Black Leopard Joe"; break; + default: + mes "[Cougar]"; + mes "An unknown error has occurred."; + mes "Please contact customer service."; + close; + } + } + mes "[Cougar]"; + mes "You're through all 10 questions. Wasn't so bad! The important part starts now."; + next; + mes "[Cougar]"; + mes "... ... ..."; + next; + if (@job_ko_cougar < 90) { + mes "[Cougar]"; + mes "You fool!!"; + mes "You couldn't even solve these?"; + next; + mes "[Cougar]"; + mes "Can't believe someone who is taking a new path can be so pathetic."; + next; + mes "[Cougar]"; + mes "I'll give you another chance."; + mes "You will take the test again with new questions. Better pass it this time."; + } else { + mes "[Cougar]"; + mes "Hmm. " + (@job_ko_cougar) + "?"; + next; + mes "[Cougar]"; + mes "Well, looks like you weren't lazy with your studies."; + next; + mes "[Cougar]"; + mes "What? Proud of yourself for solving these questions?"; + next; + mes "[Cougar]"; + mes "You still have a long way to go and this is only a small fraction of it."; + next; + mes "[Cougar]"; + mes "Well... I'm curious how far your strong will can take you through other tests."; + next; + completequest 5136; + erasequest 5139; + mes "[Cougar]"; + mes "I'll let you go now so go report back to Guide Gion with your results."; + close2; + warp "job_ko",16,113; + end; + } + set @job_ko_cougar,0; + close; + } else if (.@ko_test_01 == 2 && .@ko_test_01_1 == 0) { + mes "[Cougar]"; + mes "I'll let you go now so go report back to Guide Gion with your results."; + close2; + warp "job_ko",16,113; + end; + } else { + L_Kick: + mes "[Cougar]"; + mes "How did you get here?"; + next; + mes "[Cougar]"; + mes "It's my duty to get rid of you."; + mes "^000099(He's a short, silent man.)^000000"; + mes "This will push you back!"; + close2; + warp "amatsu",147,136; + end; + } + end; + +//callsub L_Question,"<Question>",<correct answer choice>,"<Choice 1>:<Choice 2>:<Choice 3>:<Choice 4>"; +L_Question: + mes getarg(0); + next; + if(select(getarg(2)) == getarg(1)) + set @job_ko_cougar, @job_ko_cougar + 10; + return; +} + +// Test of Survival +//============================================================ + +// ----------------------------------------------------------- +// Functions +// ----------------------------------------------------------- +function script F_KO_Survival_mes { + mes "[No. " + getarg(0) + "]"; + mes "^1A95E6Other letters are too small to read. Let's look up close.^000000"; + close; +} + +function script F_KO_Survival_warp { + close2; + switch (getarg(0)) { + case 0: warp "job_ko",63,16; break; + case 1: warp "job_ko",54,16; break; + case 2: warp "job_ko",46,16; break; + case 3: warp "job_ko",38,16; break; + case 4: warp "job_ko",30,16; break; + case 5: warp "job_ko",22,16; break; + case 6: warp "job_ko",17,19; break; + case 7: warp "job_ko",17,27; break; + case 8: warp "job_ko",17,35; break; + case 9: warp "job_ko",17,43; break; + case 10: warp "job_ko",17,51; break; + case 11: warp "job_ko",17,60; break; + case 12: warp "job_ko",25,60; break; + case 13: warp "job_ko",33,60; break; + case 14: warp "job_ko",41,60; break; + case 15: warp "job_ko",49,60; break; + case 16: warp "job_ko",57,60; break; + case 17: warp "job_ko",62,56; break; + case 18: warp "job_ko",62,48; break; + case 19: warp "job_ko",62,40; break; + case 20: warp "job_ko",62,32; break; + case 21: warp "job_ko",62,23; break; + case 22: warp "job_ko",54,23; break; + case 23: warp "job_ko",46,23; break; + case 24: warp "job_ko",38,23; break; + case 25: warp "job_ko",30,23; break; + case 26: warp "job_ko",25,27; break; + case 27: warp "job_ko",25,35; break; + case 28: warp "job_ko",25,43; break; + case 29: warp "job_ko",25,52; break; + case 30: warp "job_ko",33,52; break; + case 31: warp "job_ko",41,52; break; + case 32: warp "job_ko",49,52; break; + case 33: warp "job_ko",54,48; break; + case 34: warp "job_ko",54,40; break; + case 35: warp "job_ko",54,31; break; + case 36: warp "job_ko",46,31; break; + case 37: warp "job_ko",38,31; break; + case 38: warp "job_ko",33,35; break; + case 39: warp "job_ko",33,44; break; + case 40: warp "job_ko",41,44; break; + } + end; +} + +//callfunc "F_KO_Survival_dice",<location>{,<LP (default:1)>{,<0:auto-warp (default), 1:do not warp>}} +//Return: dice value [1..6] ONLY IF arg2 = 1 +function script F_KO_Survival_dice { + mes "Location: " + getarg(0); + mes "Total LP: " + job_kagero_lp; + mes "To roll the dice, you need to consume " + getarg(1,1) + " ^FD0260LP^000000."; + next; + select("Roll the dice."); + if (job_kagero_lp < getarg(1,1)) { + mes "Due to insufficient ^FD0260LP^000000, you will be returned to starting position."; + callfunc "F_KO_Survival_warp",0; + end; + } + set job_kagero_lp, job_kagero_lp - getarg(1,1); + set .@dice, rand(1,6); + emotion 57 + .@dice,1; + mes "The dice came out as " + .@dice + "."; + if (getarg(2,0)) + return .@dice; + else { + mes "Press Close to move forward " + .@dice + " blocks."; + callfunc "F_KO_Survival_warp", .@dice + getarg(0); + end; + } +} + +//callfunc "F_KO_Survival_dice2",<location>{,<LP (default:2)>} +function script F_KO_Survival_dice2 { + mes "Location: " + getarg(0); + mes "Total LP: " + job_kagero_lp; + mes "To roll the dice, you need to consume " + getarg(1,2) + " ^FD0260LP^000000."; + next; + select("Roll the first dice."); + if (job_kagero_lp < getarg(1,2)) { + mes "Due to insufficient ^FD0260LP^000000, you will be returned to starting position."; + callfunc "F_KO_Survival_warp",0; + end; + } + set job_kagero_lp, job_kagero_lp - getarg(1,2); + mes "< Used " + getarg(1,2) + " LP >"; + next; + set @job_ko_dice1, rand(1,6); + emotion 57 + @job_ko_dice1,1; + mes "First dice result is " + @job_ko_dice1 + ". Do you want to roll the second dice?"; + next; + select("Roll the second dice."); + set @job_ko_dice2, rand(1,6); + emotion 57 + @job_ko_dice2,1; + return; +} + +//Return: 1:win, 0:draw, -1:lose +function script F_KO_Survival_rps { + setarray .@rps$[1], "Scissors", "Rock", "Paper"; + setarray .@emote[1], e_scissors, e_rock, e_paper; + + mes "Rock! Paper! Scissors!"; + next; + set .@pc, select("Give scissors.", "Give rock.", "Give paper."); + set .@npc, rand(1,3); + emotion .@emote[.@pc],1; + emotion .@emote[.@npc]; + mes "=Game Results="; + mes "Machine: " + .@rps$[.@npc] + "."; + mes "You: " + .@rps$[.@pc] + "."; + next; + if ((.@npc == 1 && .@pc == 2) || (.@npc == 2 && .@pc == 3) || (.@npc == 3 && .@pc == 1)) { + mes "You Win"; + return 1; + } else if (.@pc == .@npc) { + mes "Draw"; + return 0; + } else if ((.@npc == 1 && .@pc == 3) || (.@npc == 2 && .@pc == 1) || (.@npc == 3 && .@pc == 2)) { + mes "You Lose"; + return -1; + } else { + mes "An unknown error has occurred."; + mes "Please contact customer service."; + close; + } +} + +// ----------------------------------------------------------- +// Templates +// ----------------------------------------------------------- +- script Sight#ko_trap -1,{ + callfunc "F_KO_Survival_mes", atoi(substr(strnpcinfo(2),3,4)); + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + switch (atoi(substr(strnpcinfo(2),3,4))) { + case 2: set .@id,0; break; + case 7: set .@id,5; break; + case 11: set .@id,9; break; + case 23: set .@id,18; break; + case 26: set .@id,20; break; + case 30: set .@id,9; break; + case 35: set .@id,29; break; + } + mes "This block has a trap."; + mes "Press Close to go back to block " + .@id + "."; + callfunc "F_KO_Survival_warp", .@id; + end; +} + +- script Sight#ko_trap2 -1,{ + callfunc "F_KO_Survival_mes", atoi(substr(strnpcinfo(2),3,4)); + end; +OnTouch: + set .@id, atoi(substr(strnpcinfo(2),3,4)); + switch (.@id) { + case 10: set .@var$, "$20110808_vko01"; break; + case 28: set .@var$, "$20110808_vko03"; break; + //case 38: set .@var$, "$20110808_vko04"; break; + } + mes "There are tiny letters on the sign."; + next; + mes "If you don't want to be caught, install a trap."; + next; + if (getd(.@var$) == 0) { + mes "There is currently no trap installed."; + next; + mes "Do you want to use 10 ^FD0260LP^000000 to install a trap?"; + next; + if(select("Install a trap.", "Roll the Dice.") == 1) { + if (job_kagero_lp > 9) { + mes "< Used 10 LP >"; + set job_kagero_lp, job_kagero_lp - 10; + setd .@var$,1; + next; + mes "The trap is installed. Please roll the dice."; + next; + } else { + mes "< Did not use 10 LP >"; + mes "^FD0260LP^000000 insufficient! Please roll the dice."; + next; + } + } + } else { + set job_kagero_lp,0; + setd .@var$,0; + mes "You are caught in the trap installed."; + mes "Press Close to go back to block 0."; + callfunc "F_KO_Survival_warp",0; + end; + } + callfunc "F_KO_Survival_dice",.@id; + end; +} + +- script Sight#ko_heal -1,{ + callfunc "F_KO_Survival_mes", atoi(substr(strnpcinfo(2),3,4)); + end; +OnTouch: + set .@id, atoi(substr(strnpcinfo(2),3,4)); + mes "There are tiny letters on the sign."; + next; + mes "This block is blessed."; + mes "Life Point recovers 7 ^FD0260LP^000000."; + mes "Cannot exceed maximum 100 ^FD0260LP^000000."; + next; + mes "< Recovered " + ((job_kagero_lp + 7 > 100) ? "" : "7") + " LP >"; + next; + set job_kagero_lp, ((job_kagero_lp + 7 > 100) ? 100 : job_kagero_lp + 7); + callfunc "F_KO_Survival_dice",.@id; + end; +} + +- script Sight#ko_curse -1,{ + callfunc "F_KO_Survival_mes", atoi(substr(strnpcinfo(2),3,4)); + end; +OnTouch: + set .@id, atoi(substr(strnpcinfo(2),3,4)); + set .@playtime, questprogress(5141,PLAYTIME); + if (!.@playtime) { + mes "There are tiny letters on the sign."; + next; + mes "If you do not pay 5 ^FD0260LP^000000, you will be cursed and immobilized for 2 minutes."; + next; + if(select("Use 5 LP", "Do not pay.") == 1) { + if (job_kagero_lp > 4) { + set job_kagero_lp, job_kagero_lp - 5; + mes "<Used 5 LP>"; + mes "You can roll the dice."; + next; + callfunc "F_KO_Survival_dice",.@id; + end; + } else { + mes "< Did not use 5 LP >"; + mes "Could not withstand the curse."; + next; + } + } + setquest 5141; + mes "You are cursed and cannot move to any other block for 2 minutes."; + close; + } else if (.@playtime == 1) { + mes "You are cursed and cannot move to any other block for 2 minutes."; + close; + } else if (.@playtime == 2) { + mes "The immobilize curse lasted for 2 minutes and then was removed."; + next; + erasequest 5141; + callfunc "F_KO_Survival_dice",.@id; + end; + } else { + erasequest 5141; + mes "An unknown error has occurred."; + mes "Please contact customer service."; + close; + } +} + +- script Sight#ko_gravity -1,{ + callfunc "F_KO_Survival_mes", atoi(substr(strnpcinfo(2),3,4)); + end; +OnTouch: + set .@id, atoi(substr(strnpcinfo(2),3,4)); + mes "There are tiny letters on the sign."; + next; + mes "Area cursed with 10 times the normal gravity. You will need 10 ^FD0260LP^000000 to roll the dice."; + next; + callfunc "F_KO_Survival_dice",.@id,10; + end; +} + +// ----------------------------------------------------------- +// Blocks (00-40) +// ----------------------------------------------------------- + +job_ko,57,16,4 script Sight#ko_00 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",0; + end; +OnTouch: + if (job_kagero != 5) { + mes "You should not be here."; + close2; + warp "amatsu",147,136; + end; + } + if (questprogress(5137) == 1 && questprogress(5140) == 0) { + mes "There are tiny letters on the sign."; + next; + callsub L_Description; + setquest 5140; + set job_kagero_lp,100; + mes "You've gained 100 Life Points (LP)."; + next; + } else { + if (questprogress(5141,PLAYTIME) > 0) + erasequest 5141; + set job_kagero_lp,100; + mes "You've returned to the first block. Your LP is recovered."; + next; + callsub L_Description; + } + callfunc "F_KO_Survival_dice",0; + end; + +L_Description: + while (1) { + if(select("Read the description.", "Start the test.") == 2) + break; + mes "The Test of Survival starts from here and you use ^FD0260100 Life Points (LP)^000000 and roll dice to advance forward through the test."; + next; + mes "The whole test starts from block 0 to block 40 and each block you get can either give or take your LP."; + next; + mes "You need to have some ^FD0260LP^000000 till you get to the arrival block at the end to pass the test."; + next; + mes "But! You still pass the test if your ^FD0260LP^000000 becomes 0 when you get to the arrival block."; + next; + mes "Game instructions end here. Good luck to you."; + next; + } + return; +} + +job_ko,49,16,4 script Sight#ko_01 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",1; + end; +OnTouch: + set .@life_p, job_kagero_lp; + mes "There are tiny letters on the sign."; + next; + mes "You are really bad at rolling dice. How can you get a 1 from the start? You can move to block 9 if you pay up 10 LP in this block."; + next; + if(select("Use 10 LP", "Roll the dice.") == 1) { + if (job_kagero_lp > 9) { + set .@reset_p, .@life_p - 10; + set job_kagero_lp, .@reset_p; + mes "< Used 10 LP >"; + mes "Press Close to move to block 9."; + callfunc "F_KO_Survival_warp",9; + end; + } else { + mes "< Did not use 10 LP >"; + mes "^FD0260LP^000000 insufficient!"; + next; + } + } + mes "Roll the dice."; + next; + callfunc "F_KO_Survival_dice",1; + end; +} + +job_ko,41,16,4 duplicate(Sight#ko_trap) Sight#ko_02 4_BULLETIN_BOARD2,1,1 + +job_ko,33,16,4 script Sight#ko_03 858,1,1,{ + callfunc "F_KO_Survival_mes",3; + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + mes "Used 5 LP so you will have to resist the curse passed down through generations before moving forward."; + next; + select("Use 5 LP"); + if (job_kagero_lp > 4) { + mes "< Used 5 LP >"; + set job_kagero_lp, job_kagero_lp - 5; + callfunc "F_KO_Survival_dice",3; + } else { + mes "< Did not use 5 LP >"; + mes "^FD0260LP^000000 insufficient! Returning to start location."; + callfunc "F_KO_Survival_warp",0; + } + end; +} + +job_ko,25,16,4 script Sight#ko_04 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",4; + end; +OnTouch: + mes "There are tiny letters scribbled on the sign."; + next; + if ($20110808_sko01$ != "") { + mes "^0000FF" + $20110808_sko01$ +" was here.^000000"; + next; + } + mes "Should I leave my name since taking the test is a special occasion?"; + next; + if(select("Use 5 LP and leave your name.", "Continue to roll the dice.") == 1) { + if (job_kagero_lp > 4) { + mes "< Used 5 LP >"; + set job_kagero_lp, job_kagero_lp - 5; + next; + set $20110808_sko01$, strcharinfo(0); + mes strcharinfo(0)+" was here."; + mes "You left your name."; + next; + } else { + mes "< Did not use 5 LP >"; + mes "^FD0260LP^000000 insufficient! You can roll the dice."; + next; + } + } + callfunc "F_KO_Survival_dice",4; + end; +} + +job_ko,17,16,4 duplicate(Sight#ko_curse) Sight#ko_05 4_BULLETIN_BOARD2,1,1 +job_ko,17,24,4 duplicate(Sight#ko_heal) Sight#ko_06 4_BULLETIN_BOARD2,1,1 +job_ko,17,32,4 duplicate(Sight#ko_trap) Sight#ko_07 4_BULLETIN_BOARD2,1,1 + +job_ko,17,40,4 script Sight#ko_08 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",8; + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + mes "Rock-paper-scissors Machine:"; + mes "If you win, move to block 15."; + mes "If it is a draw, roll the dice."; + mes "If you lose, move to block 0."; + next; + switch (callfunc("F_KO_Survival_rps")) { + case 1: + mes "Press Close to move to block 15."; + callfunc "F_KO_Survival_warp",15; + end; + case 0: + mes "A tie, so roll the dice!"; + next; + callfunc "F_KO_Survival_dice",8; + end; + case -1: + mes "Press Close to move to block 0."; + callfunc "F_KO_Survival_warp",0; + end; + } +} + +job_ko,17,48,4 script Sight#ko_09 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",9; + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + mes "Please proceed."; + next; + callfunc "F_KO_Survival_dice",9; + end; +} + +job_ko,17,56,4 duplicate(Sight#ko_trap2) Sight#ko_10 4_BULLETIN_BOARD2,1,1 +job_ko,22,60,4 duplicate(Sight#ko_trap) Sight#ko_11 4_BULLETIN_BOARD2,1,1 + +job_ko,30,60,4 script Sight#ko_12 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",12; + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + mes "Rock-paper-scissors Machine:"; + mes "If you win, move to block 20."; + mes "If it is a draw, roll the dice."; + mes "If you lose, move to block 9."; + next; + switch (callfunc("F_KO_Survival_rps")) { + case 1: + mes "Press Close to move to block 20."; + callfunc "F_KO_Survival_warp",20; + end; + case 0: + mes "A tie, so roll the dice!"; + next; + callfunc "F_KO_Survival_dice",12; + end; + case -1: + mes "Press Close to move to block 9."; + callfunc "F_KO_Survival_warp",9; + end; + } +} + +job_ko,38,60,4 duplicate(Sight#ko_heal) Sight#ko_13 4_BULLETIN_BOARD2,1,1 +job_ko,46,60,4 duplicate(Sight#ko_curse) Sight#ko_14 4_BULLETIN_BOARD2,1,1 + +job_ko,54,60,4 script Sight#ko_15 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",15; + end; +OnTouch: + set .@playtime, questprogress(5141,PLAYTIME); + if (!.@playtime) { + mes "There are tiny letters on the sign."; + next; + mes "You will be cursed by a powerful gravity curse that immobilizes you for 2 minutes."; + setquest 5141; + close; + } else if (.@playtime == 1) { + mes "You are cursed and cannot move to any other block for 2 minutes."; + close; + } else if (.@playtime == 2) { + mes "The immobilize curse lasted for 2 minutes and then was removed."; + next; + erasequest 5141; + callfunc "F_KO_Survival_dice",15; + end; + } else { + erasequest 5141; + mes "An unknown error has occurred."; + mes "Please contact customer service."; + close; + } +} + +job_ko,62,60,4 script Sight#ko_16 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",16; + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + mes "Consume 2 ^FD0260LP^000000 and roll the dice twice."; + mes "If you get the same number then you can move to block 30, if the numbers are different, consume 2 LP to roll again... until you get the same numbers."; + next; + while (1) { + callfunc "F_KO_Survival_dice2",16; + if (@job_ko_dice1 == @job_ko_dice2) break; + else { + mes "Second dice result is " + @job_ko_dice2 + ", which is not the same number."; + next; + } + } + set @job_ko_dice1,0; + set @job_ko_dice2,0; + //mes "Second dice result is " + @job_ko_dice2 + ", which is the same number. Press Close to move block 30."; + mes "You got the same number. Press Close to move block 30."; + callfunc "F_KO_Survival_warp",30; + end; +} + +job_ko,62,51,4 duplicate(Sight#ko_gravity) Sight#ko_17 4_BULLETIN_BOARD2,1,1 + +job_ko,62,43,4 script Sight#ko_18 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",18; + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + mes "Consume 2 ^FD0260LP^000000 and roll the dice twice."; + next; + mes "If the sum of the numbers from both dice is lower than 5, move to block 30, if it higher than 5, move to block 19."; + next; + callfunc "F_KO_Survival_dice2",18; + mes "Second dice result is " + @job_ko_dice2 + "."; + next; + set .@dice_sum, @job_ko_dice1 + @job_ko_dice2; + mes @job_ko_dice1 + " + " + @job_ko_dice2 + " = " + .@dice_sum; + set @job_ko_dice1,0; + set @job_ko_dice2,0; + if (.@dice_sum < 5) { + mes "You total is lower than 5. Press Close to move to block 30."; + callfunc "F_KO_Survival_warp",30; + end; + } else { + mes "You total is larger than 5. Press Close to move to block 19."; + callfunc "F_KO_Survival_warp",19; + end; + } +} + +job_ko,62,35,4 script Sight#ko_19 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",19; + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + mes "Move forward."; + next; + callfunc "F_KO_Survival_dice",19; + end; +} + +job_ko,62,27,4 duplicate(Sight#ko_heal) Sight#ko_20 4_BULLETIN_BOARD2,1,1 +job_ko,57,23,4 duplicate(Sight#ko_gravity) Sight#ko_21 4_BULLETIN_BOARD2,1,1 + +job_ko,49,23,4 script Sight#ko_22 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",22; + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + mes "Leave all your remaining ^FD0260LP^000000 and go back to block 0, then the next person will be redeemed."; + next; + if ($20110808_vko02 == 0) { + mes "Do you want to leave your ^FD0260LP^000000?"; + mes "If you leave your ^FD0260LP^000000 then the next person for test that arrives at the block will automatically pass the test."; + next; + if(select("Leave all your LP.", "Continue to roll the dice.") == 1) { + set job_kagero_lp,0; + set $20110808_vko02,1; + mes "Leave all remaining ^FD0260LP^000000 here. Press Close and go back to block 0."; + callfunc "F_KO_Survival_warp",0; + end; + } + } else if ($20110808_vko02 == 1) { + set $20110808_vko02,0; + mes "Someone before you sacrificed all their ^FD0260LP^000000, so press Close and go to the last block."; + callfunc "F_KO_Survival_warp",40; + end; + } else { + mes "An unknown error has occurred."; + mes "Please contact customer service."; + close; + } + callfunc "F_KO_Survival_dice",22; + end; +} + +job_ko,41,23,4 duplicate(Sight#ko_trap) Sight#ko_23 4_BULLETIN_BOARD2,1,1 + +job_ko,33,23,4 script Sight#ko_24 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",24; + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + mes "Consume 2 ^FD0260LP^000000 and roll the dice twice."; + next; + mes "If the sum of the numbers from both dice is larger than 8, then you can move to any block between 25 to 30. But! If the sum is below 8, you must move back to block 19."; + next; + callfunc "F_KO_Survival_dice2",24; + mes "Second dice result is " + @job_ko_dice2 + "."; + next; + set .@dice_sum, @job_ko_dice1 + @job_ko_dice2; + if (.@dice_sum > 8) { + mes @job_ko_dice1 + " + " + @job_ko_dice2 + " = " + .@dice_sum; + set @job_ko_dice1,0; + set @job_ko_dice2,0; + mes "You total is larger than 8. Please choose a block to move between blocks 25 through 30."; + callfunc "F_KO_Survival_warp", select("Move to block 25", "Move to block 26", "Move to block 27", "Move to block 28", "Move to block 29", "Move to block 30") + 24; + end; + } else { + set @job_ko_dice1,0; + set @job_ko_dice2,0; + mes "You total is lower than 8. Press Close to move to block 19."; + callfunc "F_KO_Survival_warp",19; + end; + } +} + +job_ko,25,23,4 script Sight#ko_25 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",25; + end; +OnTouch: + set .@playtime, questprogress(5141,PLAYTIME); + if (!.@playtime) { + mes "There are tiny letters on the sign."; + next; + mes "This is lame."; + mes "Cannot read the writing. There should be a way to read it."; + next; + switch(select("Try something.", "Do nothing.")) { + case 1: + specialeffect2 EF_TALK_FROSTJOKE; + mes "Tried a recent Prontera joke to do something."; + next; + setquest 5141; + mes "Got cursed and became immobilized for 2 minutes."; + close; + case 2: + if (rand(1,10) == 4) { + mes "Its a wise decision to do nothing."; + next; + } else { + mes "Nothing happened. Still need to do something."; + close; + } + break; + } + } else if (.@playtime == 1) { + mes "Cannot move because you are cursed."; + close; + } else if (.@playtime == 2) { + mes "The immobilize curse lasted for 2 minutes and then was removed."; + next; + erasequest 5141; + } else { + erasequest 5141; + mes "An unknown error has occurred."; + mes "Please contact customer service."; + close; + } + callfunc "F_KO_Survival_dice",25; + end; +} + +job_ko,25,32,4 duplicate(Sight#ko_trap) Sight#ko_26 4_BULLETIN_BOARD2,1,1 +job_ko,25,40,4 duplicate(Sight#ko_heal) Sight#ko_27 4_BULLETIN_BOARD2,1,1 +job_ko,25,48,4 duplicate(Sight#ko_trap2) Sight#ko_28 4_BULLETIN_BOARD2,1,1 + +job_ko,30,52,4 script Sight#ko_29 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",29; + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + mes "Go forth."; + next; + callfunc "F_KO_Survival_dice",29; + end; +} + +job_ko,38,52,4 duplicate(Sight#ko_trap) Sight#ko_30 4_BULLETIN_BOARD2,1,1 +job_ko,46,52,4 duplicate(Sight#ko_curse) Sight#ko_31 4_BULLETIN_BOARD2,1,1 + +job_ko,54,52,4 script Sight#ko_32 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",32; + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + mes "Rock-paper-scissors Machine:"; + mes "If you win, you get to move to any block between 33 to 38; if you lose or is a draw, you have to move to block 0."; + next; + switch (callfunc("F_KO_Survival_rps")) { + case 1: + mes "Please choose a block to move between blocks 33 through 38."; + next; + callfunc "F_KO_Survival_warp", select("Move to block 33", "Move to block 34", "Move to block 35", "Move to block 36", "Move to block 37", "Move to block 38") + 32; + end; + case 0: + case -1: + mes "Press Close to move to block 0."; + callfunc "F_KO_Survival_warp",0; + end; + } +} + +job_ko,54,43,4 script Sight#ko_33 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",33; + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + mes "You can move to block 39 if you pay all points except for the last 1 ^FD0260LP^000000 to roll the dice one last time."; + next; + switch(select("Pay LP.", "Move forward a little bit at a time.")) { + case 1: + set .@sell_p, job_kagero_lp - 1; + set job_kagero_lp,1; + mes "< Used " + .@sell_p + " LP >"; + next; + mes "Press Close to move to block 39."; + callfunc "F_KO_Survival_warp",39; + end; + case 2: + mes "Please roll the dice."; + next; + break; + } + callfunc "F_KO_Survival_dice",33; + end; +} + +job_ko,54,35,4 duplicate(Sight#ko_heal) Sight#ko_34 4_BULLETIN_BOARD2,1,1 +job_ko,49,31,4 duplicate(Sight#ko_trap) Sight#ko_35 4_BULLETIN_BOARD2,1,1 + +job_ko,41,31,4 script Sight#ko_36 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",36; + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + mes "There are only 4 blocks left till the last block."; + next; + mes "Rule 1 (Normal Dice Roll)"; + mes "You get to pass if you get 4 or above but nobody knows what will come from a dice roll."; + next; + mes "Rule 2"; + mes "If you get 1, 2, or 3 you move right to the arrival point; if you get 4, 5, or 6 you get to choose to move to block 29."; + next; + switch(select("Try it the other way.", "Go by the rules.")) { + case 1: + //mes "The Other Way (2nd Rule)"; + set .@dodoripo,0; + break; + case 2: + set .@dodoripo,1; + break; + } + set .@dice, callfunc("F_KO_Survival_dice",36,1,1); + if (.@dodoripo == 0) { + if (.@dice <= 3) { + mes "Press Close to move to the end."; + callfunc "F_KO_Survival_warp",40; + end; + } else { + mes "Press Close to move to block 29."; + callfunc "F_KO_Survival_warp",29; + end; + } + } else { + mes "Press Close to move to forward " + .@dice + " blocks."; + callfunc "F_KO_Survival_warp", ((.@dice <= 3) ? .@dice + 36 : 40); + end; + } +} + +job_ko,33,31,4 script Sight#ko_37 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",37; + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + mes "There are only 3 blocks left to the finish line but you can't you go so easily."; + next; + mes "If you get 1, 3, or 5, move to the arrival point; if you get 2, 4, or 6, go back to the starting point."; + next; + set .@dice, callfunc("F_KO_Survival_dice",37,1,1); + if (.@dice % 2) { + mes "Press Close to move to the last block."; + callfunc "F_KO_Survival_warp",40; + end; + } else { + mes "Press Close to move to the starting point."; + callfunc "F_KO_Survival_warp",0; + end; + } +} + +job_ko,33,40,4 script Sight#ko_38 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",38; + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + mes "Leave 1 LP and invest the remaining LP to install the trap to bring down other players!"; + next; + if ($20110808_vko04 == 0) { + mes "There is currently no trap installed. Do you want to install a trap?"; + next; + switch(select("Install a trap.", "Do not install.")) { + case 1: + set .@reset_p, job_kagero_lp - 1; + set job_kagero_lp,1; + set $20110808_vko04,1; + mes "< Used " + .@reset_p + " LP >"; + next; + mes "The trap is installed. Please roll the dice."; + next; + break; + case 2: + mes "Did not set a trap. Please roll the dice."; + next; + break; + } + } else { + set $20110808_vko04,0; + set job_kagero_lp,0; + mes "You are caught in the trap installed. Press Close to go back to block 0."; + callfunc "F_KO_Survival_warp",0; + end; + } + set .@dice, callfunc("F_KO_Survival_dice",38,1,1); + mes "Press Close to move forward " + .@dice + " blocks."; + callfunc "F_KO_Survival_warp", ((.@dice == 1) ? .@dice + 38 : 40); + end; +} + +job_ko,38,44,4 script Sight#ko_39 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",39; + end; +OnTouch: + mes "There are tiny letters on the sign."; + next; + mes "Now there is only 1 block left till the end. Congratulations on all you've been through to get here."; + next; + mes "But you cannot go so easily. If you get a 3, you will go back to block 3."; + next; + set .@dice, callfunc("F_KO_Survival_dice",39,1,1); + if (.@dice == 3) { + mes "Press Close to move to the 3rd block."; + callfunc "F_KO_Survival_warp",3; + end; + } else { + mes "Press Close to move to the arrival point."; + callfunc "F_KO_Survival_warp",40; + end; + } +} + +job_ko,46,41,4 script Sight#ko_40 4_BULLETIN_BOARD2,1,1,{ + callfunc "F_KO_Survival_mes",40; + end; +OnTouch: + if (job_kagero != 5) { + mes "You should not be here."; + close2; + warp "amatsu",147,136; + end; + } + if (questprogress(5137) != 1 || questprogress(5140) != 1) { + mes "You must be here by mistake."; + close2; + warp "amatsu",147,136; + end; + } + mes "There are tiny letters on the sign."; + next; + mes "To those you are preparing for a new turn..."; + mes "Well begun is half done. However always remember it is not the end."; + next; + completequest 5137; + erasequest 5140; + if (questprogress(5141)) erasequest 5141; + set job_kagero_lp,0; + mes "Let's read all the writing on the sign."; + mes "You feel like you are moved to another place."; + close2; + warp "job_ko",35,113; + end; +} + +// Test of Weaponry +//============================================================ +job_ko,127,125,4 script Red Leopard Joe#ko 4_M_JOB_ASSASSIN,{ + if (MaxWeight - Weight < 1000 || checkweight("Knife",1) == 0) { + mes "[Red Leopard Joe]"; + mes "Go reduce your weight! This test will be too difficult otherwise..."; + close; + } + if (BaseJob != Job_Ninja) { + for (set .@i,5131; .@i<=5146; set .@i,.@i+1) + if (questprogress(.@i)) erasequest .@i; + set job_kagero,0; + mes "[Red Leopard Joe]"; + mes "Sorry, your family is not the same as ours, is there something wrong?"; + close2; + warp "amatsu",147,136; + end; + } + if (job_kagero != 5) { + mes "[Red Leopard Joe]"; + mes "You are not supposed to be here..."; + mes "It's my duty to get rid of you,"; + mes "so I'll send you back now!"; + close2; + warp "amatsu",147,136; + end; + } + set .@ko_test_03_1, questprogress(5138); + set .@ko_test_03_2, questprogress(5142); + set .@ko_test_03_3, questprogress(5143); + set .@ko_test_03_4, questprogress(5144); + set .@ko_test_03_5, questprogress(5145); + if (.@ko_test_03_1 == 1 && .@ko_test_03_2 == 0 && .@ko_test_03_3 == 0 && .@ko_test_03_4 == 0 && .@ko_test_03_5 == 0) { + mes "[Red Leopard Joe]"; + mes "It's been a while!"; + next; + select("Long time indeed, Joe."); + mes "[Red Leopard Joe]"; + mes "You aren't surprised I'm here. Did you meet ^0237FDCougar^000000 before coming here?"; + next; + mes "[Red Leopard Joe]"; + mes "Don't like it that I'm not the first one you visited but that is not important."; + next; + mes "[Red Leopard Joe]"; + mes "Alright, " + strcharinfo(0) + "!"; + mes "Welcome to the workshop where weapons are created for the family."; + next; + mes "[Red Leopard Joe]"; + mes "Our family has been creating and using unique weapons to serve our secret missions since ancient times."; + next; + select("Really? At Einbroch?"); + mes "[Red Leopard Joe]"; + mes "Hmm? You are not as slow as I thought you were!"; + next; + mes "[Red Leopard Joe]"; + mes "Yes. Einbroch is known as an industrial city, the city of great blacksmiths create new technology."; + next; + mes "[Red Leopard Joe]"; + mes "My mission is to analyze their technology and report back to the family."; + next; + mes "[Red Leopard Joe]"; + mes "I spoke more than I intended to."; + next; + mes "[Red Leopard Joe]"; + mes "Did you bring enough ^6848B7Iron Ore, Iron, Steel, Phracon, Emveretaron, Rough Oridecon, and Rough Elunium^000000?"; + next; + mes "[Red Leopard Joe]"; + mes "Let's now create a new prototype weapon."; + next; + specialeffect EF_GUIDEDATTACK,AREA,"Crafting Tools#ko_01"; + mes "[Red Leopard Joe]"; + mes "Feel free to use tools from here, and..."; + next; + specialeffect EF_GUIDEDATTACK,AREA,"Crafting Tools#ko_02"; + mes "[Red Leopard Joe]"; + mes "...there..."; + next; + specialeffect EF_GUIDEDATTACK,AREA,"Crafting Tools#ko_03"; + setquest 5142; + mes "[Red Leopard Joe]"; + mes "...and everywhere else. Now let's begin!!"; + close; + } else if (.@ko_test_03_1 == 1 && .@ko_test_03_2 == 1 && .@ko_test_03_3 == 0 && .@ko_test_03_4 == 0 && .@ko_test_03_5 == 0) { + callsub L_Weapon,":"; + end; + } else if (.@ko_test_03_1 == 1 && .@ko_test_03_2 == 0 && (.@ko_test_03_3 == 1 || .@ko_test_03_4 == 1) && .@ko_test_03_5 == 0) { + callsub L_Weapon,":Yes, I'm done."; + if (countitem("Ninja_Cutter")) { + mes "[Red Leopard Joe]"; + mes "Hmm... Interesting... Is it a dagger in a shape of a Kunai?"; + next; + mes "[Red Leopard Joe]"; + } else if (countitem("Huuma_Job_Test")) { + mes "[Red Leopard Joe]"; + mes "Hmm... Is this an Ordinary Huuma?"; + next; + mes "[Red Leopard Joe]"; + mes "Ahh, Its not an Ordinary Huuma."; + } else { + mes "[Red Leopard Joe]"; + mes "Ahh, how is it possible? You don't have weapons? Maybe you equipped it?"; + close; + } + mes "Very creative. I do see room for improvement but the weapon itself may come out useful after smoothing it out a bit."; + next; + mes "[Red Leopard Joe]"; + mes "Good. I think you are ready."; + next; + mes "[Red Leopard Joe]"; + mes "Now it's time to upgrade?"; + mes "There are refinement tools on both sides of me. Use those to refine a weapon and come back."; + next; + mes "[Red Leopard Joe]"; + mes "I created the refinement tools myself with great effort so you won't have any trouble using them."; + next; + setquest 5145; + mes "[Red Leopard Joe]"; + mes "Ah... But just in case,"; + mes "^FF0000be careful not to cause trouble by showing these to blacksmiths outside of here.^000000"; + close; + } else if (.@ko_test_03_1 == 1 && .@ko_test_03_2 == 0 && (.@ko_test_03_3 == 1 || .@ko_test_03_4 == 1) && .@ko_test_03_5 == 1) { + disable_items; + mes "[Red Leopard Joe]"; + mes "Did you get a successful result?"; + next; + switch(select("Not yet.", "Here it is.", "Actually...")) { + case 1: + mes "[Red Leopard Joe]"; + mes "It isn't easy to get a satisfactory result at first."; + close; + case 2: + break; + case 3: + mes "[Red Leopard Joe]"; + mes "You've lost the weapon even with my warning."; + next; + mes "[Red Leopard Joe]"; + mes "Nothing else we can do. Wait!"; + next; + mes "Red Leopard Joe mumbles something and suddenly all weapons are unequipped."; + next; + nude; + if (countitem("Ninja_Cutter") || countitem("Huuma_Job_Test")) { + mes "[Red Leopard Joe]"; + mes "What is this? You still have the prototype. Stop playing around."; + close; + } + mes "[Red Leopard Joe]"; + mes "Oh! You really lost it."; + next; + setquest 5142; + if (questprogress(5143)) erasequest 5143; + if (questprogress(5144)) erasequest 5144; + erasequest 5145; + mes "[Red Leopard Joe]"; + mes "Well! Lets try to make it again!"; + close; + } + mes "[Red Leopard Joe]"; + mes "Looks like you've got some results."; + next; + set .@part, EQI_HAND_R; + if (!getequipisequiped(.@part)) { + mes "[Red Leopard Joe]"; + mes "Ahh! You have not equipped any weapons!"; + close; + } else { + set .@equip_id, getequipid(.@part); + if (.@equip_id == 13074 || .@equip_id == 13312) { + mes "[Red Leopard Joe]"; + mes "Is that weapon yours? Let me have a look."; + next; + } else { + mes "[Red Leopard Joe]"; + mes "Are you certain it's that weapon?"; + next; + mes "[Red Leopard Joe]"; + mes "You plan to trick me with that? Again!!"; + close; + } + } + mes "Joe took a thorough look at the seal."; + next; + set .@equip_refine, getequiprefinerycnt(.@part); + if (.@equip_refine < 7) { + mes "[Red Leopard Joe]"; + mes "Are you that low?"; + mes "I must have misjudged you. You might have been satisfied yourself but I'm not. Do it again!!"; + close; + } else if (.@equip_refine > 6 && .@equip_refine < 9) { + mes "[Red Leopard Joe]"; + mes "Hmm... Is this your limit?"; + mes "You've just made it that close to passing. I will ask one more time, are you satisfied?"; + next; + if(select("Yes", "No") == 2) { + mes "[Red Leopard Joe]"; + mes "You're still here. Why?"; + close; + } + mes "[Red Leopard Joe]"; + mes "Your competence is enough."; + next; + } else if (.@equip_refine > 8 && .@equip_refine < 13) { + mes "[Red Leopard Joe]"; + mes "Ah, as I expected."; + mes "I still believe that you will not stop here."; + next; + if(select("I want to stop.", "I want to continue.") == 2) { + mes "[Red Leopard Joe]"; + mes "I will look forward for your result."; + close; + } + mes "[Red Leopard Joe]"; + mes "Your competence is enough."; + next; + } else { + mes "[Red Leopard Joe]"; + mes "Better than expected."; + next; + mes "[Red Leopard Joe]"; + mes "For beginners, quite good. This test may not be significant to you, but your competence is enough."; + next; + } + mes "[Red Leopard Joe]"; + mes "I can feel it."; + mes "I will take this weapon to give it some finishing touches."; + next; + delequip .@part; + erasequest 5145; + completequest 5138; + if (questprogress(5143) == 1) completequest 5143; + if (questprogress(5144) == 1) completequest 5144; + mes "[Red Leopard Joe]"; + mes "'" + strcharinfo(0) + "'"; + mes "Passed the weapon test!!"; + close2; + enable_items; + end; + } else if (.@ko_test_03_1 == 2 && .@ko_test_03_2 == 0 && (.@ko_test_03_3 == 2 || .@ko_test_03_4 == 2) && .@ko_test_03_5 == 0) { + mes "[Red Leopard Joe]"; + mes "Oh, I almost forgot."; + mes "Go report the test results to Gion!"; + close2; + warp "job_ko",26,104; + end; + } else { + mes "[Red Leopard Joe]"; + mes "You should not have come here..."; + mes "It's my duty to get rid of you."; + mes "This will push you back!"; + close2; + warp "amatsu",147,136; + end; + } + end; + +L_Weapon: + mes "[Red Leopard Joe]"; + mes "Are you done making the prototype of the new weapons?"; + next; + switch(select("Crafting tools?", "I don't have enough materials.", "How do you expect me to make a weapon?" + getarg(0))) { + case 1: + specialeffect EF_GUIDEDATTACK,AREA,"Crafting Tools#ko_01"; + mes "[Red Leopard Joe]"; + mes "Feel free to use tools from here, and..."; + next; + specialeffect EF_GUIDEDATTACK,AREA,"Crafting Tools#ko_02"; + mes "[Red Leopard Joe]"; + mes "...there..."; + next; + specialeffect EF_GUIDEDATTACK,AREA,"Crafting Tools#ko_03"; + mes "[Red Leopard Joe]"; + mes "...and everywhere else."; + close; + case 2: + mes "[Red Leopard Joe]"; + mes "You haven't brought enough materials?"; + next; + specialeffect EF_GUIDEDATTACK,AREA,"Drawer#ko"; + mes "[Red Leopard Joe]"; + mes "Then we'll have to pay a visit to the village. Try the ^FF0000drawer^000000 over there. It'll take you to the village."; + close; + case 3: + mes "[Red Leopard Joe]"; + mes "Hmm... Guess I expected too much? Let me explain."; + next; + mes "[Red Leopard Joe]"; + mes "You first have to melt the ore to use for the weapon. And the best way to get high purity metal is to melt materials that are of the same kind."; + next; + mes "[Red Leopard Joe]"; + mes "For example, Iron Ore, Iron, and Steel are of similar property so you can get a high purity metal out of them."; + next; + mes "[Red Leopard Joe]"; + mes "Once you've melted a high purity metal, pour it in a mold to get the shape of the weapon and then make it firm through grinding and tempering."; + next; + mes "[Red Leopard Joe]"; + mes "By the way, you will get the best results by thoroughly rotating, grinding and tempering."; + next; + mes "[Red Leopard Joe]"; + mes "I think this is enough to get you started, don't you think? Now go and work on that prototype!!"; + close; + case 4: + return; + } +} + +job_ko,117,128,0 script Drawer#ko CLEAR_NPC,{ + mes "There is some kind of device on the drawer."; + next; + if(select("Stop.", "Try to operate it.") == 2) { + mes "Clank clunk clink"; + close2; + warp "amatsu",147,136; + end; + } + close; +} + +job_ko,131,124,0 script Crafting Tools#ko_01 CLEAR_NPC,{ + if (MaxWeight - Weight < 1000 || checkweight("Knife",1) == 0) { + mes "Too heavy! Please reduce your weight."; + close; + } + if (questprogress(5138) == 1 && questprogress(5142) == 1 && questprogress(5143) == 0 && questprogress(5144) == 0 && questprogress(5145) == 0) { + // fall through + } else { + mes "A crafting tool."; + mes "Don't really need it now."; + close; + } + mes "Tool to create weapons."; + next; + + // Part 1: Melting Metal + // Input similar materials to proceed to next step. + mes "First need to melt metals like iron and iron ore to use to create a weapon."; + next; + callsub L_CheckMaterials; + while(1) { + switch(select("Melt Iron Ore.", "Melt Iron.", "Melt Steel.", "Melt Phracon.", "Melt Emveretarcon.", "Melt Rough Oridecon.", "Melt Rough Elunium.", "Stop.")) { + case 1: set .@item,1002; set .@val1,1; break; //Iron_Ore + case 2: set .@item, 998; set .@val1,2; break; //Iron + case 3: set .@item, 999; set .@val1,3; break; //Steel + case 4: set .@item,1010; set .@val2,1; break; //Phracon + case 5: set .@item,1011; set .@val2,2; break; //Emveretarcon + case 6: set .@item, 756; set .@val2,3; break; //Oridecon_Stone + case 7: set .@item, 757; set .@val3,5; break; //Elunium_Stone + case 8: close; + } + if (countitem(.@item)) { + delitem .@item,1; + if (.@val1) { //Iron Ore, Iron, Steel + set .@ston_t01, .@ston_t01 + .@val1; + if (.@ston_t02 > 0) + set .@ston_t02, .@ston_t02 - .@val1; + } else if (.@val2) { //Phracon, Emveretarcon, Rough Oridecon + set .@ston_t02, .@ston_t02 + .@val2; + if (.@ston_t01 > 0) + set .@ston_t01, .@ston_t01 - .@val2; + } else if (.@val3) { //Rouch Elunium + if (.@ston_t01 > 0) + set .@ston_t01, .@ston_t01 - .@val3; + if (.@ston_t02 > 0) + set .@ston_t02, .@ston_t02 - .@val3; + } + specialeffect EF_DEMONSTRATION; + mes "Melted " + getitemname(.@item) + " in high temperature."; + next; + if (.@ston_t01 > 49 || .@ston_t02 > 49) + break; + } else { + mes "Don't have " + getitemname(.@item) + "."; + next; + } + callsub L_CheckMaterials; + mes "Which metal will be melted next?"; + next; + } + set .@boll_01, ((.@ston_t01 > 49) ? .@ston_t01 : .@ston_t02); + + // Part 2: Forging + // Grind and temper a weapon. + mes "Now the metal is melted to use for creating weapons."; + next; + mes "Next is to make the melted metal firm by pouring it into a mold. Which mold shape will you use?"; + next; + switch(select("Dagger Mold", "Shuriken Mold")) { + case 1: + set .@weapon_who,0; + mes "Poured the melted metal into the dagger mold."; + break; + case 2: + set .@weapon_who,1; + mes "Poured the melted metal into the shuriken mold."; + break; + } + next; + progressbar "ffff00",3; + mes "Looks like the metal is taking shape. Now what next?"; + next; + set @job_ko_forge,0; + set @job_ko_lastaction,0; + callsub L_ForgeWeapon,":"; + while(1) { + mes "Now what next?"; + next; + if (callsub(L_ForgeWeapon,":Final Touches") == 0) + break; + } + set .@boll_02, @job_ko_forge; + set @job_ko_forge,0; + set @job_ko_lastaction,0; + + // Part 3: Create the Weapon + // Success rate based on previous two parts. + set .@boll_00, .@boll_01 + .@boll_02; + mes "Start to sharpen the tool using a whetstone for finishing touches."; + next; + progressbar "ffff00",3; + set .@success_pp, rand(1,100); + if (.@boll_00 < 100) { + if (.@success_pp == 77) set .@success,1; + } else { + if (.@success_pp != 44) set .@success,1; + } + if (.@success) { + specialeffect2 EF_PERFECTION; + erasequest 5142; + if (.@weapon_who == 0) { + setquest 5143; + getitem "Ninja_Cutter", 1; + } else { + setquest 5144; + getitem "Huuma_Job_Test", 1; + } + mes "The weapon was created successfully."; + next; + mes "Let's take it to Red Leopard Joe."; + close; + } else { + specialeffect2 EF_SUI_EXPLOSION; + mes "The weapon was destroyed while doing the finishing touches to it."; + next; + mes "There must have been something missed while creating the weapon. Very sad this happened but you'll have to start all over again."; + close; + } + end; + +L_CheckMaterials: + if (!countitem("Iron_Ore") && !countitem("Iron") && !countitem("Steel") && !countitem("Phracon") && !countitem("Emveretarcon") && !countitem("Oridecon_Stone") && !countitem("Elunium_Stone")) { + mes "But you do not have any more metal to melt. Let's try again after getting more metal."; + close; + } + return; + +L_ForgeWeapon: + set .@i, select("Grind the weapon", "Temper the weapon" + getarg(0)); + switch (.@i) { + case 1: + specialeffect2 EF_DETOXICATION; + mes "Ground the weapon."; + break; + case 2: + specialeffect2 EF_REPAIRWEAPON; + mes "Tempered the weapon."; + break; + case 3: + return 0; + } + next; + if (@job_ko_lastaction == .@i) + set @job_ko_forge, @job_ko_forge + 1; + else + set @job_ko_forge, @job_ko_forge + 2; + set @job_ko_lastaction, .@i; + return 1; +} +job_ko,129,129,0 duplicate(Crafting Tools#ko_01) Crafting Tools#ko_02 CLEAR_NPC +job_ko,116,124,0 duplicate(Crafting Tools#ko_01) Crafting Tools#ko_03 CLEAR_NPC + +job_ko,121,121,0 script Refinement Tools#ko_01 CLEAR_NPC,{ + if (questprogress(5138) == 1 && questprogress(5142) == 0 && (questprogress(5143) == 1 || questprogress(5144) == 1) && questprogress(5145) == 1) { + disable_items; + } else { + mes "This tool helps you refine your weapons automatically. However, you won't need this just now."; + close; + } + mes "You turn on the refinement tool."; + mes "The equipment starts up with a pleasant vibration."; + next; + mes "Looks like you can use the tool right away for refinement because it holds a good deal of Elunium and Oridecon within it."; + next; + if(select("Start refining.", "Do not start refining.") == 2) { + mes "You turned off the tool."; + close; + } + set .@part, EQI_HAND_R; + if (!getequipisequiped(.@part)) { + mes "Bzzzt"; + mes "A warning beep comes from the tool."; + next; + mes "[Red Leopard Joe]"; + mes "This equipment does not work without an equipped item to refine."; + close; + } else { + set .@equip_id, getequipid(.@part); + if (.@equip_id == 13074 || .@equip_id == 13312) { + mes "Analyzing the weapon."; + next; + } else { + mes "[Red Leopard Joe]"; + mes "Wait... this weapon is not a customized one."; + next; + mes "[Red Leopard Joe]"; + mes "Why don't you refine this with those hot-headed blacksmiths out there?"; + close; + } + } + if (!getequipisenableref(.@part)) { + mes "Bzzzt"; + mes "A warning beep comes from the tool."; + next; + mes "[Red Leopard Joe]"; + mes "That weapon cannot be refined. Where did you get it?"; + close; + } + set .@equip_refine, getequiprefinerycnt(.@part); + if (.@equip_refine >= 20) { + mes "Bzzzt"; + mes "A warning beep comes from the tool."; + next; + mes "[Red Leopard Joe]"; + mes "This equipment is perfectly refined. Keep it for yourself!"; + close; + } + if (getequippercentrefinery(.@part) < 100) { + mes "This is very well refined equipment. Do you want to continue? Refine skill decreases by 1 if refinement fails."; + next; + if(select("Continue.", "Stop.") == 2) { + mes "You turned off the tool."; + close; + } + } else { + mes "Starting to refine."; + next; + } + progressbar "ffff00",1; + set .@rand, rand(1,100); + if (.@equip_refine < 5) { // 0>5 100% + set .@wlevel_up,1; + } else if (.@equip_refine == 5) { // 5>6 40% + if (.@rand < 41) set .@wlevel_up,1; + } else if (.@equip_refine == 6) { // 6>7 30% + if (.@rand < 31) set .@wlevel_up,1; + } else if (.@equip_refine == 7) { // 7>8 20% + if (.@rand < 21) set .@wlevel_up,1; + } else if (.@equip_refine == 8) { // 8>9 10% + if (.@rand < 11) set .@wlevel_up,1; + } else if (.@equip_refine == 9) { // 9>10 5% + if (.@rand < 6) set .@wlevel_up,1; + } else { // 10>20 2% + if (.@rand < 3) set .@wlevel_up,1; + } + if (.@wlevel_up) { + successrefitem .@part; + mes "Succeeded in refining."; + mes "Turned off the refining tool."; + close; + } else { + downrefitem .@part; + mes "Failed in refining."; + mes "Your weapon refinement skill dropped by 1."; + mes "Turned off the refining tool."; + close; + } + end; +} +job_ko,127,121,0 duplicate(Refinement Tools#ko_01) Refinement Tools#ko_02 CLEAR_NPC + +// Test of Battle +//============================================================ +job_ko,148,46,4 script Guide Gion#ko2 4_M_KAGE_OLD,{ + if (MaxWeight - Weight < 2000 || checkweight("Knife",1) == 0) { + mes "[Guide Gion]"; + mes "You don't need so many things now!"; + close; + } + if (job_kagero == 7) { + cutin "job_ko01",2; + mes "[Guide Gion]"; + mes "Looks like you haven't taken care of the target yet."; + next; + mes "[Guide Gion]"; + mes "I'll tell you once more. The target is the ^FF0000Family Secret^000000."; + next; + mes "[Guide Gion]"; + mes "Of course the path will be difficult, so continue searching!"; + close2; + cutin "",255; + end; + } else if (job_kagero == 8) { + cutin "job_ko02",2; + mes "[Guide Gion]"; + mes "Looks like you've taken care of the target. Hmm."; + next; + if (checkmount()) { + mes "[Guide Gion]"; + mes "But please get down from your frog. Otherwise I can't continue!"; + close2; + cutin "",255; + end; + } + if (BaseLevel < 99 || JobLevel < 70) { + mes "[Guide Gion]"; + mes "How did you get weaker? Come back once you've regained your previous levels."; + close2; + cutin "",255; + end; + } + if (SkillPoint != 0) { + mes "[Guide Gion]"; + mes "Please come back after using all your Skill Points."; + close2; + cutin "",255; + end; + } + mapannounce "job_ko","[Gion] Interrupting the Test of Battle.",bc_map; + cutin "job_ko04",2; + mes "[Guide Gion]"; + mes "The Test of Battle will be put off for a while. Don't worry because this does not have affect to other tests."; + next; + mapannounce "job_ko","[Gion] My Friend " + strcharinfo(0) + " made it to " + ((Sex)?"Kagerou":"Oboro") + " Path. Congratulations!!",bc_map; + mes "[Guide Gion]"; + mes "My friend " + strcharinfo(0) + " made it to " + ((Sex)?"Kagerou":"Oboro") + " Path. Congratulations!!"; + next; + cutin "job_ko02",2; + mes "[Guide Gion]"; + mes "It is pleasant to meet a youth that is walking through a new path."; + next; + mes "[Someone's Voice]"; + mes "Wait for a while, Gion."; + next; + donpcevent "Cougar#ko2::OnEnable"; + donpcevent "Red Leopard Joe#ko2::OnEnable"; + cutin "job_ko04",2; + mes "[Guide Gion]"; + mes "I'm sorry I almost forgot about you two. Do you have anything to share with " + strcharinfo(0) + "?"; + next; + cutin "",255; + mes "[Cougar]"; + mes "Hmm... Embarrassing... to speak so suddenly..."; + next; + mes "[Cougar]"; + mes strcharinfo(0) + ", you are now a proud member of our family. Always hold your head high and..."; + next; + mes "[Cougar]"; + mes "^777777(Gai's voice fades out.)^000000."; + mes "I'm sorry I strangled you when we first met."; + next; + donpcevent "Cougar#ko2::OnDisable"; + mes "[Red Leopard Joe]"; + mes "Puhahaha! Gai is all talk. I know I was know valuable to you than that Gai."; + next; + if (questprogress(5143) == 2) { + set .@item,13075; //Kurenai + set .@weapon$,"dagger"; + } else { + set .@item,13311; //Huuma_Shadow + set .@weapon$,"shuriken"; + } + mes "[Red Leopard Joe]"; + mes "I did some work on the prototype " + .@weapon$ + " you made."; + next; + mes "[Red Leopard Joe]"; + mes getitemname(.@item) + " now shines beautifully with a scarlet glow after I did the finishing touches."; + next; + mes "[Red Leopard Joe]"; + mes "I named your weapons on my own but I know you'll like the name."; + next; + mes "[Red Leopard Joe]"; + mes "Guide Gion, please continue."; + next; + cutin "job_ko01",2; + donpcevent "Red Leopard Joe#ko2::OnDisable"; + mes "[Guide Gion]"; + mes "I don't have much to add because Gai and Joe said it all."; + next; + mes "[Guide Gion]"; + mes "I'm just sorry that the environment of all these tests could have been better for our later generation."; + next; + mes "[Guide Gion]"; + mes "You only need to look forward and never turn back."; + next; + for (set .@i,5131; .@i<=5146; set .@i,.@i+1) + if (questprogress(.@i)) erasequest .@i; + set job_kagero,9; + getnameditem .@item,strcharinfo(0); + jobchange (Sex)?Job_Kagerou:Job_Oboro; + donpcevent "Summon Target#ko::OnEnable"; + mes "[Guide Gion]"; + mes "I hope the blessings of Kagerou, dancing sun and Oboro, misty moonlight will be with you on your journey ahead."; + close2; + warp "que_ng",21,71; + end; + } else if (job_kagero == 9) { + cutin "job_ko01",2; + mes "[Guide Gion]"; + mes "I hope the blessings of Kagerou, dancing sun and Oboro, misty moonlight will be with you on your journey ahead."; + close2; + warp "que_ng",21,71; + end; + } else { + cutin "job_ko01",2; + mes "[Guide Gion]"; + mes "You should not be here. Please leave!"; + close2; + warp "amatsu",147,136; + end; + } +} + +job_ko,151,47,4 script Cougar#ko2 4_M_JOB_ASSASSIN,{ + mes "[Cougar]"; + mes "Congratulation for choosing the road of development!"; + close; +OnInit: +OnDisable: + disablenpc "Cougar#ko2"; + end; +OnEnable: + enablenpc "Cougar#ko2"; + end; +} + +job_ko,145,47,6 script Red Leopard Joe#ko2 4_M_JOB_ASSASSIN,{ + mes "[Red Leopard Joe]"; + mes "You have not found the target? Continue searching it."; + close; +OnInit: +OnDisable: + disablenpc "Red Leopard Joe#ko2"; + end; +OnEnable: + enablenpc "Red Leopard Joe#ko2"; + end; +} + +job_ko,1,1,4 script Summon Target#ko CLEAR_NPC,{ + end; +OnInit: +OnTimer180000: + donpcevent "Summon Target#ko::OnEnable"; + end; +OnEnable: + stopnpctimer; + switch (rand(1,7)) { + case 1: set .@mob,1002; break; + case 2: set .@mob,1031; break; + case 3: set .@mob,1113; break; + case 4: set .@mob,1063; break; + case 5: set .@mob,1010; break; + case 6: set .@mob,1049; break; + case 7: set .@mob,1050; break; + } + areamonster "job_ko",120,30,160,70,"Family Secret",.@mob,1,"Summon Target#ko::OnMyMobDead"; + end; +OnDisable: + initnpctimer; + end; +OnMyMobDead: + if (mobcount("job_ko","Summon Target#ko::OnMyMobDead") < 1) { + if (job_kagero == 7) { + donpcevent "Summon Target#ko::OnDisable"; + set job_kagero,8; + } else + donpcevent "Summon Target#ko::OnEnable"; + } + end; +} + +job_ko,1,2,4 script Summon Fake#ko CLEAR_NPC,{ + end; +OnInit: + donpcevent "Summon Fake#ko::OnEnable"; + end; +OnEnable: + areamonster "job_ko",120,30,160,70,"Family's Legacy",1002,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Kagerou's Memory",1002,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Oboro's Memory",1002,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Family's Mistake",1031,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Oboro's Mistake",1031,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Kagerou's Mistake",1031,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Family's Memory",1113,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Oboro's Past",1113,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Kagerou's Past",1113,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Family's Legacy",1063,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Oboro's Legacy",1063,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Kagerou's Legacy",1063,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Family's Mistake",1010,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Oboro's Memory",1010,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Kagerou's Memory",1010,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Family's Past",1049,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Oboro's Mistake",1049,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Kagerou's Mistake",1049,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Family's Memory",1050,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Oboro's Past",1050,5,"Summon Fake#ko::OnMyMobDead"; + areamonster "job_ko",120,30,160,70,"Kagerou's Past",1050,5,"Summon Fake#ko::OnMyMobDead"; + end; +OnDisable: + killmonster "job_ko","Summon Fake#ko::OnMyMobDead"; + end; +OnMyMobDead: + if (mobcount("job_ko","Summon Fake#ko::OnMyMobDead") < 100) { + donpcevent "Summon Fake#ko::OnDisable"; + donpcevent "Summon Fake#ko::OnEnable"; + warp "job_ko",16,113; + } + end; +} + +// GM Control Panel +//============================================================ +job_ko,3,1,4 script Battle Test Control#ko 4_M_KAGE_OLD,{ + callfunc "F_GM_NPC"; + if (callfunc("F_GM_NPC",1854,0) == 1) { + mes "This is the Battle Test Control NPC."; + next; + } else { + mes "Incorrect password."; + close; + } + switch(select("Summon Target", "Summon Target Disable", "Summon Fake", "Summon Fake Disable")) { + case 1: + donpcevent "Summon Target#ko::OnEnable"; + mes "Summon Target activated."; + break; + case 2: + donpcevent "Summon Target#ko::OnDisable"; + mes "Summon Target disabled."; + break; + case 3: + donpcevent "Summon Fake#ko::OnEnable"; + mes "Summon Fake activated."; + break; + case 4: + donpcevent "Summon Fake#ko::OnDisable"; + mes "Summon Fake disabled."; + break; + } + next; + mes "Control has completed."; + close; +} + +job_ko,4,1,4 script Guide#ko_helper 4_M_KAGE_OLD,{ + callfunc "F_GM_NPC"; + if (callfunc("F_GM_NPC",1854,0) == 1) { + mes "This is the Kagerou and Oboro Job Change assistant NPC."; + next; + } else { + mes "Incorrect password."; + close; + } + mes "I can solve any problems in the job change quest."; + next; + switch(select("Current Status", "Test Set", "Pre-Transfer", "Initialize")) { + case 1: + mes "Variable states (current/maximum)"; + mes "job_kagero (" + job_kagero + "/9)"; + mes "job_kagero_lp (" + job_kagero_lp + "/100)"; + next; + mes "Quest states (current/maximum)"; + mes "5131 (" + questprogress(5131) + "/1)"; + mes "5132 (" + questprogress(5132) + "/1)"; + mes "5133 (" + questprogress(5133) + "/1)"; + mes "5134 (" + questprogress(5134) + "/1)"; + mes "5135 (" + questprogress(5135) + "/1)"; + mes "5136 (" + questprogress(5136) + "/2)"; + mes "5139 (" + questprogress(5139) + "/1)"; + mes "5137 (" + questprogress(5137) + "/2)"; + mes "5140 (" + questprogress(5140) + "/1)"; + mes "5141 (" + questprogress(5141,PLAYTIME) + "/1)"; + mes "5138 (" + questprogress(5138) + "/2)"; + mes "5142 (" + questprogress(5142) + "/1)"; + mes "5143 (" + questprogress(5143) + "/2)"; + mes "5144 (" + questprogress(5144) + "/2)"; + mes "5145 (" + questprogress(5145) + "/1)"; + mes "5146 (" + questprogress(5146) + "/1)"; + close; + case 2: + mes "Which test do you want to set as completed?"; + mes "Three tests must be completed before changing jobs. If you wish to reach a job change state, please select [Pre-Transfer] directly from the previous menu!"; + next; + switch(select("Complete Test of Knowledge", "Complete Test of Survival", "Complete Test of Weaponry")) { + case 1: + set job_kagero,5; + setquest 5136; + completequest 5136; + mes "The Test of Knowledge has been set as complete. I hope you have finished your initialization."; + break; + case 2: + set job_kagero,5; + set job_kagero_lp,0; + setquest 5137; + completequest 5137; + mes "The Test of Survival has been set as complete. I hope you have finished your initialization."; + break; + case 3: + set job_kagero,5; + setquest 5138; + completequest 5138; + mes "The Test of Weaponry has been set as complete. I hope you have finished your initialization."; + break; + } + close; + case 3: + mes "I will change your quest status to Pre-Transfer, but before that..."; + next; + mes "Please select a weapon."; + next; + switch(select("Dagger", "Shuriken")) { + case 1: set .@quest,5143; break; + case 2: set .@quest,5144; break; + } + setquest 5136; + completequest 5136; + setquest 5137; + completequest 5137; + setquest 5138; + completequest 5138; + setquest .@quest; + completequest .@quest; + setquest 5146; + set job_kagero,8; + mes "I've set the Pre-Transfer status. Good luck!!"; + close; + case 4: + set job_kagero,0; + set job_kagero_lp,0; + for (set .@i,5131; .@i<=5146; set .@i,.@i+1) + if (questprogress(.@i)) erasequest .@i; + mes "The task of initialization is complete. You can confirm this through the [Current Status] option!"; + close; + } + end; +}
\ No newline at end of file diff --git a/npc/re/scripts_jobs.conf b/npc/re/scripts_jobs.conf index 1d6e9f8f9..0bd34bd50 100644 --- a/npc/re/scripts_jobs.conf +++ b/npc/re/scripts_jobs.conf @@ -10,6 +10,8 @@ npc: npc/re/jobs/1-1/mage.txt npc: npc/re/jobs/1-1/merchant.txt npc: npc/re/jobs/1-1/swordman.txt npc: npc/re/jobs/1-1/thief.txt +// - 2e +npc: npc/re/jobs/2e/kagerou_oboro.txt // - 3-1 npc: npc/re/jobs/3-1/archbishop.txt npc: npc/re/jobs/3-1/mechanic.txt diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql index 4146d24ee..efa182cc7 100644 --- a/sql-files/item_db_re.sql +++ b/sql-files/item_db_re.sql @@ -968,7 +968,7 @@ REPLACE INTO `item_db` VALUES ('1642','Staff_Of_Darkness','Staff Of Darkness','4 REPLACE INTO `item_db` VALUES ('1643','Dead_Tree_Cane','Dead Tree CaneStaff','4','20','10','100','100','155','0','1','0','8487700','63','2','2','4','70',NULL,'1','10','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,4; if (getrefine()>5) { bonus bInt,getrefine()-5; bonus bMaxHP,-200; bonus bMaxSP,-100; }','',''); REPLACE INTO `item_db` VALUES ('1644','Piercing_Staff_M','Staff of Piercing','4','20','10','500','80','145','0','1','0','99092','58','2','2','3','70',NULL,'1','10','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','bonus bInt,4; bonus bIgnoreMdefRate,10+getrefine();','',''); REPLACE INTO `item_db` VALUES ('1645','Lich_Bone_Wand_M','Lich\'s Bone Wand','4','20','10','800','60','170','0','1','2','99092','58','2','2','3','70',NULL,'1','10','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1; bonus bDex,1; bonus bAtkEle,Ele_Undead; bonus bMatkRate,20; bonus3 bAutoSpellWhenHit,NPC_WIDECURSE,5,10+getrefine(); if(getrefine()>=9) { bonus bMatkRate,3; bonus bMaxSP,300; }','',''); -REPLACE INTO `item_db` VALUES ('1646','La\'cryma_Stick','La\'cryma Stick','4','20','10','500','30','180','0','1','2','66052','58','2','2','3','50',NULL,'1','10','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,4; bonus bMdef,1; bonus2 bSkillAtk,WZ_STORMGUST,getrefine(); if (getrefine() > 9) bonus2 bVariableCastrate,WZ_STORMGUST,-8;','',''); +REPLACE INTO `item_db` VALUES ('1646','La\'cryma_Stick','La\'cryma Stick','4','20','10','500','30','180','0','1','2','66052','58','2','2','3','50',NULL,'1','10','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,4; bonus bMdef,1; bonus bMdef,getrefine(); bonus2 bSkillAtk,WZ_STORMGUST,getrefine(); if (getrefine() > 9) bonus2 bVariableCastrate,WZ_STORMGUST,-8;','',''); REPLACE INTO `item_db` VALUES ('1647','Croce_Staff','Croce Staff','4','20','10','500','30','175','0','1','1','33040','58','2','2','3','50',NULL,'1','10','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Holy; bonus bInt,4; bonus4 bAutoSpellOnSkill,AL_HEAL,AL_BLESSING,max(getskilllv(AL_BLESSING),1),20;','',''); REPLACE INTO `item_db` VALUES ('1648','Staff_Of_Bordeaux','Staff Of Bordeaux','4','20','10','500','30','170','0','1','0','66052','58','2','2','4','50',NULL,'1','10','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2; bonus bDex,1; if(getskilllv(SA_DRAGONOLOGY) == 5) { bonus bUseSPrate,-15; bonus bInt,3; }','',''); REPLACE INTO `item_db` VALUES ('1649','Rafini_Staff','Laphine Staff','4','20','10','500','30','180','0','1','0','99072','56','2','2','3','100',NULL,'1','10','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFixedCastrate,-getrefine();','',''); @@ -1191,7 +1191,7 @@ REPLACE INTO `item_db` VALUES ('2012','Aqua_Staff2','Empowered Aqua Staff','4',' REPLACE INTO `item_db` VALUES ('2013','Crimson_Staff2','Empowered Crimson Staff','4','20','10','900','30','270','0','1','1','512','56','2','34','4','130',NULL,'1','10','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Fire; bonus bInt,5; bonus2 bSkillAtk,MG_FIREBOLT,30; bonus2 bSkillAtk,MG_FIREBALL,30;','',''); REPLACE INTO `item_db` VALUES ('2014','Forest_Staff2','Empowered Forest Staff','4','20','10','900','30','270','0','1','1','512','56','2','34','4','130',NULL,'1','10','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Earth; bonus bInt,5; bonus2 bSkillAtk,WZ_EARTHSPIKE,30; bonus2 bSkillAtk,WZ_HEAVENDRIVE,30;','',''); REPLACE INTO `item_db` VALUES ('2015','Upg_Staff','Upgrade Staff','4','20','10','1000','50','70','0','1','1','8487700','63','2','34','3','0',NULL,'1','10','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,(getrefine()*10); bonus bHealPower,getrefine(); if(BaseJob==Job_Wizard) bonus bMatk,30; else if(BaseJob==Job_Sage) bonus bMatk,20; if(BaseLevel>70) bonus bMatk,(((BaseLevel-70)/10)*10);','',''); -REPLACE INTO `item_db` VALUES ('2016','Velum_Arc_Wand','Vellum Arc Wand','4','20','10','800','110','220','0','1','0','8487700','63','2','34','4','95',NULL,'1','10','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus2 bMagicAddRace,RC_DemiHuman,25; bonus bIgnoreMdefRate,25; if(getrefine()>5) { bonus2 bMagicAddRace,RC_DemiHuman,15; } if(getrefine()>8) { bonus bVariableCastrate,-20; }','',''); +REPLACE INTO `item_db` VALUES ('2016','Velum_Arc_Wand','Vellum Arc Wand','4','20','10','800','110','220','0','1','0','8487700','63','2','34','4','95',NULL,'1','10','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus2 bMagicAddRace,RC_DemiHuman,25; bonus bIgnoreMdefRate,25; if(getrefine()>5) { bonus2 bMagicAddRace,RC_DemiHuman,15; } if(getrefine()>8) { bonus bVariableCastrate,-20; bonus bFixedCast,-200; }','',''); REPLACE INTO `item_db` VALUES ('2017','Divine_Cross_','Divine Cross','4','20','10','1500','120','210','0','1','0','33024','63','2','34','4','70',NULL,'1','23','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAtkEle,Ele_Holy; bonus bDex,4;','',''); REPLACE INTO `item_db` VALUES ('2018','Metal_Staff','Metal Staff','4','20','10','0','50','70','0','1','1','8487701','63','2','34','3','1',NULL,'1','23','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; if(BaseJob==Job_Wizard) bonus bMatk,15; else if(BaseJob==Job_Sage) bonus bMatk,10; bonus bMatk,(getrefine()*5); .@val = min(BaseLevel/10, 12); if (.@val > 2) bonus bMatk,((.@val-2)*5);','',''); REPLACE INTO `item_db` VALUES ('2023','Thanatos_Two-Handed_Staff','Thanatos Two-Handed Staff','4','20','10','1400','120','250','0','1','1','99092','56','2','34','4','120',NULL,'1','23','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bSPDrainRate,10,5; bonus2 bHPDrainRate,10,5; bonus2 bHPLossRate,100,10000; bonus bHealPower,18;','','heal -1000,0;'); @@ -3541,7 +3541,7 @@ REPLACE INTO `item_db` VALUES ('5733','E_Brooch_C','E Brooch C','5','1','0','0', REPLACE INTO `item_db` VALUES ('5734','E_Magestic_Goat_C','E Magestic Goat C','5','2','1','0','0','0','5','0','0','2147483646','63','2','256','0','0',NULL,'0','41','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1;','',''); REPLACE INTO `item_db` VALUES ('5735','E_Ribbon_Green','E Ribbon Green','5','800','400','100','0','0','1','0','0','4294967295','63','0','256','0','0',NULL,'1','244','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','',''); REPLACE INTO `item_db` VALUES ('5736','EF_Whisper_Mask','EF Whisper Mask','5','20','10','0','0','0','0','0','0','4294967295','63','2','769','0','0',NULL,'0','321','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableHelm,0; bonus bAgi,3; bonus2 bSubEle,Ele_Ghost,-10;','',''); -REPLACE INTO `item_db` VALUES ('5737','Cactus_Hat','Potted Muka Hat','5','20','10','300','0','0','1','0','0','4294967295','63','2','256','0','0',NULL,'0','615','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); +REPLACE INTO `item_db` VALUES ('5737','Cactus_Hat','Potted Muka Hat','5','20','10','300','0','0','1','0','0','4294967295','63','2','256','0','0',NULL,'0','615','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','skill \"SM_PROVOKE\",3;','',''); REPLACE INTO `item_db` VALUES ('5738','Snowman_Hat','Snowman Hat','5','20','10','300','0','0','4','0','1','4294967295','63','2','256','0','0',NULL,'1','616','0','0','0','73',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1; bonus bInt,1; bonus bMdef,3; bonus2 bSubEle,Ele_Water,7; bonus2 bAddMonsterDropItem,530,100; bonus2 bAddMonsterDropItem,12354,300; if(getrefine()>7) { bonus5 bAutoSpellWhenHit,BA_FROSTJOKER,5,20,BF_WEAPON|BF_MAGIC,0; } else { bonus5 bAutoSpellWhenHit,BA_FROSTJOKER,1,20,BF_WEAPON|BF_MAGIC,0; }','',''); REPLACE INTO `item_db` VALUES ('5739','Sagittarius_Crown','Sagittarius Crown','5','20','10','300','0','0','3','0','0','4294967295','63','2','256','0','0',NULL,'1','617','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2;','',''); REPLACE INTO `item_db` VALUES ('5740','Sagittarius_Diadem','Sagittarius Diadem','5','20','10','300','0','0','3','0','0','4294967295','63','2','256','0','0',NULL,'1','618','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2; bonus bMdef,3;','',''); @@ -5838,7 +5838,7 @@ REPLACE INTO `item_db` VALUES ('12398','PCBang_Gift_Box','PCRoom Gift Box','2',' REPLACE INTO `item_db` VALUES ('12399','Castle_Treasure_Box','Castle Treasure Box','2','20','10','1000','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('12400','Water_Of_Blessing_','Water Of Blessing','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('12401','Rune_Kn_Test_Int','Rune Kn Test Int','2','0','0','0','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','sc_start SC_INCINT,300000,40;','',''); -REPLACE INTO `item_db` VALUES ('12402','29Fruit','29Truth','2','0','0','0','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','','',''); +REPLACE INTO `item_db` VALUES ('12402','29Fruit','29Truth','0','0','0','0','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','percentheal 5,5;','',''); REPLACE INTO `item_db` VALUES ('12403','Lucky_Egg_C2','RWC2011 Lucky Scroll','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('12404','Acti_Potion','Activation Potion','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('12405','Underripe_Yggseed','Unripe Seed Of Yggdrasil','2','20','10','50','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','','',''); @@ -7752,7 +7752,7 @@ REPLACE INTO `item_db` VALUES ('16447','Scorpio_Crown_Box','Scorpio Crown Box',' REPLACE INTO `item_db` VALUES ('16448','Scorpio_Diadem_Box','Scorpio Diadem Box','18','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem 5677,1;','',''); REPLACE INTO `item_db` VALUES ('16450','FScorpio_Diadem_Box','Scorpio Diadem Box','18','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem 5677,1;','',''); REPLACE INTO `item_db` VALUES ('16456','My_Scroll1','Bride\'s Ribbon Scroll','2','20','10','0','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','packageitem();','',''); -REPLACE INTO `item_db` VALUES ('16457','Tw_Nov_Scroll','±?????????','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','packageitem();','',''); +REPLACE INTO `item_db` VALUES ('16457','Tw_Nov_Scroll','±???Â?Â?????','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','packageitem();','',''); REPLACE INTO `item_db` VALUES ('16461','Red_Wing_Hat_Box','Red Wing Hat Box','18','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','73',NULL,'0',NULL,'0',NULL,'0','getitem 5690,1;','',''); REPLACE INTO `item_db` VALUES ('16462','FRed_Wing_Hat_Box','Red Wing Hat Box','18','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem 5690,1;','',''); REPLACE INTO `item_db` VALUES ('16466','My_Scroll2','Egg Of Light Scroll','2','20','10','0','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','packageitem();','',''); @@ -8013,7 +8013,7 @@ REPLACE INTO `item_db` VALUES ('18106','P_Bow3','Eden Group Bow3','4','0','0','0 REPLACE INTO `item_db` VALUES ('18107','Malang_Snow_Crab','Malang Snow Crab','4','0','0','0','120','0','0','5','0','657480','63','2','34','1','50',NULL,'0','11','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bLuk,3; bonus bCritAtkRate,50; if(BaseLevel>99) { bonus bLongAtkRate,10; }','',''); REPLACE INTO `item_db` VALUES ('18108','Brindle_Eel','Brindle Eel','4','0','0','0','180','0','0','5','0','526336','63','2','34','1','50',NULL,'0','11','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAgi,3; autobonus \"{ bonus bAspd,2; }\",10,7000,BF_WEAPON,\"{ specialeffect2 EF_HASTEUP; }\"; if(BaseLevel>99) { bonus bLongAtkRate,10; }','',''); REPLACE INTO `item_db` VALUES ('18109','Catapult','Catapult','4','56000','28000','1100','150','0','0','5','2','131072','56','2','34','4','100',NULL,'1','11','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,SC_TRIANGLESHOT,(getrefine()*2); bonus2 bSkillUseSP,SC_TRIANGLESHOT,(getrefine()*2);','',''); -REPLACE INTO `item_db` VALUES ('18110','Big_CrossBow','Big CrossBow','4','56000','28000','900','160','0','0','5','2','2048','56','2','34','4','110',NULL,'1','11','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,RA_ARROWSTORM,(getrefine()*5); bonus2 bSkillUseSP,RA_ARROWSTORM,(getrefine()*5); if(readparam(bAgi)>=120) { bonus bAspd,1; }','',''); +REPLACE INTO `item_db` VALUES ('18110','Big_CrossBow','Big CrossBow','4','56000','28000','900','160','0','0','5','2','2048','56','2','34','4','110',NULL,'1','11','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,RA_ARROWSTORM,(getrefine()*5); bonus2 bSkillUseSP,RA_ARROWSTORM,(getrefine()*-5); if(readparam(bAgi)>=120) { bonus bAspd,1; }','',''); REPLACE INTO `item_db` VALUES ('18111','Creeper_Bow','Creeper Bow','4','56000','28000','1500','150','0','0','5','2','526336','56','2','34','3','120',NULL,'1','11','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,1; bonus3 bAutoSpell,PF_SPIDERWEB,1,200;','',''); REPLACE INTO `item_db` VALUES ('18112','Upg_Bow','Upgrade Bow','4','20','10','600','60','0','0','5','1','526344','63','2','34','3','0',NULL,'1','11','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,(getrefine()*7); bonus bLongAtkRate,(getrefine()*2); if(BaseJob==Job_Hunter) bonus bBaseAtk,20; if(BaseLevel>70) bonus bBaseAtk,(((BaseLevel-70)/10)*10);','',''); REPLACE INTO `item_db` VALUES ('18113','Velum_Arbalest','Vellum Arbalest','4','20','10','1100','50','0','0','5','0','657480','63','2','34','4','95',NULL,'1','11','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bSPVanishRate,10000,4,BF_NORMAL; bonus bAspd,-5;','',''); @@ -8110,7 +8110,7 @@ REPLACE INTO `item_db` VALUES ('18576','YinYang_Earring','Yin Yang Earrings','5' REPLACE INTO `item_db` VALUES ('18577','24_Bolt','Screw Stuck Head','5','20','10','200','0','0','0','0','0','4294967295','63','2','512','0','10',NULL,'0','696','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('18578','Helm_Of_Valor','Helm Of Valor','5','0','0','0','0','0','4','0','0','4294967295','63','2','256','0','0',NULL,'0','258','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('18579','9th_Anni_Hat','kRO 9 Anniversary Hat','5','0','0','90','0','0','0','0','0','4294967295','63','2','256','0','0',NULL,'1','745','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableHelm,0; bonus bMdef,9;','',''); -REPLACE INTO `item_db` VALUES ('18580','Yggdrasil_Crown','Yggdrasil Crown','5','20','10','200','0','0','3','0','1','4294967295','63','1','256','0','0',NULL,'1','746','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,2; bonus bInt,2; bonus bHealPower,1; bonus bHealPower2,1; if(getrefine() >= 6) { bonus bHealPower,1; } if(getrefine() >= 7) { bonus bHealPower,1; }','',''); +REPLACE INTO `item_db` VALUES ('18580','Yggdrasil_Crown','Yggdrasil Crown','5','20','10','200','0','0','3','0','1','4294967295','63','1','256','0','0',NULL,'1','746','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,2; bonus bInt,2; bonus bHealPower,1; bonus bHealPower2,1; if(getrefine() >= 7) { bonus bHealPower,5; } if(getrefine() >= 9) { bonus bHealPower,3; }','',''); REPLACE INTO `item_db` VALUES ('18581','Red_Tiger_Mask','Red Tiger Mask','5','20','10','400','0','0','2','0','0','4294967295','63','2','768','0','50',NULL,'0','747','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,3;','',''); REPLACE INTO `item_db` VALUES ('18582','Blue_Tiger_Mask','Blue Tiger Mask','5','20','10','400','0','0','2','0','0','4294967295','63','2','768','0','50',NULL,'0','748','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,3;','',''); REPLACE INTO `item_db` VALUES ('18583','Navy_Drooping_Kitty','Navy Drooping Kitty','5','250000','125000','500','0','0','3','0','0','2147483646','63','2','256','0','0',NULL,'1','749','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,15;','',''); @@ -8130,12 +8130,12 @@ REPLACE INTO `item_db` VALUES ('18596','Sprout_Hat','Sprout Hat','5','45000','22 REPLACE INTO `item_db` VALUES ('18597','Mercury_Helm','Mercury Riser','5','45000','22500','400','0','0','10','0','1','4294967295','63','2','256','0','70',NULL,'1','759','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspdRate,3; bonus bCritical,3; if(getrefine() >= 7) { bonus bAspdRate,2; bonus bCritical,2; } if(getrefine() >= 9) { bonus bAspdRate,2; bonus bCritical,2; }','',''); REPLACE INTO `item_db` VALUES ('18598','Mini_Tree_J','Holy xmas Tree','5','20','10','50','0','0','0','0','1','4294967295','63','2','256','0','0',NULL,'0','727','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,20;','',''); REPLACE INTO `item_db` VALUES ('18599','Black_Devil_Mask','Black Devil\'s Mask','5','20','10','100','0','0','0','0','0','4294967295','63','2','512','0','0',NULL,'0','760','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAllStats,2;','',''); -REPLACE INTO `item_db` VALUES ('18600','Cat_Ears_Beret','Cat Ear Beret','5','20','10','300','0','0','5','0','1','4294967295','63','2','256','0','0',NULL,'1','761','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate,5; if(getrefine() > 5 && getrefine() <= 12) { bonus2 bAddRace,RC_DemiHuman,(getrefine() - 5); bonus2 AddRaceTolerance,RC_DemiHuman,(getrefine() - 5); } if(getrefine() > 12) { bonus2 bAddRace,RC_DemiHuman,7; bonus2 AddRaceTolerance,RC_DemiHuman,7; }','',''); -REPLACE INTO `item_db` VALUES ('18601','Red_Bread_Hat','Red Pom Band','5','20','10','300','0','0','0','0','1','4294967295','63','2','256','0','0',NULL,'1','762','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,5; bonus bMatkRate,5; if(getrefine()>5) { bonus2 bAddRaceTolerance,RC_DemiHuman,(getrefine()-5); bonus2 bMagicAddRace,RC_DemiHuman,(getrefine()-5); }','',''); +REPLACE INTO `item_db` VALUES ('18600','Cat_Ears_Beret','Cat Ear Beret','5','20','10','300','0','0','5','0','1','4294967295','63','2','256','0','0',NULL,'1','761','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate,5; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-5); bonus2 bAddRaceTolerance,RC_DemiHuman,(getrefine()-5); }','',''); +REPLACE INTO `item_db` VALUES ('18601','Red_Bread_Hat','Red Pom Band','5','20','10','300','0','0','0','0','1','4294967295','63','2','256','0','0',NULL,'1','762','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,5; bonus bMatkRate,5; if(getrefine()>5) { bonus2 bMagicAddRace,RC_DemiHuman,(getrefine()-5); bonus2 bAddRaceTolerance,RC_DemiHuman,(getrefine()-5); }','',''); REPLACE INTO `item_db` VALUES ('18602','Watermelon_Slice','Watermelon Bite','5','20','10','100','0','0','0','0','0','4294967295','63','2','1','0','30',NULL,'0','763','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableHelm,0; bonus bMdef,4; bonus2 bAddEle,Ele_Fire,4;','',''); REPLACE INTO `item_db` VALUES ('18603','Black_Devil_Mask_','Black Devil\'s Mask','5','20','10','100','0','0','0','0','1','4294967295','63','2','512','0','0',NULL,'0','760','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAllStats,1;','',''); REPLACE INTO `item_db` VALUES ('18604','Falcon_Mask','Falcon Mask','5','10','5','30','0','0','0','0','1','4294967295','63','2','513','0','50',NULL,'0','782','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); -REPLACE INTO `item_db` VALUES ('18605','Dark_Age','Dark Age','5','20','10','200','0','0','3','0','1','4294967295','63','2','256','0','10',NULL,'1','766','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','',''); +REPLACE INTO `item_db` VALUES ('18605','Dark_Age','Dark Age','5','20','10','200','0','0','3','0','1','4294967295','63','2','256','0','10',NULL,'1','766','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3; autobonus \"{ bonus bAtkEle,Ele_Dark; }\",30,60000; bonus2 bSubEle,Ele_Holy,-10; bonus2 bSubRace,RC_Angel,-10;','',''); REPLACE INTO `item_db` VALUES ('18606','Tear_Drop','Tear drop','5','20','10','100','0','0','1','0','0','4294967295','63','2','513','0','30',NULL,'0','767','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('18607','Blush_','Blush','5','20','10','100','0','0','0','0','1','4294967295','63','2','512','0','0',NULL,'0','125','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('18608','Pair_Of_Red_Ribbon2','Small Ribbons','5','20','10','100','0','0','2','0','1','4294967295','63','2','512','0','45',NULL,'0','169','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); @@ -8182,14 +8182,14 @@ REPLACE INTO `item_db` VALUES ('18648','Tongue_Charm','Tongue Charm','5','20','1 REPLACE INTO `item_db` VALUES ('18649','Lude_Mask','Lude Mask','5','10','5','100','0','0','1','0','0','4294967295','63','2','513','0','0',NULL,'1','802','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('18650','RWC_Shouting_Mouth','RWC Shouting Mouth','5','20','10','50','0','0','0','0','0','4294967295','63','2','1','0','0',NULL,'0','194','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('18651','Ignis_Cap','Ignis Cap','5','20','10','800','0','0','8','0','1','4294967295','63','2','256','0','40',NULL,'1','803','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); -REPLACE INTO `item_db` VALUES ('18652','Vanargandr_Helm','Vanargand Helm','5','20','10','1500','0','0','10','0','1','4294967295','63','2','256','0','80',NULL,'1','804','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); +REPLACE INTO `item_db` VALUES ('18652','Vanargandr_Helm','Vanargand Helm','5','20','10','1500','0','0','10','0','1','4294967295','63','2','256','0','80',NULL,'1','804','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bHPDrainRate,10*(5+1*(getrefine()>7)+2*(getrefine()>8)+2*(getrefine()>9)),1+2*(getrefine()>5)+2*(getrefine()>7)+3*(getrefine()>9); bonus2 bSPDrainRate,10*(5+1*(getrefine()>8)+2*(getrefine()>9)),1+(getrefine()>7)+2*(getrefine()>9);','',''); REPLACE INTO `item_db` VALUES ('18653','Deviruchi_Headphone','Headphones Debiruchi','5','20','10','200','0','0','8','0','1','4294967295','63','2','256','0','30',NULL,'1','805','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,4; bonus bAgi,2;','',''); REPLACE INTO `item_db` VALUES ('18654','SS_Bandana','SS Bandana','5','1000','500','10','0','0','0','0','1','4294967295','63','2','769','0','0',NULL,'1','806','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('18655','Goedo_Monocle','Dragonfly Monocle','5','20','10','100','0','0','0','0','0','4294967295','63','2','512','0','50',NULL,'0','23','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('18656','Wit_Pumpkin_Hat','Witch\'s Pumpkin Hat','5','20','10','300','0','0','10','0','0','4294967295','63','2','256','0','20',NULL,'1','717','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,10; bonus bStr,2; bonus bInt,2; bonus2 bMagicAddRace,RC_Undead,15; bonus2 bMagicAddRace,RC_Demon,15;','',''); REPLACE INTO `item_db` VALUES ('18657','Pegasus_Wing_Ears','Pegasus Ear Wing','5','20','10','500','0','0','1','0','0','4294967295','63','2','512','0','80',NULL,'0','568','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableHelm,0;','',''); REPLACE INTO `item_db` VALUES ('18658','Holy_Santa_Beard','Santa\'s Beard Holy','5','20','10','100','0','0','0','0','0','4294967295','63','2','1','0','0',NULL,'0','25','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); -REPLACE INTO `item_db` VALUES ('18659','Boitata_Hat','Boitata Hat','5','20','10','0','0','0','5','0','1','4294967295','63','2','768','0','0',NULL,'1','808','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); +REPLACE INTO `item_db` VALUES ('18659','Boitata_Hat','Boitata Hat','5','20','10','0','0','0','5','0','1','4294967295','63','2','768','0','0',NULL,'1','808','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bAutoSpell,\"SA_FLAMELAUNCHER\",5,10; bonus3 bAutoSpell,\"AS_SONICBLOW\",5,10;','',''); REPLACE INTO `item_db` VALUES ('18660','Indi_Feather_Band','Indian Feather Headband','5','20','10','400','0','0','3','0','1','2147483646','63','2','256','0','0',NULL,'1','809','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,2;','',''); REPLACE INTO `item_db` VALUES ('18661','Trident_Helmet','Trident Helmet','5','20','10','400','0','0','3','0','1','2147483646','63','2','256','0','20',NULL,'1','810','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2;','',''); REPLACE INTO `item_db` VALUES ('18662','Antler_Fedora','Antler Fedora','5','20','10','400','0','0','3','0','0','2147483646','63','2','256','0','0',NULL,'1','811','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,3;','',''); @@ -8203,8 +8203,8 @@ REPLACE INTO `item_db` VALUES ('18669','Cowhide_Hat','Cowhide Hat','5','20','10' REPLACE INTO `item_db` VALUES ('18670','Hankie_In_Mouth','Handkerchief In Mouth','5','20','10','100','0','0','1','0','0','4294967295','63','2','1','0','12',NULL,'0','818','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRaceTolerance,RC_DemiHuman,3;','',''); REPLACE INTO `item_db` VALUES ('18671','Rudolf_Hairband','Rudolf Hairband','5','20','10','200','0','0','5','0','0','4294967295','63','2','256','0','30',NULL,'1','836','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bAutoSpell,AL_INCAGI,10,50; bonus2 bAddItemHealRate,Carrot,2000;','',''); REPLACE INTO `item_db` VALUES ('18672','Tare_Pope','Flap Pope','5','20','10','300','0','0','0','0','0','4294967295','63','2','256','0','0',NULL,'0','817','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,1; bonus bUnbreakableHelm,0;','',''); -REPLACE INTO `item_db` VALUES ('18673','Tare_Pope_','Chibi Pope','5','20','10','300','0','0','0','0','1','4294967295','63','2','256','0','0',NULL,'1','817','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,1; bonus bUnbreakableHelm,0;','',''); -REPLACE INTO `item_db` VALUES ('18674','Planewing_Hat','Planewing Hat','5','20','10','200','0','0','3','0','1','2147483646','63','2','256','0','0',NULL,'1','11','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,3;','',''); +REPLACE INTO `item_db` VALUES ('18673','Tare_Pope_','Chibi Pope','5','20','10','300','0','0','0','0','1','4294967295','63','2','256','0','0',NULL,'1','817','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,7; bonus bHealPower,5; if(getrefine()>6) bonus bHealPower,5; if(getrefine()>8) bonus bMatkRate,7; if(getrefine()>11) bonus bMatkRate,5;','',''); +REPLACE INTO `item_db` VALUES ('18674','Planewing_Hat','Planewing Hat','5','20','10','200','0','0','3','0','1','2147483646','63','2','256','0','0',NULL,'1','11','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,3; bonus bAspdRate,1; bonus2 bSPLossRate,5,10000;','',''); REPLACE INTO `item_db` VALUES ('18675','Green_Apple_Hat','Green Apple Hat','5','20','10','200','0','0','3','0','1','2147483646','63','2','256','0','20',NULL,'1','11','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2;','',''); REPLACE INTO `item_db` VALUES ('18676','Hexagon_Spectacles','Hexagon Spectacles','5','20','10','400','0','0','3','0','0','2147483646','63','2','512','0','20',NULL,'0','822','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFlee,2;','',''); REPLACE INTO `item_db` VALUES ('18677','Cherry_Twig_In_Mouth','Cherry Twig In Mouth','5','20','10','200','0','0','0','0','0','2147483646','63','2','1','0','20',NULL,'0','823','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); @@ -8229,7 +8229,7 @@ REPLACE INTO `item_db` VALUES ('18695','Phoenix_Crown','Phoenix Crown','5','20', REPLACE INTO `item_db` VALUES ('18696','Orange_Hat','Orange Hat','5','20','10','200','0','0','3','0','0','2147483646','63','2','256','0','20',NULL,'1','841','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('18697','Syringe_In_Mouth','Syringe In Mouth','5','20','10','200','0','0','0','0','0','2147483646','63','2','1','0','20',NULL,'0','842','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('18698','Cheesy_Snack_In_Mouth','Cheesy Snack In Mouth','5','20','10','200','0','0','0','0','0','2147483646','63','2','1','0','20',NULL,'0','843','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); -REPLACE INTO `item_db` VALUES ('18699','Starving_Fish_Hat','Starving Fish Hat','5','20','10','1200','0','0','3','0','0','4294967295','63','2','256','0','0',NULL,'0','844','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); +REPLACE INTO `item_db` VALUES ('18699','Starving_Fish_Hat','Starving Fish Hat','5','20','10','1200','0','0','3','0','0','4294967295','63','2','256','0','0',NULL,'0','844','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubRace,RC_Fish,15; bonus3 bAddMonsterDropItem,579,RC_Fish,5;','',''); REPLACE INTO `item_db` VALUES ('18700','Rabbit_Ribbon','Rabbit Ribbon Hat','5','20','10','500','0','0','3','0','1','4294967295','63','2','256','0','50',NULL,'1','845','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','',''); REPLACE INTO `item_db` VALUES ('18701','Ancient_Civil_Man','Ancient Civil Man Hat','5','20','10','500','0','0','2','0','0','2147483646','63','2','256','0','70',NULL,'0','846','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,3; bonus bDex,2; bonus bLuk,1;','',''); REPLACE INTO `item_db` VALUES ('18702','Shaving_Cream','Shaving Cream','5','20','10','50','0','0','1','0','0','4294967295','63','2','1','0','10',NULL,'0','847','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); @@ -8238,7 +8238,7 @@ REPLACE INTO `item_db` VALUES ('18704','Drosera_Hairpin','Drosera Hairpin','5',' REPLACE INTO `item_db` VALUES ('18705','Flip_Hat','Flip Hat','5','1000','500','300','0','0','5','0','1','4294967295','63','2','256','0','0',NULL,'1','862','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('18706','Can_Hat','Can Hat','5','20','10','400','0','0','3','0','0','2147483646','63','2','256','0','20',NULL,'1','851','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,3;','',''); REPLACE INTO `item_db` VALUES ('18707','Maneater_Flower_Hat','Maneater Flower Hat','5','20','10','500','0','0','3','0','0','2147483646','63','2','256','0','20',NULL,'1','852','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); -REPLACE INTO `item_db` VALUES ('18708','Candy_Hat','Candy Hat','5','20','10','200','0','0','3','0','0','2147483646','63','2','256','0','20',NULL,'1','853','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); +REPLACE INTO `item_db` VALUES ('18708','Candy_Hat','Candy Hat','5','20','10','200','0','0','3','0','0','2147483646','63','2','256','0','20',NULL,'1','853','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','skill \"AL_HEAL\",3;','',''); REPLACE INTO `item_db` VALUES ('18709','Black_Knitted_Hat','Black Knitted Hat','5','20','10','200','0','0','3','0','1','2147483646','63','2','256','0','0',NULL,'1','854','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('18710','Sugared_Fruit_Stick','Sugared Fruit Stick','5','20','10','200','0','0','0','0','0','2147483646','63','2','1','0','20',NULL,'0','855','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('18711','Electric_Sunglass','Electric Sunglass','5','20','10','400','0','0','3','0','0','2147483646','63','2','512','0','20',NULL,'0','856','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); @@ -8275,7 +8275,7 @@ REPLACE INTO `item_db` VALUES ('18745','Choco_Stick_In_Mouth','Choco Stick In Mo REPLACE INTO `item_db` VALUES ('18746','Chilly_Breath','Chilly Breath','5','20','10','100','0','0','0','0','0','4294967295','63','2','1','0','10',NULL,'0','885','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','',''); REPLACE INTO `item_db` VALUES ('18747','Eyes_Of_Ifrit','Eyes Of Ifrit','5','20','10','100','0','0','1','0','1','4294967295','63','2','512','0','0',NULL,'0','886','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,1;','',''); REPLACE INTO `item_db` VALUES ('18748','Gold_Ingot_Poring_Hat','Gold Ingot Poring Hat','5','20','10','200','0','0','3','0','1','4294967295','63','2','256','0','0',NULL,'1','887','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2; bonus bLuk,2;','',''); -REPLACE INTO `item_db` VALUES ('18749','Majoruros_Horn','Majoruros Horn','5','20','10','500','0','0','8','0','1','4294967295','63','2','256','0','0',NULL,'1','888','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2;','',''); +REPLACE INTO `item_db` VALUES ('18749','Majoruros_Horn','Majoruros Horn','5','20','10','500','0','0','8','0','1','4294967295','63','2','256','0','0',NULL,'1','888','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2; bonus bMaxHP,100;','',''); REPLACE INTO `item_db` VALUES ('18750','Poker_Card_In_Mouth','Poker Card In Mouth','5','20','10','50','0','0','0','0','0','4294967295','63','2','1','0','10',NULL,'0','889','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('18752','Cursed_Book','Cursed Book','5','0','0','0','0','0','0','0','1','4294967295','63','2','256','0','1',NULL,'1','890','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('18753','Tw_Rice_Ball','Rice Dumpling Hat','5','20','10','100','0','0','6','0','0','4294967295','63','2','256','0','0',NULL,'0','892','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableHelm,0; bonus bLuk,1;','',''); diff --git a/src/map/battle.c b/src/map/battle.c index 539d3516e..31b04ad44 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -427,7 +427,7 @@ int64 battle_calc_weapon_damage(struct block_list *src, struct block_list *bl, u else damage = battle->calc_sizefix(sd, damage, EQI_HAND_L, size, flag & 8); - if ( flag & 2 && sd->bonus.arrow_atk ) + if ( flag & 2 && sd->bonus.arrow_atk && skill_id != GN_CARTCANNON ) damage += sd->bonus.arrow_atk; if ( sd->battle_status.equip_atk != 0 ) @@ -886,8 +886,6 @@ int64 battle_calc_elefix(struct block_list *src, struct block_list *target, uint damage = battle->attr_fix(src,target,damage,ELE_NEUTRAL,tstatus->def_ele, tstatus->ele_lv); if( skill_id == NC_ARMSCANNON ) damage = battle->attr_fix(src,target,damage,ELE_NEUTRAL,tstatus->def_ele, tstatus->ele_lv); - if( skill_id == GN_CARTCANNON ) - damage = battle->attr_fix(src,target,damage,ELE_NEUTRAL,tstatus->def_ele, tstatus->ele_lv); if( skill_id == GS_GROUNDDRIFT ) //Additional 50*lv Neutral damage. damage += battle->attr_fix(src,target,50*skill_lv,ELE_NEUTRAL,tstatus->def_ele, tstatus->ele_lv); } @@ -2541,7 +2539,7 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block } break; case GN_CARTCANNON: - skillratio = 50 * (sd ? pc->checkskill(sd, GN_REMODELING_CART) : 5) * (st->int_ / 40) + 60 * skill_lv; + skillratio += -100 + (int)(50.0f * (sd ? pc->checkskill(sd, GN_REMODELING_CART) : 5) * (st->int_ / 40.0f) + 60.0f * skill_lv); break; case GN_SPORE_EXPLOSION: skillratio = 100 * skill_lv + (200 + st->int_) * status->get_lv(src) / 100; @@ -4352,6 +4350,7 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list case PA_SACRIFICE: flag.distinct = 1; break; + case GN_CARTCANNON: case PA_SHIELDCHAIN: case GS_MAGICALBULLET: case NJ_SYURIKEN: @@ -4928,6 +4927,14 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list wd.damage = max(wd.damage, 1); } break; + case GN_CARTCANNON: + GET_NORMAL_ATTACK((sc && sc->data[SC_MAXIMIZEPOWER] ? 1 : 0) | (sc && sc->data[SC_WEAPONPERFECT] ? 8 : 0), skill_id); + ATK_ADD(sd ? sd->bonus.arrow_atk : 0); + wd.damage = battle->calc_masteryfix(src, target, skill_id, skill_lv, wd.damage, wd.div_, 0, flag.weapon); + ATK_RATE(battle->calc_skillratio(BF_WEAPON, src, target, skill_id, skill_lv, skillratio, wflag)); + if ( sd && s_ele != sd->bonus.arrow_ele ) + s_ele = sd->bonus.arrow_ele; + break; case NJ_TATAMIGAESHI: ATK_RATE(200); /* Fall through */ @@ -5208,7 +5215,7 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list //Div fix. damage_div_fix(wd.damage, wd.div_); if ( skill_id > 0 && (skill->get_ele(skill_id, skill_lv) == ELE_NEUTRAL || flag.distinct) ) { // re-evaluate forced neutral skills - wd.damage = battle->attr_fix(src, target, wd.damage, s_ele_, tstatus->def_ele, tstatus->ele_lv); + wd.damage = battle->attr_fix(src, target, wd.damage, s_ele, tstatus->def_ele, tstatus->ele_lv); if ( flag.lh ) wd.damage2 = battle->attr_fix(src, target, wd.damage2, s_ele_, tstatus->def_ele, tstatus->ele_lv); } diff --git a/src/map/skill.c b/src/map/skill.c index 4c8ecb40f..a9737f129 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -7649,6 +7649,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin map->freeblock_unlock(); // Don't consume item requirements return 0; } + clif->skill_nodamage(src, bl, skill_id, skill_lv, 1); } break; diff --git a/src/map/status.c b/src/map/status.c index 91ab19558..0b406850e 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -12052,18 +12052,11 @@ int status_get_sc_type(sc_type type) { return status->sc_conf[type]; } -/*------------------------------------------ -* DB reading. -* job_db1.txt - weight, hp, sp, aspd -* job_db2.txt - job level stat bonuses -* size_fix.txt - size adjustment table for weapons -* refine_db.txt - refining data table -*------------------------------------------*/ -void status_read_job_db(void) { /* [malufett/Hercules] */ - int i = 0; - config_t job_db_conf; - config_setting_t *jdb = NULL; - const char *config_filename = "db/"DBPATH"job_db.conf"; +void status_read_job_db_sub(int idx, const char *name, config_setting_t *jdb) +{ + config_setting_t *temp = NULL; + int i32 = 0; + struct { const char *name; int id; @@ -12097,139 +12090,160 @@ void status_read_job_db(void) { /* [malufett/Hercules] */ #endif }; - if ( libconfig->read_file(&job_db_conf, config_filename) ) { - ShowError("can't read %s\n", config_filename); - return; - } - while ( (jdb = libconfig->setting_get_elem(job_db_conf.root, i++)) ) { - int class_, idx, i32 = 0; - config_setting_t *temp = NULL; - const char *name = config_setting_name(jdb); - - if ( (class_ = pc->check_job_name(name)) == -1 ) { - ShowWarning("pc_read_job_db: '%s' unknown job name!\n", name); - continue; - } - - idx = pc->class2idx(class_); - if ( (temp = libconfig->setting_get_member(jdb, "Inherit")) ) { - int nidx = 0, iidx, w; - const char *iname; - while ( (iname = libconfig->setting_get_string_elem(temp, nidx++)) ) { - int iclass, ave, total = 0; - if ( (iclass = pc->check_job_name(iname)) == -1 ) { - ShowWarning("status_read_job_db: '%s' trying to inherit unknown '%s'!\n", name, iname); - continue; - } - iidx = pc->class2idx(iclass); - status->max_weight_base[idx] = status->max_weight_base[iidx]; - memcpy(&status->aspd_base[idx], &status->aspd_base[iidx], sizeof(status->aspd_base[iidx])); - for ( w = 1; w <= MAX_LEVEL && status->HP_table[iidx][w]; w++ ) { - status->HP_table[idx][w] = status->HP_table[iidx][w]; - total += status->HP_table[idx][w]; - } - ave = total / (w - 1); - for ( ; w <= pc->max_level[idx][0]; w++ ) { - status->HP_table[idx][w] = min(ave * w, battle_config.max_hp); - } - for ( w = 1; w <= MAX_LEVEL && status->SP_table[iidx][w]; w++ ) { - status->SP_table[idx][w] = status->SP_table[iidx][w]; - total += status->SP_table[idx][w]; - } - ave = total / (w - 1); - for ( ; w <= pc->max_level[idx][0]; w++ ) { - status->SP_table[idx][w] = min(ave * w, battle_config.max_sp); - } + if ((temp = libconfig->setting_get_member(jdb, "Inherit"))) { + int nidx = 0, iidx, w; + const char *iname; + while ((iname = libconfig->setting_get_string_elem(temp, nidx++))) { + int iclass, ave, total = 0; + if ((iclass = pc->check_job_name(iname)) == -1) { + ShowWarning("status_read_job_db: '%s' trying to inherit unknown '%s'!\n", name, iname); + continue; + } + iidx = pc->class2idx(iclass); + status->max_weight_base[idx] = status->max_weight_base[iidx]; + memcpy(&status->aspd_base[idx], &status->aspd_base[iidx], sizeof(status->aspd_base[iidx])); + for (w = 1; w <= MAX_LEVEL && status->HP_table[iidx][w]; w++) { + status->HP_table[idx][w] = status->HP_table[iidx][w]; + total += status->HP_table[idx][w] - status->HP_table[idx][w - 1]; + } + ave = total / (w - 1); + for ( ; w <= pc->max_level[idx][0]; w++) { + status->HP_table[idx][w] = min(ave * w, battle_config.max_hp); + } + for (w = 1; w <= MAX_LEVEL && status->SP_table[iidx][w]; w++) { + status->SP_table[idx][w] = status->SP_table[iidx][w]; + total += status->SP_table[idx][w] - status->SP_table[idx][w - 1]; + } + ave = total / (w - 1); + for ( ; w <= pc->max_level[idx][0]; w++) { + status->SP_table[idx][w] = min(ave * w, battle_config.max_sp); } } - if ( (temp = libconfig->setting_get_member(jdb, "InheritHP")) ) { - int nidx = 0, iidx; - const char *iname; - while ( (iname = libconfig->setting_get_string_elem(temp, nidx++)) ) { - int iclass, w, ave, total = 0; - if ( (iclass = pc->check_job_name(iname)) == -1 ) { - ShowWarning("status_read_job_db: '%s' trying to inherit unknown '%s' HP!\n", name, iname); - continue; - } - iidx = pc->class2idx(iclass); - for ( w = 1; w <= MAX_LEVEL && status->HP_table[iidx][w]; w++ ) { - status->HP_table[idx][w] = status->HP_table[iidx][w]; - total += status->HP_table[idx][w]; - } - ave = total / (w - 1); - for ( ; w <= pc->max_level[idx][0]; w++ ) { - status->HP_table[idx][w] = min(ave * w, battle_config.max_hp); - } + } + if ((temp = libconfig->setting_get_member(jdb, "InheritHP"))) { + int nidx = 0, iidx; + const char *iname; + while ((iname = libconfig->setting_get_string_elem(temp, nidx++))) { + int iclass, w, ave, total = 0; + if ((iclass = pc->check_job_name(iname)) == -1) { + ShowWarning("status_read_job_db: '%s' trying to inherit unknown '%s' HP!\n", name, iname); + continue; + } + iidx = pc->class2idx(iclass); + for (w = 1; w <= MAX_LEVEL && status->HP_table[iidx][w]; w++) { + status->HP_table[idx][w] = status->HP_table[iidx][w]; + total += status->HP_table[idx][w] - status->HP_table[idx][w - 1]; + } + ave = total / (w - 1); + for ( ; w <= pc->max_level[idx][0]; w++ ) { + status->HP_table[idx][w] = min(ave * w, battle_config.max_hp); } } - if ( (temp = libconfig->setting_get_member(jdb, "InheritSP")) ) { - int nidx = 0, iidx, ave, total = 0; - const char *iname; - while ( (iname = libconfig->setting_get_string_elem(temp, nidx++)) ) { - int iclass, w; - if ( (iclass = pc->check_job_name(iname)) == -1 ) { - ShowWarning("status_read_job_db: '%s' trying to inherit unknown '%s' SP!\n", name, iname); - continue; - } - iidx = pc->class2idx(iclass); - for ( w = 1; w <= MAX_LEVEL && status->SP_table[iidx][w]; w++ ) { - status->SP_table[idx][w] = status->SP_table[iidx][w]; - total += status->SP_table[idx][w]; - } - ave = total / (w - 1); - for ( ; w <= pc->max_level[idx][0]; w++ ) { - status->SP_table[idx][w] = min(ave * w, battle_config.max_sp); - } + } + if ((temp = libconfig->setting_get_member(jdb, "InheritSP"))) { + int nidx = 0, iidx, ave, total = 0; + const char *iname; + while ((iname = libconfig->setting_get_string_elem(temp, nidx++))) { + int iclass, w; + if ((iclass = pc->check_job_name(iname)) == -1) { + ShowWarning("status_read_job_db: '%s' trying to inherit unknown '%s' SP!\n", name, iname); + continue; + } + iidx = pc->class2idx(iclass); + for (w = 1; w <= MAX_LEVEL && status->SP_table[iidx][w]; w++) { + status->SP_table[idx][w] = status->SP_table[iidx][w]; + total += status->SP_table[idx][w] - status->SP_table[idx][w-1]; + } + ave = total / (w - 1); + for ( ; w <= pc->max_level[idx][0]; w++) { + status->SP_table[idx][w] = min(ave * w, battle_config.max_sp); } } + } - if ( libconfig->setting_lookup_int(jdb, "Weight", &i32) ) - status->max_weight_base[idx] = i32; - else if ( !status->max_weight_base[idx] ) - status->max_weight_base[idx] = 20000; + if (libconfig->setting_lookup_int(jdb, "Weight", &i32)) + status->max_weight_base[idx] = i32; + else if (!status->max_weight_base[idx]) + status->max_weight_base[idx] = 20000; - if ( (temp = libconfig->setting_get_member(jdb, "BaseASPD")) ) { - int widx = 0; - config_setting_t *wpn = NULL; - while ( (wpn = libconfig->setting_get_elem(temp, widx++)) ) { - int w, wlen = ARRAYLENGTH(wnames); - const char *wname = config_setting_name(wpn); + if ((temp = libconfig->setting_get_member(jdb, "BaseASPD"))) { + int widx = 0; + config_setting_t *wpn = NULL; + while ((wpn = libconfig->setting_get_elem(temp, widx++))) { + int w, wlen = ARRAYLENGTH(wnames); + const char *wname = config_setting_name(wpn); - ARR_FIND(0, wlen, w, strcmp(wnames[w].name, wname) == 0); - if ( w != wlen ) { - status->aspd_base[idx][wnames[w].id] = libconfig->setting_get_int(wpn); - } else { - ShowWarning("status_read_job_db: unknown weapon type '%s'!\n", wname); - } + ARR_FIND(0, wlen, w, strcmp(wnames[w].name, wname) == 0); + if (w != wlen) { + status->aspd_base[idx][wnames[w].id] = libconfig->setting_get_int(wpn); + } else { + ShowWarning("status_read_job_db: unknown weapon type '%s'!\n", wname); } } + } - if ( (temp = libconfig->setting_get_member(jdb, "HPTable")) ) { - int level = 0, ave, total = 0; - config_setting_t *hp = NULL; - while ( (hp = libconfig->setting_get_elem(temp, level++)) ) { - status->HP_table[idx][level] = i32 = min(libconfig->setting_get_int(hp), battle_config.max_hp); - total += i32 - status->HP_table[idx][level - 1]; - } - ave = total / (level - 1); - for ( ; level <= pc->max_level[idx][0]; level++ ) { /* limit only to possible maximum level of the given class */ - status->HP_table[idx][level] = min(ave * level, battle_config.max_hp); /* some are still empty? then let's use the average increase */ - } + if ((temp = libconfig->setting_get_member(jdb, "HPTable"))) { + int level = 0, ave, total = 0; + config_setting_t *hp = NULL; + while ((hp = libconfig->setting_get_elem(temp, level++))) { + status->HP_table[idx][level] = i32 = min(libconfig->setting_get_int(hp), battle_config.max_hp); + total += i32 - status->HP_table[idx][level - 1]; } + ave = total / (level - 1); + for ( ; level <= pc->max_level[idx][0]; level++ ) { /* limit only to possible maximum level of the given class */ + status->HP_table[idx][level] = min(ave * level, battle_config.max_hp); /* some are still empty? then let's use the average increase */ + } + } - if ( (temp = libconfig->setting_get_member(jdb, "SPTable")) ) { - int level = 0, ave, total = 0; - config_setting_t *sp = NULL; - while ( (sp = libconfig->setting_get_elem(temp, level++)) ) { - status->SP_table[idx][level] = i32 = min(libconfig->setting_get_int(sp), battle_config.max_sp); - total += i32 - status->SP_table[idx][level - 1]; - } - ave = total / (level - 1); - for ( ; level <= pc->max_level[idx][0]; level++ ) { - status->SP_table[idx][level] = min(ave * level, battle_config.max_sp); - } + if ((temp = libconfig->setting_get_member(jdb, "SPTable"))) { + int level = 0, ave, total = 0; + config_setting_t *sp = NULL; + while ((sp = libconfig->setting_get_elem(temp, level++))) { + status->SP_table[idx][level] = i32 = min(libconfig->setting_get_int(sp), battle_config.max_sp); + total += i32 - status->SP_table[idx][level - 1]; + } + ave = total / (level - 1); + for ( ; level <= pc->max_level[idx][0]; level++ ) { + status->SP_table[idx][level] = min(ave * level, battle_config.max_sp); } } +} + +/*------------------------------------------ +* DB reading. +* job_db.conf - weight, hp, sp, aspd +* job_db2.txt - job level stat bonuses +* size_fix.txt - size adjustment table for weapons +* refine_db.txt - refining data table +*------------------------------------------*/ +void status_read_job_db(void) { /* [malufett/Hercules] */ + int i = 0; + config_t job_db_conf; + config_setting_t *jdb = NULL; + const char *config_filename = +#ifdef RENEWAL_ASPD + "db/re/job_db.conf"; +#else + "db/pre-re/job_db.conf"; +#endif + + if ( libconfig->read_file(&job_db_conf, config_filename) ) { + ShowError("can't read %s\n", config_filename); + return; + } + while ( (jdb = libconfig->setting_get_elem(job_db_conf.root, i++)) ) { + int class_, idx; + const char *name = config_setting_name(jdb); + + if ( (class_ = pc->check_job_name(name)) == -1 ) { + ShowWarning("pc_read_job_db: '%s' unknown job name!\n", name); + continue; + } + + idx = pc->class2idx(class_); + status->read_job_db_sub(idx, name, jdb); + } + ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", i, config_filename); libconfig->destroy(&job_db_conf); } @@ -12547,4 +12561,5 @@ void status_defaults(void) { status->readdb_refine = status_readdb_refine; status->readdb_scconfig = status_readdb_scconfig; status->read_job_db = status_read_job_db; + status->read_job_db_sub = status_read_job_db_sub; } diff --git a/src/map/status.h b/src/map/status.h index 98d5d415c..c8a7a08f7 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -6,7 +6,7 @@ #define MAP_STATUS_H #include "../config/core.h" // defType, RENEWAL, RENEWAL_ASPD - +#include "../common/conf.h" #include "../common/cbasetypes.h" #include "../common/mmo.h" // NEW_CARTS @@ -2116,6 +2116,7 @@ struct status_interface { bool (*readdb_refine) (char *fields[], int columns, int current); bool (*readdb_scconfig) (char *fields[], int columns, int current); void (*read_job_db) (void); + void (*read_job_db_sub) (int idx, const char *name, config_setting_t *jdb); }; struct status_interface *status; diff --git a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc index d7a6cf672..7ae80e07c 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc @@ -5053,6 +5053,8 @@ struct { struct HPMHookPoint *HP_status_readdb_scconfig_post; struct HPMHookPoint *HP_status_read_job_db_pre; struct HPMHookPoint *HP_status_read_job_db_post; + struct HPMHookPoint *HP_status_read_job_db_sub_pre; + struct HPMHookPoint *HP_status_read_job_db_sub_post; struct HPMHookPoint *HP_storage_reconnect_pre; struct HPMHookPoint *HP_storage_reconnect_post; struct HPMHookPoint *HP_storage_delitem_pre; @@ -10260,6 +10262,8 @@ struct { int HP_status_readdb_scconfig_post; int HP_status_read_job_db_pre; int HP_status_read_job_db_post; + int HP_status_read_job_db_sub_pre; + int HP_status_read_job_db_sub_post; int HP_storage_reconnect_pre; int HP_storage_reconnect_post; int HP_storage_delitem_pre; diff --git a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc index 05ceb4ab1..ac34c8d07 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc @@ -2564,6 +2564,7 @@ struct HookingPointData HookingPoints[] = { { HP_POP(status->readdb_refine, HP_status_readdb_refine) }, { HP_POP(status->readdb_scconfig, HP_status_readdb_scconfig) }, { HP_POP(status->read_job_db, HP_status_read_job_db) }, + { HP_POP(status->read_job_db_sub, HP_status_read_job_db_sub) }, /* storage */ { HP_POP(storage->reconnect, HP_storage_reconnect) }, { HP_POP(storage->delitem, HP_storage_delitem) }, diff --git a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc index 8f7c4f0b4..42e6a574d 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc @@ -67963,6 +67963,32 @@ void HP_status_read_job_db(void) { } return; } +void HP_status_read_job_db_sub(int idx, const char *name, config_setting_t *jdb) { + int hIndex = 0; + if( HPMHooks.count.HP_status_read_job_db_sub_pre ) { + void (*preHookFunc) (int *idx, const char *name, config_setting_t *jdb); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_status_read_job_db_sub_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_status_read_job_db_sub_pre[hIndex].func; + preHookFunc(&idx, name, jdb); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.status.read_job_db_sub(idx, name, jdb); + } + if( HPMHooks.count.HP_status_read_job_db_sub_post ) { + void (*postHookFunc) (int *idx, const char *name, config_setting_t *jdb); + for(hIndex = 0; hIndex < HPMHooks.count.HP_status_read_job_db_sub_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_status_read_job_db_sub_post[hIndex].func; + postHookFunc(&idx, name, jdb); + } + } + return; +} /* storage */ void HP_storage_reconnect(void) { int hIndex = 0; |