From 1fe2e1773b9a7218fe5e39c4d2116194216b6986 Mon Sep 17 00:00:00 2001 From: L0ne_W0lf Date: Sat, 27 Aug 2011 03:25:00 +0000 Subject: - Implemented first version of Archbishop skills. Preliminary version, see doc/3rd_job_notes.txt for details/bugs/issues with skills. - Implemented fixed cast time, old cast time mechanics no longer available. Added bFixedCastRate used for reducing fixed cast time mechanic. Cast time calculations probably still needs work, as the cast rate reductions are probably additive and multiplicative as they used to be. - As a result, skill_delayfix_sc() has been removed, status effects that modify cast time are now calculated DURING cast time, not after. - Implemented skill cooldown in skill_cast_db.txt. Known issue is that the cooldowns should save on logout/server shutdown/etc. - Implemented new heal calculation and started work on MATK. Added bWeaponMatk, and bEquipmentMatk for use with new MATK mechanic. - Removed custom features and their config settings: delay_dependon_dex, delay_dependon_agi, castrate_dex_scale. - Increased max_def to 9999 for now, as that is by default the largest defense increase found in the Renewal database (Ahura_mazdah, GM item) - Added shield aspd reduction from job_db1.txt-- Not 100% sure on this one yet. Should be considered a WIP. - Modified updatestatus(), to display information more in line with the client's status window. - Updated some calculations in status_calc_misc to match renewal, needs a lot of work still. - ST_CHASEWALK and HP_BASILICA no longer have 0 cast time while being canceled. * Implemented 'Boss' Decrease AGI, like 'Boss' Heal - editable in skill.conf * clif_skill_fail() now accepts a new parameter, to be used in later messages. * status_change_start() now stores tick as duration upon being called, which fixes timers calling the function from showing negative durations. * Implemented skill ALL_PARTYFLEE. 1 level, increases party member flee by 10. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/renewal@14941 54d463be-8e91-2dee-dedb-b68131a5f0ec --- npc/jobs/3-1/archbishop.txt | 2273 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2273 insertions(+) create mode 100644 npc/jobs/3-1/archbishop.txt (limited to 'npc/jobs/3-1/archbishop.txt') diff --git a/npc/jobs/3-1/archbishop.txt b/npc/jobs/3-1/archbishop.txt new file mode 100644 index 000000000..a01e06b69 --- /dev/null +++ b/npc/jobs/3-1/archbishop.txt @@ -0,0 +1,2273 @@ +prt_church,103,88,3 script Praying Minister#arch 60,{ + if (BaseJob != Job_Priest) { + if (BaseJob == job_Archbishop) { + mes "[Praying Minister]"; + mes "Ah! An Archbishop."; + mes "You have reached the state of light."; + mes "I hope you give happiness and honor to people during your adventures."; + close; + } + else { + mes "[Praying Minister]"; + mes "In front of the Almighty God Odin, there shall be no person smarter than him, and there will be no person more merciful than him."; + next; + mes "[Praying Minister]"; + mes "All ministers of Odin should be diligent. They should never be too lazy to serve Odin."; + next; + mes "[Praying Minister]"; + mes "Thesedays, I've heard that ministers are becoming lax in their duty to Odin and adorn themselves with the splendors of the world."; + next; + mes "[Praying Minister]"; + mes "If you see any of these ministers, can you ask to them to go to the church in prontera?"; + next; + mes "[Praying Minister]"; + mes "They give out a special aura so you can easily recognize them."; + mes "I'm going to make them ministers worthy of serving Odin."; + close; + } + } + else { + if (Upper == 4) { + mes "[Praying Minister]"; + mes "In front of the Almighty God Odin, there shall be no person smarter than him, and there will be no person more merciful than him."; + next; + mes "[Praying Minister]"; + mes "All ministers of Odin should be diligent. They should never be too lazy to serve Odin."; + next; + mes "[Praying Minister]"; + mes "Thesedays, I've heard that ministers are becoming lax in their duty to Odin and adorn themselves with the splendors of the world."; + next; + mes "[Praying Minister]"; + mes "If you see any of these ministers, can you ask to them to go to the church in prontera?"; + next; + mes "[Praying Minister]"; + mes "They give out a special aura so you can easily recognize them."; + mes "I'm going to make them ministers worthy of serving Odin."; + close; + } + if ((BaseLevel == 99) && (JobLevel > 49)) { + if (job_arch == 0) { + if (SkillPoint) { + mes "You can't change jobs without using all your skill points. Please use all of your skill points before applying to change jobs~"; + close; + } + mes "[Praying Minister]"; + mes "In front of the Almighty God Odin, there shall be no person smarter than him, and there will be no person more merciful than him."; + next; + mes "[Praying Minister]"; + mes "All ministers of Odin should be diligent. They should never be too lazy to serve Odin."; + next; + mes "[Praying Minister]"; + if (Sex == 1) + mes "Brother, how has your life been?"; + else + mes "Sister, how has your life been?"; + mes "Have you lived it to it's fullest?"; + mes "Have you served your life in the light of Odin?"; + next; + mes "[Praying Minister]"; + mes "We are ministers and our behavior is seen as acts of the Gods."; + mes "We should always be mindful of this."; + next; + mes "[Praying Minister]"; + mes "We should always tell the truth."; + mes "We should not fall prey to lies and deceit."; + next; + mes "[Praying Minister]"; + if (Sex == 1) + mes "Brother..."; + else + mes "Sister..."; + mes "Even though we serve Odin, we are normal people."; + mes "We can be degraded in spite of ourselves and we must realize that."; + next; + mes "[Praying Minister]"; + mes "We always try to keep our original intention in mind and spread Odin's rule."; + next; + select("How do I become like that?"); + mes "[Praying Minister]"; + mes "That's a good question."; + mes "We have lots of methods."; + mes "But, I recommend this."; + next; + mes "[Praying Minister]"; + mes "Have you ever heard of a"; + mes "^3131FFHoly Pilgrimage^000000?"; + mes "A Holy Pilgrimage means going to a holy place to pray to the God Odin for protection and grace."; + next; + mes "[Praying Minister]"; + mes "When you pray to Odin in the holy place, you will feel that you are born again."; + next; + mes "[Praying Minister]"; + mes "What do you think?"; + mes "Would you like to do a Holy Pilgrimage?"; + next; + switch(select("Yes I want to.:I'll think about it.")) { + case 1: + mes "[Praying Minister]"; + mes "That's the correct attitude."; + mes "A person who lives in one's mundane life would better have a new mind and body and evolve to the way of a true minister of Odin."; + next; + mes "[Praying Minister]"; + mes "There is a small village named Umbala far from here."; + mes "That village is a where a tribe lives in harmony with nature."; + next; + mes "[Praying Minister]"; + mes "Go there and find Priest Dayan."; + mes "Tell him exactly, ''^3131FFI'm here for the Holy Pilgrimage^000000.''"; + next; + mes "[Praying Minister]"; + mes "He's very old so he is hard of hearing."; + mes "You have to speak loud and clearly. You got it?"; + mes "I hope that this paves the way for you to live in the light of Odin......"; + set job_arch,1; + setquest 2187; + close; + case 2: + mes "[Praying Minister]"; + mes "A Holy Pilgrimage isn't that difficult."; + mes "Just be mindful that once you start the path you will be on your way to the way of a true minister of Odin."; + next; + mes "[Praying Minister]"; + mes "Feel free to visit me if you change your mind."; + mes "I'll always be here for you."; + close; + } + } + else { + mes "[Praying Minister]"; + mes "How's it going?"; + mes "Did you meet Priest Dayan in Umbala?"; + close; + } + } + else { + mes "[Praying Minister]"; + mes "In front of the Almighty God Odin, there shall be no person smarter than him, and there will be no person more merciful than him."; + next; + mes "[Praying Minister]"; + mes "All ministers of Odin should be diligent. They should never be too lazy to serve Odin."; + next; + mes "[Praying Minister]"; + mes "Thesedays, I've heard that ministers are becoming lax in their duty to Odin and adorn themselves with the splendors of the world."; + next; + mes "[Praying Minister]"; + mes "If you see any of these ministers, can you ask to them to go to the church in prontera?"; + next; + mes "[Praying Minister]"; + mes "They give out a special aura so you can easily recognize them."; + mes "I'm going to make them ministers worthy of serving Odin."; + close; + } + } +} + +umbala,137,227,5 script Utan Boy#arch 787,{ + mes "[Utan Boy]"; + mes "........"; + close; +} + +umbala,139,227,3 script Priest#arch 60,{ + if (job_arch < 1) { + mes "[Priest]"; + mes "Un...ba... Unba?"; + close; + } + else if (job_arch == 1) { + mes "[Priest]"; + mes "Un...ba... Umba?"; + next; + mes "[Utan Boy]"; + mes "..............."; + next; + mes "[Priest]"; + mes "Is that... right?"; + mes "Hmm... so..."; + mes "Um...ma? Umau...ma?"; + emotion e_swt,"Priest#arch"; + next; + mes "[Utan Boy]"; + mes "..............."; + next; + mes "[Priest]"; + mes "Huuuuuu......"; + mes "Oh, dear . I feel heavy."; + mes "hohohoho."; + next; + mes "- mumbling~ -"; + next; + mes "[Priest]"; + mes "hahahahaha."; + mes "huhuhuhu. humhum."; + next; + mes "["+strcharinfo(0)+"]"; + mes "Hello. are you... Priest Dayan?"; + next; + mes "[Priest]"; + mes "Huh?"; + next; + mes "He turns his head towards you."; + next; + mes "["+strcharinfo(0)+"]"; + mes "Aren't you Priest Dayan?"; + next; + mes "[Priest]"; + mes "muttering..."; + next; + mes "["+strcharinfo(0)+"]"; + mes "Priest! Da~yan! Right!?"; + next; + mes "[Priest Dayan]"; + mes "Ah~, yes."; + mes "Yes, I am."; + if (Sex == 1) + mes "I'm Dayan. Nice to meet you Brother."; + else + mes "I'm Dayan. Nice to meet you Sister."; + next; + mes "The old priest gives you an ear to ear grin. "; + next; + mes "[Priest Dayan]"; + mes "I forgot to wear my hearing aid. hehe."; + mes "Anyway, why have you come here?"; + next; + mes "["+strcharinfo(0)+"]"; + mes "Hmm, I wanted to tell you..."; + next; + input .@input$; + mes "["+strcharinfo(0)+"]"; + mes ""+.@input$+""; + next; + set .@urans$,.@input$; + set .@myans$,"I'm here for the Holy Pilgrimage"; + set .@sungzi,compare(.@urans$,.@myans$); + if (.@sungzi == 0) { + mes "Priest Dayan doesn't seem to understand you. He just stares at you and smiles."; + next; + mes "[Priest]"; + mes "Eh? Say what?"; + close; + } + mes "[Priest Dayan]"; + mes "..............?"; + next; + mes "He cups his ears towards you."; + next; + mes "["+strcharinfo(0)+"]"; + mes "^FF0000I'm here for the Holy Pilgrimage!^000000"; + mes "^FF0000I'm here for the Holy Pilgrimage!^000000"; + mes "^FF0000I'm here for the Holy Pilgrimage!^000000"; + mes "^FF0000I'm here for the Holy Pilgrimage!^000000"; + next; + mes "[Priest Dayan]"; + mes "Eh... are you?"; + mes "A pilgrimage to the Holy Land..."; + mes "It has been a long time since I've seen such a devout minister."; + if (Sex == 1) + mes "Welcome. Brother."; + else + mes "Welcome. Sister."; + next; + mes "The old priest gives you a gracious smile."; + next; + mes "[Priest Dayan]"; + mes "See this village with the huge forest surrounding it."; + mes "Can you see a giant tree?"; + next; + mes "[Priest Dayan]"; + mes "That big tree is called The ^3131FFYggdrasil^000000."; + mes "That tree was created from Ymir's body after Odin created the world as you know it, Rune Midgard."; + next; + mes "[Priest Dayan]"; + mes "A fountain pours out from the end of Yggdrasil's roots that spread to every world."; + next; + mes "[Priest Dayan]"; + mes "The roots head to Nifflheim where you can find Hvergelmir spring."; + mes "In Rune Midgard there is Mimir's spring. And in Asgard, the world of the Gods, there is the Word spring."; + next; + mes "[Priest Dayan]"; + mes "Mimir spring wells with intelligence, myth says that if Odin lets you have his eye that you will gain all of the knowledge within that spring."; + next; + mes "[Priest Dayan]"; + if (Sex == 1) + mes "Brother."; + else + mes "Sister."; + mes "Through the Holy Pilgrimage, we can make ourselves pious by cleansing our bodies and souls."; + next; + mes "[Priest Dayan]"; + mes "Enter the Yggdrasil."; + mes "You may be assaulted by creatures in there but be mindful that their intentions are only to protect the Yggdrasil."; + next; + mes "[Priest Dayan]"; + mes "Follow your steps with purpose."; + mes "If Odin doesn't abandon you, you can reach the beginning of the world at the stem of the Yggdrasil."; + mes "When you arrive there, find a quiet place."; + next; + mes "[Priest Dayan]"; + mes "Pray for a life of faith and expiate your sins with a pious mind."; + next; + mes "[Priest Dayan]"; + mes "Admire Odin's omniscience and omnipotence and pray for a wisdom to choose the right path."; + mes "^3131FFFeel free to ask me about how to pray^000000."; + next; + mes "[Priest Dayan]"; + mes "Lets see, go to the place of the most famous creature from Odin."; + next; + mes "[Priest Dayan]"; + mes "After making your pilgrimage, let's have a drink together and talk about your experience."; + next; + mes "- Priest Dayan smiles again. -"; + set job_arch,2; + changequest 2187,2188; + close; + } + else if (job_arch == 2) { + mes "[Priest Dayan]"; + mes "This place is the holiest place in the world, Yggdrasil."; + mes "This holy ceremony will brighten your soul."; + next; + switch(select("How should I pray?:Cancel.")) { + case 1: + mes "[Priest Dayan]"; + mes "Through prayer, we can follow four paths."; + mes "Remember what I say to you now."; + next; + mes "[Priest Dayan]"; + mes "The 1st way is the ^3131FFway of meditation^000000."; + mes "In the way of meditation, we have to be ready to greet Odin with a clear conscience."; + next; + mes "[Priest Dayan]"; + mes "Meditation starts with a ^3131FFBlessing^000000 which calms your mind down."; + next; + mes "[Priest Dayan]"; + mes "The 2nd is the ^3131FFway of agony^000000."; + mes "Through the way of agony, we reflect on ourselves with confession about our retribution for the deeds of a former life."; + next; + mes "[Priest Dayan]"; + mes "Don't be afraid of pain. That is a necessity and will be a first step to enter a way to liquidate past wounds."; + next; + mes "[Priest Dayan]"; + mes "The 3rd way is the ^3131FFway of joy^000000."; + mes "As you rid yourself of pain, your mind will suffer less and you will experience the joy of life as you help and console others."; + next; + mes "[Priest Dayan]"; + mes "They will bless you because you are an existence of joy overcoming an affliction. We call that ^3131FFAspersio^000000."; + mes "You must drink a ^3131FFHoly Water^000000 with appreciation of Aspersio."; + next; + mes "[Priest Dayan]"; + mes "The last way is the ^3131FFway of light^000000."; + mes "You are free from all sin because you were blessed from all creation."; + next; + mes "[Priest Dayan]"; + mes "You were reborn as light, sing a ^3131FFGloria^000000 of joy and soul that loves you."; + next; + mes "[Priest Dayan]"; + mes "After finishing all of these prayers, just stand up with a pious mind."; + mes "If your prayer is truthful, Odin will lend you his wisdom."; + next; + mes "[Priest Dayan]"; + mes "Are you ready?"; + mes "Okay, it's time to leave and exculpate yourself."; + mes "If your prayer is finished, let's talk."; + close; + case 2: + mes "[Priest Dayan]"; + mes "I hope that my prayer can weaken your agony..."; + close; + } + close; + } + else if (job_arch == 3) { + mes "[Priest Dayan]"; + mes "Oh, you've come back."; + mes "I can feel that you have a fresh energy. Maybe you did pray truthfully."; + next; + mes "["+strcharinfo(0)+"]"; + mes "I feel light-hearted. Like I was just reborn..."; + next; + mes "[Priest Dayan]"; + mes "Your faith gives you confidence and courage."; + mes "A smile from a peaceful mind will easily rid people of their wariness."; + mes "Please, inspire people with love and energy."; + next; + mes "["+strcharinfo(0)+"]"; + mes "Thanks for your kind words."; + next; + mes "[Priest Dayan]"; + if (Sex == 1) + mes "Brother."; + else + mes "Sister."; + mes "Now, there is a place you should go to."; + next; + mes "[Priest Dayan]"; + mes "That place is Hugel in Schwaltzvalt."; + mes "There is a Nun praying there named Vinue, she is a true minister who prays for the suffering people in the world."; + mes "But the last time I saw her she seemed sad."; + next; + mes "[Priest Dayan]"; + mes "Can you convince her to make a pilgrimage to Yggdrasil?"; + mes "I think she is exhausted due to praying too much. I hope the air of Yggdrasil will be helpful to her."; + next; + mes "["+strcharinfo(0)+"]"; + mes "Don't worry."; + mes "I'll go and meet her."; + next; + mes "[Priest Dayan]"; + if (Sex == 1) + mes "Feel free to visit here when you want to pray, brother."; + else + mes "Feel free to visit here when you want to pray, sister."; + mes "A visit from a friend always makes me happy."; + set job_arch,4; + changequest 2188,2189; + close; + } + else { + mes "[Dayan]"; + mes "Did you find Vinue in Hugel?"; + close; + } +} + +yggdrasil01,220,47,0 script #A pilgrimage to the Ho 139,5,5,{ +OnTouch: + if (job_arch == 2) { + mes "["+strcharinfo(0)+"]"; + mes "Is it the spring of Hvergelmir."; + mes "This place is a very vivid and peaceful place."; + mes "It's proper to pray."; + next; + mes "["+strcharinfo(0)+"]"; + mes "Time to genuflect..."; + mes "Hmm, what did that priest say to me?"; + next; + mes "["+strcharinfo(0)+"]"; + mes "Hmm... What is the first way?"; + next; + switch(select("The way of silence.:The way of confession.:The way of meditation.")) { + case 1: + mes "["+strcharinfo(0)+"]"; + mes ""; + mes "I don't think so."; + close; + case 2: + mes "["+strcharinfo(0)+"]"; + mes "The way of confession...?"; + mes "I don't think so."; + close; + case 3: + mes "["+strcharinfo(0)+"]"; + mes "The way of meditation...?"; + mes "Yes, it's the way of meditation."; + next; + break; + } + mes "^3131FF[Priest Dayan]^000000"; + mes "^3131FFThe 1st way is the way of meditation.^000000"; + mes "^3131FFIn the way of meditation, we have to be ready to greet Odin with a clear conscience.^000000"; + next; + mes "^3131FF[Priest Dayan]^000000"; + mes "^3131FFMeditation starts with a Blessing which calms your mind down.^000000"; + next; + mes "- You close your eyes slowly and take a deep breath. -"; + next; + mes "- * BLESSING! * -"; + specialeffect2 EF_BLESSING; + next; + mes "Your mind is refreshed with the blessing effect."; + mes "You continue to meditate trying to rid your mind of any ill feelings."; + next; + mes "^3131FF[Priest Dayan]^000000"; + mes "^3131FFThe 2nd is the way of agony^000000."; + mes "^3131FFThrough the way of agony, we reflect on ourselves with confession about our retribution for the deeds of a former life.^000000"; + next; + mes "^3131FF[Priest Dayan]^000000"; + mes "^3131FFDon't be afraid of pain. That is a necessity and will be a first step to enter a way to liquidate past wounds.^000000"; + next; + mes "["+strcharinfo(0)+"]"; + mes "Pain... What kind of faults have I had?"; + input .@input$; + next; + mes "["+strcharinfo(0)+"]"; + mes "I confess my guilt to the Almighty God Odin."; + next; + mes "["+strcharinfo(0)+"]"; + mes "^3131FF"+.@input$+".^000000"; + next; + mes "["+strcharinfo(0)+"]"; + mes "Oh benevolent Odin, Take mercy on me and pity me because I'm remiss in the discharge of my duties as a minister."; + mes "Please, lead the way and save a foolish minister with your wisdom."; + next; + mes "You ruminate about your confession and are lost in thought again."; + next; + mes "............................."; + next; + mes "............................."; + mes "........................."; + next; + mes "............................."; + mes "........................."; + mes "....................."; + next; + mes "^3131FF[Priest Dayan]^000000"; + mes "^3131FFThe 3rd way is the way of joy.^000000"; + mes "^3131FFAs you rid yourself of pain, your mind will suffer less and you will experience the joy of life as you help and console others.^000000"; + next; + mes "^3131FF[Priest Dayan]^000000"; + mes "^3131FFAnd also they will bless you because you are an existence of joy overcoming an affliction. We call that Aspersio^000000."; + mes "^3131FFYou must drink a Holy Water with appreciation of Aspersio.^000000"; + next; + if (!countitem(523)) { + mes "["+strcharinfo(0)+"]"; + mes "Oh no! I forgot to bring a Holy Water!"; + close; + } + mes "- You bow respectfully holding up a Holy Water and put the glass to your lips. -"; + next; + mes "- * ASPERSIO ! * -"; + specialeffect2 EF_ASPERSIO; + next; + specialeffect2 EF_RECOVERY; + mes "............................."; + next; + mes "............................."; + mes "........................."; + next; + mes "............................."; + mes "........................."; + mes "....................."; + next; + mes "^3131FF[Priest Dayan]^000000"; + mes "^3131FFThe last way is a way of light^000000.^000000."; + mes "^3131FFYou are free from all sin because you were blessed from all creation.^000000"; + next; + mes "^3131FF[Priest Dayan]^000000"; + mes "^3131FFYou were reborn as light, sing a Gloria of joy and soul that love you.^000000"; + next; + mes "- You breath in deep and start to sing a Gloria."; + mes "A chord crashs out in the spring of Hvergelmir and a waterfall sound gives you a refreshing feeling. -"; + specialeffect2 EF_GLORIA; + next; + mes "["+strcharinfo(0)+"]"; + mes "~Descendants of Heimdal gather under the Ash tree Yggdrasil.~"; + mes "~The Curdan bird which sits on a branch brings me the wisdom of whole world.~"; + next; + mes "["+strcharinfo(0)+"]"; + mes "~The Curdan wolf protects me from all threats in the world.~"; + specialeffect2 EF_GLORIA; + next; + mes "["+strcharinfo(0)+"]"; + mes "~The host of ballascalf, rise up from your seat. The whole world shouts for joy.~"; + mes "~The father of light, the poet of wisdom, sing for me.~"; + next; + mes "["+strcharinfo(0)+"]"; + mes "~The host of a glittering glass, give me a holy prediction.~"; + specialeffect2 EF_GLORIA; + next; + mes "- After you finish the song, you feel light and strong with abundant devotion. -"; + specialeffect2 EF_BLESSING; + specialeffect2 EF_RESURRECTION; + next; + mes "["+strcharinfo(0)+"]"; + mes "That was refreshing."; + mes "I guess I should go back to Priest Dayan."; + set job_arch,3; + close2; + warp "umbala",138,219; + end; + } + else if (job_arch == 3) { + mes "["+strcharinfo(0)+"]"; + mes "The song is over. It's time to go back to Priest Dayan."; + close2; + warp "umbala",138,219; + end; + } +} + +hu_in01,205,204,7 script Praying Nun#benew 79,{ + if (job_arch == 4) { + mes "- There is a nun closing her eyes as she murmurs something which sounds like a prayer. -"; + next; + switch(select("Talk to her.:Stay Quiet.")) { + case 1: + break; + case 2: + mes "- You don't feel like disturbing her -"; + close; + } + mes "["+strcharinfo(0)+"]"; + mes "Umm, hello sister?"; + next; + mes "[Vinue]"; + mes "Ah, Welcome."; + mes "It's not time to have a service yet..."; + if (Sex == 1) + mes "Are you here to pray, brother?"; + else + mes "Are you here to pray, sister?"; + next; + mes "["+strcharinfo(0)+"]"; + mes "I came here to say hello from Priest Dayan from Prontera."; + next; + mes "[Vinue]"; + mes "Ah, Priest Dayan."; + mes "Is he good?"; + mes "He is so cute even though he's old."; + next; + mes "["+strcharinfo(0)+"]"; + mes "He told me that he was worried because when he saw you last time, you seemed sad."; + mes "He asks you to go on a Holy Pilgrimage."; + next; + mes "["+strcharinfo(0)+"]"; + mes "Umbala has the vital power of nature!"; + next; + mes "[Vinue]"; + mes "Ah..."; + if (Sex == 1) + mes "He's very kind. As are you brother."; + else + mes "He's very kind. As are you sister."; + next; + mes "[Vinue]"; + mes "But don't worry."; + mes "I'm just a little tired because of a bad dream."; + next; + mes "[Vinue]"; + mes "Evil is always watching for our souls."; + mes "If you are indifferent to praying, it never misses an opportunity."; + next; + switch(select("A dream? What kind of dream?:Your soul should be fine.")) { + case 1: + break; + case 2: + mes "[Vinue]"; + mes "Oh but that's where you're wrong."; + mes "My soul may be the most at risk."; + mes "Thank you for delivering the message."; + mes "I'll go back to my prayers."; + close; + } + mes "[Vinue]"; + mes "That is..."; + mes "Actually I started to have a bad dream from the date I was appointed."; + next; + mes "[Vinue]"; + mes "At first, it was a dream that Valkyrie was sad and in darkness."; + next; + mes "["+strcharinfo(0)+"]"; + mes "Valkyrie?"; + next; + mes "[Vinue]"; + mes "Yeah..."; + mes "She was crying in a pitch-black room."; + mes "Hanging down like a bird that had its wings cut."; + next; + mes "[Vinue]"; + mes "But, as time went by, the dream became scarier. Now Valkyrie is arrested with chains and then finally she is dashed to pieces."; + next; + mes "[Vinue]"; + mes "What a cruel performance! I suddenly can't breathe properly and then I wake up."; + next; + mes "["+strcharinfo(0)+"]"; + mes "To have to see the death of Valkyrie, must be a tormenting dream."; + next; + mes "[Vinue]"; + mes "Is it just a nightmare?"; + mes "Or do you think it is an omen?"; + next; + mes "[Vinue]"; + mes "I've been wanting to pray at Odin's shrine to make the dream go away. But that shrine became a den of evil a long time ago."; + next; + mes "["+strcharinfo(0)+"]"; + mes "The shrine?"; + mes "Nobody tried to subdue the evil?"; + next; + mes "[Vinue]"; + mes "Unfortunely, I'm a nun who doesn't have any exorcism skill..."; + mes "Residents of Hugel just stood aghast of the sight because they are not familiar with adventure."; + next; + mes "[Vinue]"; + mes "Thesedays, there are a lot of people because of the development of the Odin shrine, but their situation is not so good."; + next; + mes "["+strcharinfo(0)+"]"; + mes "Is the dream related with the evil in the Odin shrine?"; + next; + mes "[Vinue]"; + mes "Hum... well."; + mes "I don't have any way to find out."; + mes "I don't have a method, so I just pray."; + next; + switch(select("I'll investgate for you.:I'll pray with you.")) { + case 1: + break; + case 2: + mes "[Vinue]"; + mes "Thank you."; + mes "I'll pray that the darkness stays away."; + mes "I hope you have a good time with the festival here in Hugel."; + close; + } + mes "[Vinue]"; + mes "Yeah?"; + mes "But, it'll be scary inside!"; + mes "There are lots of devils inside!"; + next; + mes "["+strcharinfo(0)+"]"; + mes "But I can't pretend to ignore a Sister who is in trouble?"; + mes "I'm a minister who copes with lots of asceticism!"; + mes "Entrust me."; + next; + mes "[Vinue]"; + mes "Ah... I'm so worried...."; + mes "I'll never forget your warm heart."; + next; + mes "["+strcharinfo(0)+"]"; + mes "How do I get to Odin shrine?"; + next; + mes "[Vinue]"; + mes "There is a ferry on the right side of the church."; + next; + mes "["+strcharinfo(0)+"]"; + mes "Ok, wait for good news!"; + next; + mes "[Vinue]"; + mes "I'll pray for your safe return."; + mes "I hope that Odin gives you his protection as well."; + set job_arch,5; + changequest 2189,2190; + close; + } + else if ((job_arch > 4) && (job_arch < 100)) { + mes "[Vinue]"; + mes "I'll pray for your safe return."; + close; + } + else { + mes "[Vinue]"; + mes "I feel refreshed."; + mes "It must be good news?"; + mes "Thanks the Gods."; + close; + } +} + +odin_tem02,282,263,0 script #find_val -1,3,3,{ +OnTouch: + if ((job_arch > 4) && (job_arch < 100)) + enablenpc "Valkyrie Illusion#arch"; + end; +} + +odin_tem02,281,275,3 script Valkyrie Illusion#arch 403,{ + if ((job_arch > 4) && (job_arch < 100)) { + mes "You can see Valkyrie who has a despairing face."; + next; + switch(select("Touch Valkyrie's Illusion.:Turn away.")) { + case 1: + mes "You lose your consciousness while getting a closer view of Valkyrie's Illusion."; + close2; + specialeffect2 EF_CLOAKING; + warp "job3_arch01",29,29; + disablenpc "Valkyrie Illusion#arch"; + break; + case 2: + mes "Out of fear, you turn away from Valkyrie's illusion."; + close2; + disablenpc "Valkyrie Illusion#arch"; + break; + } + } + end; + +OnInit: + disablenpc "Valkyrie Illusion#arch"; + end; +} + +job3_arch01,29,34,3 script Valkyrie#arch 403,{ + if (Upper == 4) { + mes "[Valkyrie]"; + //Custom translation + mes "You are only a child."; + mes "My job is very difficult, I do not need to tollerate a child's joke. Away with you!"; + close; + } + if (!checkweight(1201,2)) { + //Custom translation + mes "- bags must be emptied before they can proceed. -"; + close; + } + if ((BaseLevel != 99) || (JobLevel < 50)) { + warp "odin_tem02",282,263; + end; + } + if (getmercinfo(0)) { + mes "[Valkyrie]"; + mes "If you want to talk with me, you have to ^3131FFcancel all contracts^000000 with any mercenaries you have."; + close; + } + if (SkillPoint) { + mes "You can't progress without using all your skill points. Please use all of your skill points before progressing~"; + close; + } + if (BaseJob != Job_Priest) { + warp "odin_tem02",282,263; + end; + } + else { + if (BaseJob != Job_Archbishop) { + if (job_arch < 5) { + warp "odin_tem02",282,263; + end; + } + else if (job_arch == 5) { + mes "[Valkyrie]"; + mes "In the heavens the sound of pipes spread out, but a bird that can't fly crawls and finally is crushed to pieces on the ground."; + mes "Ah, I'm resentful! so regretful!"; + next; + mes "- Valkyrie holds its face, then she finds you and stares with a threatening face. -"; + next; + mes "[Valkyrie]"; + mes "You are a descendant of Heimdal living in pain as a mortal, why are you in here?"; + mes "Are you here to ridicule my grim fate?"; + next; + mes "["+strcharinfo(0)+"]"; + mes "No way!"; + mes "But it's true that I'm here for you."; + next; + mes "[Valkyrie Anguhilde]"; + mes "...me?"; + mes "Of course I'm staying in Midgard, but we are under the yoke of fate that can't coexist in this world."; + next; + mes "[Valkyrie Anguhilde]"; + mes "I see, is your goal to enter Valhalla?"; + mes "If you do, it's the wrong place for you."; + next; + mes "[Valkyrie Anguhilde]"; + mes "I was already expelled from Asgard."; + mes "My duty is protecting this small island from humans trying to take it from the Gods and even I don't have any energy to do so."; + next; + mes "["+strcharinfo(0)+"]"; + mes "It's not that kind of problem."; + mes "But someone who perceives your painful situation has sent me here."; + next; + mes "[Valkyrie Anguhilde]"; + mes "Haha! You are going to help me?!"; + next; + mes "[Valkyrie Anguhilde]"; + mes "..................."; + next; + mes "- Valkyrie gives you a fierce scowl. -"; + next; + mes "[Valkyrie Anguhilde]"; + mes "In fact, I can't do anything with my body now."; + next; + mes "[Valkyrie Anguhilde]"; + mes "Human, answer me. Are you here to sincerely help me?"; + next; + switch(select("Yes:No")) { + case 1: + break; + case 2: + mes "[Valkyrie Anguhilde]"; + mes "I knew that I couldn't trust a human!"; + close2; + warp "odin_tem02",282,263; + end; + } + mes "[Valkyrie Anguhilde]"; + mes "Ok..."; + mes "I don't have any energy to hold my own, so I have no choice but to trust you."; + next; + mes "[Valkyrie Anguhilde]"; + mes "I was a normal Valkyrie that lead soldiers to Valhalla according to the order of Odin."; + next; + mes "[Valkyrie Anguhilde]"; + mes "But I harmed Freki, one of Odin's wolves, and I was expelled form Asgard without any energy as a Valkyrie with orders to protect this island."; + next; + mes "[Valkyrie Anguhilde]"; + mes "I was disgraced, this island is important as a temple for Odin and the various Gods."; + mes "I tried to do my best to protect this holy place."; + next; + mes "[Valkyrie Anguhilde]"; + mes "But one day, the devil started to gain influence on this island."; + mes "I don't know why they came here and from where they came from."; + next; + mes "[Valkyrie Anguhilde]"; + mes "They seiged the temple and I exhausted my energy tring to fight them all myself."; + next; + mes "[Valkyrie Anguhilde]"; + mes "The holy shrine was tainted by the devils."; + mes "How long do I have to be under this dishonorable fate!"; + next; + mes "[Valkyrie Anguhilde]"; + mes "Mortal one, what is your name?"; + next; + mes "["+strcharinfo(0)+"]"; + mes "My name is "+strcharinfo(0)+"."; + next; + mes "[Valkyrie Anguhilde]"; + mes ""+strcharinfo(0)+","; + mes "You told me that you want to help me, right? Even though it disgraces me, I am asking for your help."; + next; + mes "[Valkyrie Anguhilde]"; + mes "This place may look like it was made my humans. Actually, it's a very important monument and also a part of the God's history."; + next; + mes "[Valkyrie Anguhilde]"; + mes "I've lost all of my energy and my body is sealed so there is no way for me to protect the shrine."; + mes "You have to send a message to Valhalla to ask for help from a Valkyrie quickly."; + next; + select("How can I do that?"); + mes "[Valkyrie Anguhilde]"; + mes "At the ^3131FFtop of the shrine^000000, You can contact to them with a ^3131FFGolden pipe^000000."; + next; + mes "[Valkyrie Anguhilde]"; + mes "I'm going to give you a scroll of paper written in an ancient language."; + mes "In that scroll, there is my impersonation."; + mes "^3131FFIf you go outside, you can summon a Valkyrie with that scroll.^000000"; + next; + mes "[Valkyrie Anguhilde]"; + mes "After you summon my impersonation, you have to find a ^3131FFBroken pipe^000000."; + mes "Maybe it'll be spread in the shrine..."; + next; + mes "[Valkyrie Anguhilde]"; + mes "You have to go to the top of the shrine, collecting all broken pipes from the impersonation."; + mes "And then I'm going to take care of the matter."; + next; + mes "[Valkyrie Anguhilde]"; + mes "An impersonation will help when you move or attack as you want through ^FF0000ALT+click^000000."; + mes "But you have to be careful if an imeprsonation falls down."; + next; + mes "[Valkyrie Anguhilde]"; + mes "When you finish preparing to go on, talk to me again."; + mes "It'll be a long journey..."; + set job_arch,6; + close; + } + else if (job_arch == 6) { + if ($@archbs== 0) { + set $@archbs,1; //Global Variable + mes "[Valkyrie Anguhilde]"; + mes ""+strcharinfo(0)+" Did you finish preparing for your way of asceticism?"; + next; + set .@exampc,getmapusers("job3_arch02"); + if (.@exampc > 0) { + mes "[Valkyrie Anguhilde]"; + //Custom translation + mes "Ah, it seems someone is already combating the evil in the temple."; + mes "I will go see who it is, please wait a moment."; + set $@archbs,0; //Global Variable + close; + } + else { + mes "[Valkyrie Anguhilde]"; + mes "Ok. Now I'm going to send you there."; + mes "^FF0000When you go there, you have to summon my impersonation with the scroll^000000. Don't forget."; + set $@archbs,0; //Global Variable + close2; + nude; + if (countitem(2798)) + delitem 2798,countitem(2798); //Will_Of_Exhausted_Angel + donpcevent "start#arch::OnEnable"; + set job_arch,7; + changequest 2190,2191; + warp "job3_arch02",119,49; + disablenpc "Valkyrie#arch"; + end; + } + } + else { + mes "[Valkyrie Anguhilde]"; + //Custom translation + mes "I am already talking to someone, please wait and talk to me again."; + close; + } + } + else if (job_arch == 7) { + if (countitem(12381)) + delitem 12381,countitem(12381); //ValkyrieA_Scroll + if (countitem(12382)) + delitem 12382,countitem(12382); //ValkyrieB_Scroll + if ($@archbs == 0) { + set $@archbs,1; //Global Variable + mes "[Valkyrie Anguhilde]"; + mes "Are you ok human?"; + mes "It was not as easy as I expected."; + mes "Will you challenge again?"; + next; + set .@exampc,getmapusers("job3_arch02"); + if (.@exampc > 0) { + set $@archbs,0; //Global Variable + mes "[Valkyrie Anguhilde]"; + //Custom translation + mes "Ah, it seems someone is already combating the evil in the temple."; + mes "I will see who it is, please wait a moment."; + close; + } + else { + set $@archbs,0; //Global Variable + mes "[Valkyrie Anguhilde]"; + mes "OK. now I'm going to send you there."; + mes "^FF0000When you go there, you have to summon my impersonation with the scroll^000000."; + mes "An impersonation will help when you move or attack as you want through ^FF0000ALT+click^000000."; + mes "But you have to be careful if an imeprsonation falls down."; + close2; + nude; + if (countitem(2798)) + delitem 2798,countitem(2798); //Will_Of_Exhausted_Angel + donpcevent "start#arch::OnEnable"; + set job_arch,7; + warp "job3_arch02",119,49; + disablenpc "Valkyrie#arch"; + end; + } + } + else { + mes "[Valkyrie Anguhilde]"; + //Custom translation + mes "I am already talking to someone, please wait and talk to me again."; + close; + } + } + } + } + end; + +Onbc: + set $@archbs,0; //Global Variable + //Custom translation + mapannounce "job3_arch01", "Valkyrie's Cry: I hear the laughter of the devil, someone has fallen in the temple.",bc_map,"0xFFCE00"; + enablenpc "Valkyrie#arch"; + end; +} + +job3_arch02,119,49,0 script #arch_1_start -1,6,6,{ +OnTouch: + if (!countitem(12381)) + getitem 12381,1; //ValkyrieA_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: I feel heavy! Set me free!",bc_map,"0xFFCE00"; + disablenpc "#arch_1_start"; + end; +} + +job3_arch02,112,73,0 script #arch_1_01 -1,5,5,{ +OnTouch: + if (countitem(12381)) { + delitem 12381,1; //ValkyrieA_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2037) { //VALKYRIE_A + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits! Be careful!",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of the voice: They are close to you!",bc_map,"0xFFCE00"; //Custom translation + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,94,123,0 script #arch_1_02 -1,5,5,{ +OnTouch: + if (countitem(12381)) { + delitem 12381,1; //ValkyrieA_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2037) { //VALKYRIE_A + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits! Be careful!",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of the voice: They are close to you!",bc_map,"0xFFCE00"; //Custom translation + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,93,173,0 script #arch_1_03 -1,5,5,{ +OnTouch: + if (countitem(12381)) { + delitem 12381,1; //ValkyrieA_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2037) { //VALKYRIE_A + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits! Be careful!",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of the voice: They are close to you!",bc_map,"0xFFCE00"; //Custom translation + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,114,186,0 script #arch_1_04 -1,5,5,{ +OnTouch: + if (countitem(12381)) { + delitem 12381,1; //ValkyrieA_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2037) { //VALKYRIE_A + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits! Be careful!",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of the voice: They are close to you!",bc_map,"0xFFCE00"; //Custom translation + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,134,201,0 script #arch_1_05 -1,5,5,{ +OnTouch: + if (countitem(12381)) { + delitem 12381,1; //ValkyrieA_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2037) { //VALKYRIE_A + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits! Be careful!",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of the voice: They are close to you!",bc_map,"0xFFCE00"; //Custom translation + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,154,211,0 script #arch_1_06 -1,5,5,{ +OnTouch: + if (countitem(12381)) { + delitem 12381,1; //ValkyrieA_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2037) { //VALKYRIE_A + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits! Be careful!",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of the voice: They are close to you!",bc_map,"0xFFCE00"; //Custom translation + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,175,227,0 script #arch_1_07 -1,5,5,{ +OnTouch: + if (countitem(12381)) { + delitem 12381,1; //ValkyrieA_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2037) { //VALKYRIE_A + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits! Be careful!",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of the voice: They are close to you!",bc_map,"0xFFCE00"; //Custom translation + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,201,240,0 script #arch_1_08 -1,5,5,{ +OnTouch: + if (countitem(12381)) { + delitem 12381,1; //ValkyrieA_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2037) { //VALKYRIE_A + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits! Be careful!",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of the voice: They are close to you!",bc_map,"0xFFCE00"; //Custom translation + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,223,252,0 script #arch_1_09 -1,5,5,{ +OnTouch: + if (countitem(12381)) { + delitem 12381,1; //ValkyrieA_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2037) { //VALKYRIE_A + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits! Be careful!",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of the voice: They are close to you!",bc_map,"0xFFCE00"; //Custom translation + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,255,268,0 script #arch_1_10 -1,5,5,{ +OnTouch: + if (countitem(12381)) { + delitem 12381,1; //ValkyrieA_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2037) { //VALKYRIE_A + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits! Be careful!",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of the voice: They are close to you!",bc_map,"0xFFCE00"; //Custom translation + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,269,302,0 script #arch_1_11 -1,5,5,{ +OnTouch: + if (countitem(12381)) { + delitem 12381,1; //ValkyrieA_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2037) { //VALKYRIE_A + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits! Be careful!",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of the voice: They are close to you!",bc_map,"0xFFCE00"; //Custom translation + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,245,289,0 script #arch_1_12 -1,5,5,{ +OnTouch: + if (countitem(12381)) { + delitem 12381,1; //ValkyrieA_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2037) { //VALKYRIE_A + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits! Be careful!",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of the voice: They are close to you!",bc_map,"0xFFCE00"; //Custom translation + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,203,286,0 script #arch_1_boss -1,5,5,{ +OnTouch: + if (countitem(12381)) { + delitem 12381,1; //ValkyrieA_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2037) { //VALKYRIE_A + mapannounce "job3_arch02", "Valkyrie's Nightmare: An incompetent illusion of Valkyrie came here with the assistance of humans. You wanna have that nightmare?",bc_map,"0xFF0000"; + donpcevent "mob#arch_1::Onkill"; + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,390,390,1 script #arch_redcell 844,{ + end; + +OnInit: + setcell "job3_arch02",276,290,280,294,cell_walkable,0; + setcell "job3_arch02",276,290,280,294,cell_shootable,0; + end; + +Ongreen: + setcell "job3_arch02",276,290,280,294,cell_walkable,1; + setcell "job3_arch02",276,290,280,294,cell_shootable,1; + end; + +Onred: + setcell "job3_arch02",276,290,280,294,cell_walkable,0; + setcell "job3_arch02",276,290,280,294,cell_shootable,0; + end; +} + +job3_arch02,390,389,1 script #arch_val01 844,{ + end; + +OnEnable: + areamonster "job3_arch02",108,322,118,332,"Valkyrie's Nightmare",2036,1,"#arch_val01::OnMyMobDead"; + end; + +OnMyMobDead: + if (mobcount("job_arch02","#arch_val01::OnMyMobDead") < 1) { + donpcevent "#arch_redcell::Ongreen"; + mapannounce "job3_arch02", "Valkyrie's Nightmare: Your win is only a false image! hahahaha!",bc_map,"0xFF0000"; + enablenpc "Valkyrie#arch_01"; + disablenpc "#arch_1_start"; + disablenpc "#arch_1_01"; + disablenpc "#arch_1_02"; + disablenpc "#arch_1_03"; + disablenpc "#arch_1_04"; + disablenpc "#arch_1_05"; + disablenpc "#arch_1_06"; + disablenpc "#arch_1_07"; + disablenpc "#arch_1_08"; + disablenpc "#arch_1_09"; + disablenpc "#arch_1_10"; + disablenpc "#arch_1_11"; + disablenpc "#arch_1_12"; + disablenpc "#arch_1_boss"; + } + end; + +Onkill: + killmonster "job3_arch02","#arch_val01::OnMyMobDead"; + end; +} + +job3_arch02,390,387,1 script #arch_val02 844,{ + end; + +OnEnable: + areamonster "job3_arch02",239,41,249,51,"Valkyrie's Nightmare",2036,1,"#arch_val02::OnMyMobDead"; + end; + +OnMyMobDead: + if (mobcount("job_arch02","#arch_val02::OnMyMobDead") < 1) { + mapannounce "job3_arch02", "Valkyrie's Nightmare: You are so childish. I invite you to a devil's party. I'll make sure you have a fun!",bc_map,"0xFF0000"; + enablenpc "Valkyrie#arch_02"; + disablenpc "#arch_2_boss"; + viewpoint 1,279,234,1,0xFFFF99; + } + end; + +Onkill: + killmonster "job3_arch02","#arch_val02::OnMyMobDead"; + end; +} + +job3_arch02,113,327,5 script Valkyrie#arch_01 403,{ + if (getmercinfo(0)) { + mes "[Valkyrie]"; + mes "If you want to talk with me, you have to ^3131FFcancel all contracts^000000 with any mercenaries you have."; + close; + } + mes "[Valkyrie Anguhilde]"; + mes "The devil always makes an effort to agitate people's mind."; + mes "You don't have to care about their whisperings."; + next; + mes "[Valkyrie Anguhilde]"; + mes "Anyway I can feel my energy coming back."; + mes "Show me the stuff that you found."; + next; + mes "- You show a golden piece of pipe to Valkyrie. -"; + next; + mes "[Valkyrie Anguhilde]"; + mes "Oh, It's a piece of pipe!"; + mes "If you collect pieces, you can ask other Valkyries for help."; + next; + mes "[Valkyrie Anguhilde]"; + mes "Because of a close battle, I could only get a little energy."; + mes "I'm going to give a ^3131FFnew ancient scroll^000000."; + mes "It'll be helpful to find the rest of pieces."; + next; + mes "[Valkyrie Anguhilde]"; + mes "Then I look forward a good news."; + close2; + getitem 12382,1; //ValkyrieB_Scroll + viewpoint 1,244,46,1,0xFFFF99; + disablenpc "Valkyrie#arch_01"; + donpcevent "#arch_2_start::OnEnable"; + end; +} + +job3_arch02,244,46,5 script Valkyrie#arch_02 403,{ + mes "[Valkyrie Anguhilde]"; + mes "Did you find the rest of the pieces?"; + next; + if (countitem(6154) < 2) { + mes "[Valkyrie Anguhilde]"; + mes "Hum?"; + mes "I can see this one beside you."; + getitem 6154,2; //Broken_Horn_Pipe + next; + } + mes "[Valkyrie Anguhilde]"; + mes "OK."; + mes "I'll complete the broken horn pipe!"; + next; + mes "[Valkyrie Anguhilde]"; + mes "But the battle is not finished yet."; + mes "You remember a ^3131FFruined shrine on the center of the island^000000?"; + mes "It'll be completed only when you use a horn pipe."; + next; + mes "[Valkyrie Anguhilde]"; + mes "I can feel the air around me is getting impure."; + mes "And feel the coldness of the pitch-black darkness."; + mes "This time will be dangerous."; + next; + mes "[Valkyrie Anguhilde]"; + mes "I give you a necklace as a present."; + mes "But I'm not sure that It'll be helpful or not...."; + mes "Take care."; + mes "Please, hurry up!"; + close2; + getitem 2798,1; //Will_Of_Exhausted_Angel + disablenpc "Valkyrie#arch_02"; + donpcevent "#arch_3_start::OnEnable"; + end; +} + +job3_arch02,279,234,0 script #arch_end -1,7,7,{ +OnInit: + disablenpc "#arch_end"; + end; + +OnTouch: + donpcevent "#arch_3_01::Onkill"; + donpcevent "#arch_3_02::Onkill"; + donpcevent "#arch_3_03::Onkill"; + donpcevent "mob#arch_2::Onkill"; + enablenpc "Valkyrie Anguhilde#end"; + if (!checkweight(1201,1)) { + mes "- Wait a moment! -"; + mes "- Currently you are carrying -"; + mes "- too many items with you. -"; + mes "- Please come back after -"; + mes "- you put some items into Kafra Storage. -"; + close; + } + if (countitem(6154) < 2) { + mes "[Valkyrie Anguhilde]"; + mes "Did you collect all of the pieces of my horn pipe?"; + next; + mes "[Valkyrie Anguhilde]"; + mes "I know you bent over backwards to help me, but I can't do anything without 2 pieces of horn pipe."; + next; + mes "[Valkyrie Anguhilde]"; + mes "It can be dangerous, so let's go back."; + close; + nude; + if (countitem(2798)) + delitem 2798,countitem(2798); //Will_Of_Exhausted_Angel + delitem 6154,countitem(6154); //Broken_Horn_Pipe + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + mes "[Valkyrie Anguhilde]"; + mes "Finally we finished all the preparations."; + next; + mes "Valkyrie holds the pipe and blows towards the sky."; + next; + mes "Booo - - - -"; + next; + mes "Booo - - -"; + next; + enablenpc "Valkyrie of the heavens"; + mes "[Valkyrie Anguhilde]"; + mes "Assistance of Odin! Soldiers of Valhalla!"; + mes "The holy place of the God Odin is tainted by darkness!"; + next; + mes "[Valkyrie of the heavens]"; + mes "Don't worry, Anguhilde."; + mes "Your desire has reached Valhalla."; + mes "The devils were removed by other Valkyries as you wanted."; + next; + mes "[Valkyrie Anguhilde]"; + mes "Valkyries! Then is it safe now?"; + next; + mes "[Valkyrie of the heavens]"; + mes "Yes Anguhilde."; + mes "Even though you were expelled because of a incident before, Odin said that he is reconsidering your banishment."; + next; + mes "[Valkyrie Anguhilde]"; + mes "Ah! I can go back to Asgard!"; + next; + mes "[Valkyrie of the heavens]"; + mes "Don't make a hasty generalization."; + mes "But I think that good news will be sent to you."; + next; + mes "[Valkyrie Anguhilde]"; + mes "Honor to Odin!"; + mes "I feel full of grace."; + mes "So bright and warm...."; + next; + mes "- Shoooo -"; + specialeffect EF_CLOAKING,"Valkyrie Anguhilde#end"; + disablenpc "Valkyrie Anguhilde#end"; + emotion e_omg,1; + next; + mes "[Valkyrie of the heavens]"; + mes "Set your mind at ease."; + mes "She went to a place where she is supposed to be."; + next; + mes "[Valkyrie of the heavens]"; + mes "I think you don't get it."; + next; + mes "[Valkyrie of the heavens]"; + mes "Anguhilde is a Valkyrie who is dead for a long time ago."; + mes "Didn't you see a shrine covered by the devil?"; + mes "Unfortunately, Anguhilde couldn't cope with the task and fell down."; + next; + mes "[Valkyrie of the heavens]"; + mes "Here is an illusion of Anguhilde who doesn't want to be recognized."; + mes "She can't go to hell even when she is dead, and struggles from her constant nightmare."; + next; + mes "[Valkyrie of the heavens]"; + mes "But she is relieved by your favor."; + mes "Even though It's different with reality but now she may be able to rest in peace."; + next; + mes "[Valkyrie of the heavens]"; + mes "Human, the Valkyries are in your debt. Thank you."; + mes "I can't invite you as I want, but the power given by Odin can help you."; + next; + mes "[Valkyrie of the heavens]"; + mes "Now, go back to your world."; + mes "The sound of the horn pipe and a bird's chirpings will be spread out for you."; + next; + mes "[Valkyrie of the heavens]"; + mes "Don't forget an altruistic minister's spirit like today forever."; + mes "I hope we see each other in Valhalla sometime."; + nude; + if (countitem(2798)) + delitem 2798,countitem(2798); //Will_Of_Exhausted_Angel + delitem 6154,countitem(6154); //Broken_Horn_Pipe + set job_arch,100; + completequest 2191; + getitem 5747,1; //Mitra + getitem 2795,1; //Green_Apple_Ring + jobchange Job_Archbishop,Upper; + close; +} + +job3_arch02,281,232,1 script Valkyrie Anguhilde#end 403,{ + end; + +OnInit: + disablenpc "Valkyrie Anguhilde#end"; + end; +} + +job3_arch02,273,235,5 script Valkyrie of the heavens 811,{ + if (job_arch == 100) { + mes "[Valkyrie of the heavens]"; + mes "Now, go back to your world."; + mes "The sound of the horn pipe and a bird's chirpings will be spread out for you."; + next; + mes "[Valkyrie of the heavens]"; + mes "Don't forget an altruistic minister's spirit like today forever."; + mes "I hope we see each other in Valhalla sometime."; + close2; + mapwarp "job3_arch02","job_arch01",29,29; + } + end; + +OnInit: + disablenpc "Valkyrie of the heavens"; + end; +} + +job3_arch02,132,323,0 script #arch_2_01 -1,5,5,{ +OnTouch: + if (countitem(12382)) + mapannounce "job3_arch02", "Whispering of Valkyrie: I see a new ancient scroll!",bc_map,"0x000000"; + end; +} + +job3_arch02,167,313,0 script #arch_2_02 -1,5,5,{ +OnTouch: + if (countitem(12382)) { + delitem 12382,1; //ValkyrieB_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2038) { //VALKYRIE_B + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits. Can you hear? The sound of gathering in crowds.",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of Sounds: Battle Stance!",bc_map,"0xFFCE00"; //Custom translation + else + mapannounce "job3_arch02", "Whispering of an impersonation: I can't leave you! Die!",bc_map,"0xFFCE00"; + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,127,304,0 script #arch_2_03 -1,5,5,{ +OnTouch: + if (countitem(12382)) { + delitem 12382,1; //ValkyrieB_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2038) { //VALKYRIE_B + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits. Can you hear? The sound of gathering in crowds.",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of Sounds: Battle Stance!",bc_map,"0xFFCE00"; //Custom translation + else + mapannounce "job3_arch02", "Whispering of an impersonation: I can't leave you! Die!",bc_map,"0xFFCE00"; + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,207,279,0 script #arch_2_04 -1,5,5,{ +OnTouch: + if (countitem(12382)) { + delitem 12382,1; //ValkyrieB_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2038) { //VALKYRIE_B + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits. Can you hear? The sound of gathering in crowds.",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of Sounds: Battle Stance!",bc_map,"0xFFCE00"; //Custom translation + else + mapannounce "job3_arch02", "Whispering of an impersonation: I can't leave you! Die!",bc_map,"0xFFCE00"; + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,239,281,0 script #arch_2_05 -1,5,5,{ +OnTouch: + if (countitem(12382)) { + delitem 12382,1; //ValkyrieB_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2038) { //VALKYRIE_B + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits. Can you hear? The sound of gathering in crowds.",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of Sounds: Battle Stance!",bc_map,"0xFFCE00"; //Custom translation + else + mapannounce "job3_arch02", "Whispering of an impersonation: I can't leave you! Die!",bc_map,"0xFFCE00"; + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,269,303,0 script #arch_2_06 -1,5,5,{ +OnTouch: + if (countitem(12382)) { + delitem 12382,1; //ValkyrieB_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2038) { //VALKYRIE_B + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits. Can you hear? The sound of gathering in crowds.",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of Sounds: Battle Stance!",bc_map,"0xFFCE00"; //Custom translation + else + mapannounce "job3_arch02", "Whispering of an impersonation: I can't leave you! Die!",bc_map,"0xFFCE00"; + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,288,283,0 script #arch_2_07 -1,5,5,{ +OnTouch: + if (countitem(12382)) { + delitem 12382,1; //ValkyrieB_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2038) { //VALKYRIE_B + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits. Can you hear? The sound of gathering in crowds.",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of Sounds: Battle Stance!",bc_map,"0xFFCE00"; //Custom translation + else + mapannounce "job3_arch02", "Whispering of an impersonation: I can't leave you! Die!",bc_map,"0xFFCE00"; + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,278,234,0 script #arch_2_08 -1,5,5,{ +OnTouch: + if (countitem(12382)) { + delitem 12382,1; //ValkyrieB_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2038) { //VALKYRIE_B + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits. Can you hear? The sound of gathering in crowds.",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of Sounds: Battle Stance!",bc_map,"0xFFCE00"; //Custom translation + else + mapannounce "job3_arch02", "Whispering of an impersonation: I can't leave you! Die!",bc_map,"0xFFCE00"; + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,234,179,0 script #arch_2_09 -1,5,5,{ +OnTouch: + if (countitem(12382)) { + delitem 12382,1; //ValkyrieB_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2038) { //VALKYRIE_B + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits. Can you hear? The sound of gathering in crowds.",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of Sounds: Battle Stance!",bc_map,"0xFFCE00"; //Custom translation + else + mapannounce "job3_arch02", "Whispering of an impersonation: I can't leave you! Die!",bc_map,"0xFFCE00"; + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,227,169,0 script #arch_2_10 -1,5,5,{ +OnTouch: + if (countitem(12382)) { + delitem 12382,1; //ValkyrieB_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2038) { //VALKYRIE_B + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits. Can you hear? The sound of gathering in crowds.",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of Sounds: Battle Stance!",bc_map,"0xFFCE00"; //Custom translation + else + mapannounce "job3_arch02", "Whispering of an impersonation: I can't leave you! Die!",bc_map,"0xFFCE00"; + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,190,146,0 script #arch_2_11 -1,5,5,{ +OnTouch: + if (countitem(12382)) { + delitem 12382,1; //ValkyrieB_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2038) { //VALKYRIE_B + set .@randht,rand(1,10); + if (.@randht < 8) + mapannounce "job3_arch02", "Whispering of an impersonation: I can feel the devil's spirits. Can you hear? The sound of gathering in crowds.",bc_map,"0xFFCE00"; + else if ((.@randht == 8) && (.@randht == 9)) + mapannounce "job3_arch02", "Embodiment of Sounds: Battle Stance!",bc_map,"0xFFCE00"; //Custom translation + else + mapannounce "job3_arch02", "Whispering of an impersonation: I can't leave you! Die!",bc_map,"0xFFCE00"; + end; + } + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + } +} + +job3_arch02,206,113,0 script #arch_2_boss -1,5,5,{ +OnTouch: + if (countitem(12382)) { + delitem 12382,1; //ValkyrieB_Scroll + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + end; + } + else { + if (getmercinfo(1) == 2038) //VALKYRIE_B + mapannounce "job3_arch02", "A shout of devil: You are so childish. I invite you a party of devil. I'll make you have a fun!",bc_map,"0xFF0000"; + else { + mapannounce "job3_arch02", "Whispering of an impersonation: You can't do anything by yourself! Let's go back!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + } + end; + } +} + +job3_arch02,284,159,0 script #arch_3_01 -1,20,20,{ +OnInit: + enablenpc "#arch_3_01"; + end; + +OnTouch: + if (BaseJob != Job_Priest) { + mapannounce "job3_arch02", "Frus: Do you want to see God? Okay, I'll send you to the land of the dead by myself!",bc_map,"0xFF0000"; + areamonster "job3_arch02",239,41,249,51,"Frus",1762,1,"#arch_3_01::OnMyMobDead"; + } + disablenpc "#arch_3_01"; + end; + +Onkill: + killmonster "job3_arch02","#arch_3_01::OnMyMobDead"; + end; + +OnMyMobDead: + end; +} + +job3_arch02,307,200,0 script #arch_3_02 -1,5,5,{ +OnInit: + enablenpc "#arch_3_02"; + end; + +OnTouch: + if (BaseJob == Job_Priest) { + mapannounce "job3_arch02", "Skogul: You are my guest!",bc_map,"0xFF0000"; + areamonster "job3_arch02",306,199,308,201,"Skogul",1761,1,"#arch_3_02::OnMyMobDead"; + } + disablenpc "#arch_3_02"; + end; + +Onkill: + killmonster "job3_arch02","#arch_3_02::OnMyMobDead"; + end; + +OnMyMobDead: + end; +} + +job3_arch02,296,216,0 script #arch_3_03 -1,5,5,{ +OnInit: + disablenpc "#arch_3_03"; + end; + +OnTouch: + mapannounce "job3_arch02", "Frus: I like your face... Can I steal it?",bc_map,"0xFF0000"; + areamonster "job3_arch02",295,215,297,217,"Frus",1762,1,"#arch_3_03::OnMyMobDead"; + disablenpc "#arch_3_03"; + end; + +Onkill: + killmonster "job3_arch02","#arch_3_03::OnMyMobDead"; + end; + +OnMyMobDead: + end; +} + +job3_arch02,389,390,1 script mob#arch_1 844,{ +OnEnable: + areamonster "job3_arch02",99,101,101,103,"Shrine Invader",1394,2,"mob#arch_1::OnMyMobDead"; + areamonster "job3_arch02",89,130,91,132,"Shrine Invader",1394,2,"mob#arch_1::OnMyMobDead"; + areamonster "job3_arch02",90,169,92,171,"Shrine Invader",1427,1,"mob#arch_1::OnMyMobDead"; + areamonster "job3_arch02",103,182,105,184,"Shrine Invader",1427,1,"mob#arch_1::OnMyMobDead"; + areamonster "job3_arch02",137,204,139,206,"Shrine Invader",1394,2,"mob#arch_1::OnMyMobDead"; + areamonster "job3_arch02",160,214,162,216,"Shrine Invader",1394,2,"mob#arch_1::OnMyMobDead"; + areamonster "job3_arch02",164,214,166,216,"Shrine Invader",1427,1,"mob#arch_1::OnMyMobDead"; + areamonster "job3_arch02",200,235,202,237,"Shrine Invader",1394,2,"mob#arch_1::OnMyMobDead"; + areamonster "job3_arch02",217,249,219,251,"Shrine Invader",1427,1,"mob#arch_1::OnMyMobDead"; + areamonster "job3_arch02",253,292,255,294,"Shrine Invader",1427,1,"mob#arch_1::OnMyMobDead"; + end; + +Onkill: + killmonster "job3_arch02","mob#arch_1::OnMyMobDead"; + end; + +OnMyMobDead: + end; +} + +job3_arch02,389,389,1 script mob#arch_2 844,{ +OnEnable: + areamonster "job3_arch02",155,320,157,322,"Shrine Invader",1480,2,"mob#arch_2::OnMyMobDead"; + areamonster "job3_arch02",169,304,171,306,"Shrine Invader",1480,2,"mob#arch_2::OnMyMobDead"; + areamonster "job3_arch02",182,292,184,294,"Shrine Invader",1453,1,"mob#arch_2::OnMyMobDead"; + areamonster "job3_arch02",199,286,201,288,"Shrine Invader",1453,1,"mob#arch_2::OnMyMobDead"; + areamonster "job3_arch02",255,292,257,294,"Shrine Invader",1480,2,"mob#arch_2::OnMyMobDead"; + areamonster "job3_arch02",285,283,287,285,"Shrine Invader",1480,2,"mob#arch_2::OnMyMobDead"; + areamonster "job3_arch02",277,235,279,237,"Shrine Invader",1453,1,"mob#arch_2::OnMyMobDead"; + areamonster "job3_arch02",291,184,293,186,"Shrine Invader",1480,2,"mob#arch_2::OnMyMobDead"; + areamonster "job3_arch02",280,169,282,171,"Shrine Invader",1453,1,"mob#arch_2::OnMyMobDead"; + areamonster "job3_arch02",226,165,228,167,"Shrine Invader",1453,1,"mob#arch_2::OnMyMobDead"; + areamonster "job3_arch02",189,145,191,147,"Shrine Invader",1480,1,"mob#arch_2::OnMyMobDead"; + areamonster "job3_arch02",203,176,205,178,"Shrine Invader",1453,1,"mob#arch_2::OnMyMobDead"; + end; + +Onkill: + killmonster "job3_arch02","mob#arch_2::OnMyMobDead"; + end; + +OnMyMobDead: + end; +} + +job3_arch02,389,388,1 script start#arch 844,{ + end; + +OnInit: + mapwarp "job3_arch02","job3_arch02",29,29; + end; + +OnEnable: + mapwarp "job3_arch02","job3_arch02",29,29; + enablenpc "#arch_1_start"; + enablenpc "#arch_1_01"; + enablenpc "#arch_1_02"; + enablenpc "#arch_1_03"; + enablenpc "#arch_1_04"; + enablenpc "#arch_1_05"; + enablenpc "#arch_1_06"; + enablenpc "#arch_1_07"; + enablenpc "#arch_1_08"; + enablenpc "#arch_1_09"; + enablenpc "#arch_1_10"; + enablenpc "#arch_1_11"; + enablenpc "#arch_1_12"; + enablenpc "#arch_1_boss"; + disablenpc "#arch_2_01"; + disablenpc "#arch_2_02"; + disablenpc "#arch_2_03"; + disablenpc "#arch_2_04"; + disablenpc "#arch_2_05"; + disablenpc "#arch_2_06"; + disablenpc "#arch_2_07"; + disablenpc "#arch_2_08"; + disablenpc "#arch_2_09"; + disablenpc "#arch_2_10"; + disablenpc "#arch_2_11"; + disablenpc "#arch_2_boss"; + disablenpc "#arch_3_01"; + disablenpc "#arch_3_02"; + disablenpc "#arch_3_03"; + donpcevent "#arch_3_01::Onkill"; + donpcevent "#arch_3_02::Onkill"; + donpcevent "#arch_3_03::Onkill"; + disablenpc "#arch_end"; + disablenpc "Valkyrie#arch_01"; + disablenpc "Valkyrie#arch_02"; + disablenpc "Valkyrie Anguhilde#end"; + disablenpc "Valkyrie of the heavens"; + donpcevent "#arch_redcell::Onred"; + donpcevent "mob#arch_1::Onkill"; + donpcevent "mob#arch_2::Onkill"; + donpcevent "start#arch::Ontimeoff"; + donpcevent "start#arch::Ontimeon"; + donpcevent "#arch_val01::Onkill"; + donpcevent "#arch_val02::Onkill"; + donpcevent "mob#arch_1::Onkill"; + donpcevent "mob#arch_2::Onkill"; + donpcevent "mob#arch_1::OnEnable"; + donpcevent "#arch_val01::OnEnable"; + end; + +Ontimeon: + initnpctimer; + end; + +Ontimeoff: + stopnpctimer; + end; + +OnTimer60000: +OnTimer120000: +OnTimer180000: +OnTimer240000: +OnTimer300000: +OnTimer360000: +OnTimer420000: +OnTimer480000: +OnTimer540000: + set .@mapcount,getmapusers("job3_arch02"); + if (.@mapcount == 0) { + mapwarp "job3_arch02","job_arch01",29,29; + donpcevent "Valkyrie#arch::Onbc"; + stopnpctimer; + } + end; + +OnTimer600000: + mapannounce "job3_arch02", "Demons cry: Too boring, can no longer imagine what will happen! Friends, we went to lessons learned that could fool arrogant guy, OK?",bc_map,"0xFF0000"; + end; + +OnTimer605000: + mapannounce "job3_arch02", "Valkyrie's voice: No! This can not be. I will send you back soon!",bc_map,"0xFFCE00"; + mapwarp "job3_arch02","job_arch01",29,29; + donpcevent "Valkyrie#arch::Onbc"; + stopnpctimer; + end; +} + +job3_arch02,390,388,1 script #arch_2_start 844,{ + end; + +OnInit: + disablenpc "#arch_2_01"; + disablenpc "#arch_2_02"; + disablenpc "#arch_2_03"; + disablenpc "#arch_2_04"; + disablenpc "#arch_2_05"; + disablenpc "#arch_2_06"; + disablenpc "#arch_2_07"; + disablenpc "#arch_2_08"; + disablenpc "#arch_2_09"; + disablenpc "#arch_2_10"; + disablenpc "#arch_2_11"; + disablenpc "#arch_2_boss"; + end; + +OnEnable: + enablenpc "#arch_2_01"; + enablenpc "#arch_2_02"; + enablenpc "#arch_2_03"; + enablenpc "#arch_2_04"; + enablenpc "#arch_2_05"; + enablenpc "#arch_2_06"; + enablenpc "#arch_2_07"; + enablenpc "#arch_2_08"; + enablenpc "#arch_2_09"; + enablenpc "#arch_2_10"; + enablenpc "#arch_2_11"; + enablenpc "#arch_2_boss"; + donpcevent "#arch_val02::OnEnable"; + donpcevent "mob#arch_2::OnEnable"; + end; +} + +job3_arch02,390,386,1 script #arch_3_start 844,{ + end; + +OnEnable: + enablenpc "#arch_3_01"; + enablenpc "#arch_3_02"; + enablenpc "#arch_3_03"; + enablenpc "#arch_end"; + enablenpc "#arch_end_eff"; + end; +} + +job3_arch02,290,221,0 script #arch_end_eff 139,5,5,{ +OnTouch: + specialeffect EF_MAPPILLAR2,"#arch_end"; + end; +} + +job3_arch01,29,24,0 warp #archout 1,1,odin_tem02,282,263 + +/* +job3_arch01,1,1,1 script ツソテ佚姪#arch 844,{ + mes "[テ催ァツケフオテテ甘榲暗犠"; + mes "テテォテ甘、テ暗ォテε愿ろ。」"; + next; + input .@input; //,0,9999; + if (input == 1854) { + set archglo,090219_archbs; + mes "[ヘィテ静疹"; + mes "テ湘姪卑オテネォツセヨアテ、テツソヨオホェ"; + mes "" + archglo + "ツ。ツ」"; + mes "テテ」テ湘ォテ窃クテテづー?"; + next; + switch(select("0:1")) { + case 1: + set $@archbs,0; //Global Variable + enablenpc "Valkyrie#arch"; + break; + case 2: + set $@archbs,1; //Global Variable + enablenpc "Valkyrie#arch"; + break; + } + } + else { + mes "[テ催ァツケフオテテ甘榲暗犠"; + mes "テ者イツサテ甘ヒオツケテステε愿づォメェテ甘、テ暗ォテ陛スネキテを」。」ツ。"; + close; + } +} +*/ + +odin_tem02,30,181,0 script #wherearch01 -1,10,10,{ +OnTouch: + if (job_arch == 5) + viewpoint 1,282,263,1,0xFFFF99; + end; +} + +odin_tem02,30,335,0 script #wherearch02 -1,10,10,{ +OnTouch: + if (job_arch == 5) + viewpoint 1,282,263,1,0xFFFF99; + end; +} -- cgit v1.2.3-70-g09d2 From 00f4b25981be9632f662ff055bae81ad3d49694f Mon Sep 17 00:00:00 2001 From: L0ne_W0lf Date: Fri, 30 Sep 2011 19:54:58 +0000 Subject: * Fixed skill_calc_heal applying heal bonuses only to AL_HEAL. * Still working on updating the status window to display properly. * Refine bonuses on armor now apply properly. (+1 additional bonus for every 4 refines.) Refining in general now goes up to 20. * Criticals will now no longer ignore defense, but will still always hit. * Converted m/def2 to a short, for testing status window update, will eventually need to surpass 32k. Good like this for now while we work on it. * Cleaned up some minor things relating tot he arch bishop skill update. * Applied some of the 30/08/2011 kRO updates to arch bishop skills. * Added more SI_ Constants from newer clients to status.h. * Added constants to the database for future updates. * Updated Runestones and creation items. * Added Runestone delays to item_delay. * Added Runestones receipies to produce_db. * Added dummy rates to refine_db. * Added Rune Knight skills to skill_cast_db * Updated Rune Knight skills, and Arch Bishop skills. * Updated SP requirements in skill_require_db. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/renewal@14964 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Renewal.txt | 10 ++++ conf/battle/player.conf | 2 +- conf/char_athena.conf | 2 +- db/Changelog.txt | 10 ++++ db/const.txt | 31 +++++++++- db/item_db.txt | 38 ++++++------ db/item_delay.txt | 10 ++++ db/produce_db.txt | 29 ++++++++- db/refine_db.txt | 10 ++-- db/skill_cast_db.txt | 37 ++++++++++++ db/skill_db.txt | 26 ++++----- db/skill_require_db.txt | 58 +++++++++--------- doc/3rd_job_notes.txt | 27 ++++++--- npc/jobs/3-1/archbishop.txt | 21 ++++++- src/map/battle.c | 28 ++++----- src/map/clif.c | 37 ++++++------ src/map/pc.c | 9 +-- src/map/skill.c | 139 ++++++++++++++++++++++++++------------------ src/map/skill.h | 5 +- src/map/status.c | 104 +++++++++++++++++++++------------ src/map/status.h | 68 +++++++++++++++++++--- 21 files changed, 480 insertions(+), 221 deletions(-) (limited to 'npc/jobs/3-1/archbishop.txt') diff --git a/Changelog-Renewal.txt b/Changelog-Renewal.txt index 6ae61d8c8..cdeeaf2e3 100644 --- a/Changelog-Renewal.txt +++ b/Changelog-Renewal.txt @@ -1,5 +1,15 @@ Date Added +2011/09/30 + * Rev. 14963 Just a slew of back-logged source updates. [L0ne_W0lf] + * Fixed skill_calc_heal applying heal bonuses only to AL_HEAL. + * Still working on updating the status window to display properly. + * Refine bonuses on armor now apply properly. (+1 additional bonus for every 4 refines.) Refining in general now goes up to 20. + * Criticals will now no longer ignore defense, but will still always hit. + * Converted m/def2 to a short, for testing status window update, will eventually need to surpass 32k. Good like this for now while we work on it. + * Cleaned up some minor things relating tot he arch bishop skill update. + * Applied some of the 30/08/2011 kRO updates to arch bishop skills. + * Added more SI_ Constants from newer clients to status.h. 2011/08/28 * Rev. 14948 Fixed Blessing crashing the server when used on monsters, monster weapon attack mechanics are currently unknown. [L0ne_W0lf] * Updated conditions for UNT_EPICLESIS and AB_ADORAMUS (two cases of || to &&.) diff --git a/conf/battle/player.conf b/conf/battle/player.conf index 0dd5da163..005570c9c 100644 --- a/conf/battle/player.conf +++ b/conf/battle/player.conf @@ -101,7 +101,7 @@ max_baby_third_parameter: 108 // NOTE: does not affects skills and status effects like Mental Strength // If weapon_defense_type is non-zero, it won't apply to max def. // If magic_defense_type is non-zero, it won't apply to max mdef. -max_def: 9999 +max_def: 32767 // Def to Def2 conversion bonus. If the armor def/mdef exceeds max_def, // the remaining is converted to vit def/int mdef using this multiplier diff --git a/conf/char_athena.conf b/conf/char_athena.conf index 8e109f4da..512f3cb97 100644 --- a/conf/char_athena.conf +++ b/conf/char_athena.conf @@ -10,7 +10,7 @@ passwd: p1 // Server name, use alternative character such as ASCII 160 for spaces. // NOTE: Do not use spaces in the name, or guild emblems won't work client-side! -server_name: eAthena +server_name: eAthenaRE // Wisp name for server: used to send wisp from server to players (between 4 to 23 characters) wisp_server_name: Server diff --git a/db/Changelog.txt b/db/Changelog.txt index f3b0b4423..f81d9acd0 100644 --- a/db/Changelog.txt +++ b/db/Changelog.txt @@ -9,6 +9,16 @@ 13005 Angelic Wing Dagger: NEED INFO. ======================= +2011/09/30 + * Rev. 14963 Minor changes from kRO's 30/08/2011 maintainence, and general updates. [L0ne_W0lf] + * Added constants to the database for future updates. + * Updated Runestones and creation items. + * Added Runestone delays to item_delay. + * Added Runestones receipies to produce_db. + * Added dummy rates to refine_db. + * Added Rune Knight skills to skill_cast_db + * Updated Rune Knight skills, and Arch Bishop skills. + * Updated SP requirements in skill_require_db. 2011/08/26 * Rev. 14941 Several updates in relation to 3rd jobs. [L0ne_W0lf] 2011/08/10 diff --git a/db/const.txt b/db/const.txt index f2d328118..397ef366e 100644 --- a/db/const.txt +++ b/db/const.txt @@ -252,6 +252,21 @@ EAJ_BABY_SOUL_LINKER 0x2207 Option_Wedding 0x1000 Option_Xmas 0x10000 Option_Summer 0x40000 +Option_Dragon1 0x80000 +Option_Wug 0x100000 +Option_Wugrider 0x200000 +Option_Madogear 0x400000 +Option_Dragon2 0x800000 +Option_Dragon3 0x1000000 +Option_Dragon4 0x2000000 +Option_Dragon5 0x4000000 +Option_Riding2 0x8000000 + +DRAGON_GREEN 0 +DRAGON_BLACK 1 +DRAGON_WHITE 2 +DRAGON_BLUE 3 +DRAGON_RED 4 bc_all 0 bc_map 1 @@ -671,6 +686,8 @@ SC_CONFUSION 7 SC_BLIND 8 SC_BLEEDING 9 SC_DPOISON 10 +//SC_FEAR 11 +//SC_BURNING 12 SC_PROVOKE 20 SC_ENDURE 21 SC_TWOHANDQUICKEN 22 @@ -959,7 +976,7 @@ SC_PARTYFLEE 310 //SC_ENDURE_MDEF 311 //SC_ENCHANTBLADE 312 //SC_DEATHBOUND 313 -//SC_REFRESH 314 +//SC_REUSE_REFRESH 314 //SC_GIANTGROWTH 315 //SC_STONEHARDSKIN 316 //SC_VITALITYACTIVATION 317 @@ -2127,3 +2144,15 @@ IT_PETARMOR 8 IT_AMMO 10 IT_DELAYCONSUME 11 IT_CASH 18 + +Runestone_Ordinary 12737 +Runestone_Quality 12734 +Runestone_Rare 12738 +Runestone_Ancient 12735 +Runestone_Mystic 12736 + +Produce_Weaponlvl1 1 +Produce_Weaponlvl2 2 +Produce_Weaponlvl3 3 +Produce_Materials 21 +Produce_Runestone 24 diff --git a/db/item_db.txt b/db/item_db.txt index 40664d379..71c5bdab5 100644 --- a/db/item_db.txt +++ b/db/item_db.txt @@ -115,10 +115,10 @@ 609,Amulet,Amulet,2,100,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} 610,Leaf_Of_Yggdrasil,Yggdrasil Leaf,11,4000,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "ALL_RESURRECTION",1; },{},{} 611,Spectacles,Magnifier,11,40,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "MC_IDENTIFY",1; },{},{} -612,Portable_Furnace,Mini Furnace,2,150,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ produce 21; },{},{} -613,Iron_Hammer,Iron Hammer,2,1000,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ produce 1; },{},{} -614,Golden_Hammer,Golden Hammer,2,3000,,300,,,,,0xFFFFFFFF,7,2,,,,,,{ produce 2; },{},{} -615,Oridecon_Hammer,Oridecon Hammer,2,5000,,400,,,,,0xFFFFFFFF,7,2,,,,,,{ produce 3; },{},{} +612,Portable_Furnace,Mini Furnace,2,150,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Materials; },{},{} +613,Iron_Hammer,Iron Hammer,2,1000,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Weaponlvl1; },{},{} +614,Golden_Hammer,Golden Hammer,2,3000,,300,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Weaponlvl2; },{},{} +615,Oridecon_Hammer,Oridecon Hammer,2,5000,,400,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Weaponlvl3; },{},{} 616,Old_Card_Album,Old Card Album,2,10000,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_CardAlbum),1; },{},{} 617,Old_Violet_Box,Old Purple Box,2,10000,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_VioletBox),1; },{},{} 618,Worn_Out_Scroll,Worn Out Scroll,2,50,,20,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_ScrollBox),1; },{},{} @@ -2809,7 +2809,7 @@ //5477,Bro_Flag,Brazilian Flag Hat,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,30,1,474,{ skill "SM_BASH",1; },{},{} //5478,Classic_Hat,Classic Hat,5,20,,500,,3,,0,0xFFFFFFFF,7,2,256,,0,1,475,{ bonus bStr,2; bonus bMaxHP,300; },{},{} 5479,Shaman's_Hair_Ornament,Shaman's Hair Decoration,5,20,,300,,1,,0,0xFFFFFFFF,7,2,256,,30,1,476,{ bonus bMdef,3; bonus bMaxHP,50; bonus2 bSubEle,Ele_Neutral,5; if(isequipped(2777,2778)) { bonus bMaxHP,300; bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,5; } },{},{} -5480,Bizofnil_Wing_Deco,Bijofnil Wings,5,20,,1000,,3,,0,0xFFFFFFFF,7,2,256,,30,1,477,{ bonus bAllStats,2; bonus3 bAutoSpell,"PR_IMPOSITIO",3,3; },{},{} +5480,Bizofnil_Wing_Deco,Bijofnil Wings,5,20,,1000,,3,,0,0xFFFFFFFF,7,2,256,,30,1,477,{ bonus bAllStats,2; bonus3 bAutoSpell,"PR_IMPOSITIO",3,3; },{},{} 5481,Hermose_Cap,Hermode Cap,5,20,,1000,,1,,1,0xFFFFFFFF,7,2,256,,1,1,478,{ bonus bAspdRate,10; bonus bBaseAtk,-20; bonus bMatkRate,-10; },{},{} 5482,Dark_Knight_Mask,Dark Knight Mask,5,,,3000,,5,,0,0xFFFFFFFF,7,2,769,,80,1,479,{ bonus bStr,3; if(isequipped(2779,2780)) { bonus bMatkRate,10; bonus bInt,5; bonus2 bSubRace,RC_Angel,10; } },{},{} 5483,Odin_Mask,Odin Mask,5,20,,100,,1,,0,0xFFFFFFFF,7,2,513,,50,0,480,{ bonus bHit,-10; bonus2 bAddRace,RC_Demihuman,6; },{},{} @@ -5309,20 +5309,20 @@ 12722,Poison_Fever,Pyrexia,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} 12723,Poison_Laughing,Magic Mushroom,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} 12724,Poison_Fatigue,Venom Bleed,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -12725,Runstone_Nosiege,Nosiege Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -12726,Runstone_Rhydo,Rhydo Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -12727,Runstone_Verkana,Verkana Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -12728,Runstone_Isia,Isia Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -12729,Runstone_Asir,Asir Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -12730,Runstone_Urj,Urj Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -12731,Runstone_Turisus,Turisus Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -12732,Runstone_Pertz,Pertz Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -12733,Runstone_Hagalas,Hagalas Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -12734,Runstone_Quality,Quality Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -12735,Runstone_Ancient,Ancient Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -12736,Runstone_Mystic,Mystic Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -12737,Runstone_Ordinary,General Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -12738,Runstone_Rare,Rare Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} +12725,Runstone_Nosiege,Nosiege Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_REFRESH",1; },{},{} +12726,Runstone_Rhydo,Rydo Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_CRUSHSTRIKE",1; },{},{} +12727,Runstone_Verkana,Verkana Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_MILLENNIUMSHIELD",1; },{},{} +12728,Runstone_Isia,Isia Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_VITALITYACTIVATION",1; },{},{} +12729,Runstone_Asir,Asir Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_FIGHTINGSPIRIT",1; },{},{} +12730,Runstone_Urj,Urj Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_ABUNDANCE",1; },{},{} +12731,Runstone_Turisus,Tursius Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_GIANTGROWTH",1; },{},{} +12732,Runstone_Pertz,Pertz Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_STORMBLAST",1; },{},{} +12733,Runstone_Hagalas,Hagalas Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_STONEHARDSKIN",1; },{},{} +12734,Runstone_Quality,Quality Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ /* produce Produce_Runestone,Runestone_Quality; */ },{},{} +12735,Runstone_Ancient,Ancient Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ /* produce Produce_Runestone,Runestone_Ancient; */ },{},{} +12736,Runstone_Mystic,Mystic Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ /* produce Produce_Runestone,Runestone_Mystic; */ },{},{} +12737,Runstone_Ordinary,General Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ /* produce Produce_Runestone,Runestone_Ordinary; */ },{},{} +12738,Runstone_Rare,Rare Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ /* produce Produce_Runestone,Runestone_Rare; */ },{},{} 12739,Snow_Flower,Snow Flowers,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} 12740,Inc_Str_Scroll,Amplification Scroll,2,1,,0,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} 12741,Inc_Int_Scroll,Intellect Amplification Scroll,2,1,,0,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} diff --git a/db/item_delay.txt b/db/item_delay.txt index a0b1389bd..c3ebc47aa 100644 --- a/db/item_delay.txt +++ b/db/item_delay.txt @@ -14,3 +14,13 @@ 12210,60000 //Bubble_Gum 14538,300000 //Glass_Of_Illusion 14586,180000 //Spark_Candy +// Third Jobs +// Rune Knight Runestones. +12725,21600000 //Runstone_Nosiege +12727,21600000 //Runstone_Verkana +12728,18000000 //Runstone_Isia +12729,18000000 //Runstone_Asir +12730,18000000 //Runstone_Urj +12731,18000000 //Runstone_Turisus +12732,18000000 //Runstone_Pertz +12733,18000000 //Runstone_Hagalas diff --git a/db/produce_db.txt b/db/produce_db.txt index cdd30f5cc..f24d1ba93 100644 --- a/db/produce_db.txt +++ b/db/produce_db.txt @@ -396,9 +396,32 @@ //============================================== -//===== Third Class === ItemLV=24 ================== +//===== Third Class === ItemLV=?? ============== + +//---- Rune Kight ------------------------------ +//--- Tursius Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Cobold_Hair 1, Claw_Of_Desert_Wolf 1 +12731,24,2010,1,7939,1,1034,1,7030,1 +//--- Isia Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Burning_Heart 1 +12728,24,2010,2,7939,1,7097,1 +//--- Pertz Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Light_Granule 1, Tangled_Chain 1, Dragon_Canine 1 +12732,24,2010,3,7939,1,7938,1,7221,1,1035,1 +//--- Hagalas Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Round_Shell 1, Dragon's_Skin 1 +12733,24,2010,4,7939,1,1096,1,7123,1 +//--- Asir Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Light_Granule 1, Ogre_Tooth 1 +12729,24,2010,5,7939,1,7938,1,7002,1 +//--- Urj Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Slender_Snake 1, Honey 1 +12730,24,2010,6,7939,1,1048,1,518,1 +//--- Rhydo Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Light_Granule 1, Red_Gemstone 1 +12726,24,2010,7,7939,1,7938,1,716,1 +//--- Noseige Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Light_Granule 1, Broken_Armor_Piece 1, Old_Magic_Circle 1 +12725,24,2010,8,7939,2,7938,2,7069,1,618,1 +//--- Verkana Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Dullahan_Armor 1 +12727,24,2010,9,7939,1,7210,1 +//---------------------------------------------- -//---------------------------------------------------------------------------------------------------------------------------- +//---- Arch Bishop ----------------------------- //-- Ancilla <-- AB_ANCILLA & 1 Blue Gemstone 12333,22,2039,1,717,1 -//---------------------------------------------------------------------------------------------------------------------------- +//---------------------------------------------- + +//============================================== diff --git a/db/refine_db.txt b/db/refine_db.txt index ee234dc6a..1626fa6d8 100644 --- a/db/refine_db.txt +++ b/db/refine_db.txt @@ -3,8 +3,8 @@ // Armor defense is done in percentage (ie 70 = .7 def) // Weapons are whole numbers (ie 3 = 3 atk) - 100, 200, 4, 100,100,100,100, 60, 40, 40, 20, 20, 10, // Armor - 2, 3, 7, 100,100,100,100,100,100,100, 60, 40, 20, // Lv.1 Weapons - 3, 5, 6, 100,100,100,100,100,100, 60, 40, 20, 20, // Lv.2 Weapons - 5, 8, 5, 100,100,100,100,100, 60, 50, 20, 20, 20, // Lv.3 Weapons - 7, 13, 4, 100,100,100,100, 60, 40, 40, 20, 20, 10, // Lv.4 Weapons + 100, 200, 4, 100,100,100,100, 60, 40, 40, 20, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, // Armor + 2, 3, 7, 100,100,100,100,100,100,100, 60, 40, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, // Lv.1 Weapons + 3, 5, 6, 100,100,100,100,100,100, 60, 40, 20, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, // Lv.2 Weapons + 5, 8, 5, 100,100,100,100,100, 60, 50, 20, 20, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, // Lv.3 Weapons + 7, 13, 4, 100,100,100,100, 60, 40, 40, 20, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, // Lv.4 Weapons diff --git a/db/skill_cast_db.txt b/db/skill_cast_db.txt index f21ee043f..d2fe73298 100644 --- a/db/skill_cast_db.txt +++ b/db/skill_cast_db.txt @@ -1051,6 +1051,43 @@ 1019,2000,2000,1000,0,0,1800000,0 //========================================== +//===== Rune Knight ======================== +//-- RK_ENCHANTBLADE +2001,1000,0,0,0,0,300000,0 +//-- RK_SONICWAVE +2002,0,0,1000,2000,0,0,0 +//-- RK_DEATHBOUND +2003,0,0,2000,3000,0,2000,0 +//-- RK_HUNDREDSPEAR +2004,1000,0,500,0,0,0,0 +//-- RK_WINDCUTTER - Duration1: Fear status duration +2005,0,0,0,2000,0,15000,0 +//-- RK_IGNITIONBREAK +2006,1000,0,0,2000,0,0,0 + +//-- RK_DRAGONBREATH - Duration1: Burning status duration +2008,0:0:0:1000:1000:1000:1500:1500:2000:2000,500,2000,0,0,10000,0 +//-- RK_DRAGONHOWLING - Duration1: FIT/FLEE Reduction duration; Duration2: Fear status duration +2009,0,0,0,60000,0,15000,2000 + +//-- RK_MILLENNIUMSHIELD +2011,0,0,1000,0,0,30000,0 +//-- RK_CRUSHSTRIKE +2012,0,1000,0,60000,0,120000,0 +//-- RK_REFRESH +2013,0,1000,0,0,0,30000,0 +//-- RK_GIANTGROWTH +2014,0,1000,0,0,0,300000,0 +//-- RK_STONEHARDSKIN +2015,0,2000,0,0,0,300000,0 +//-- RK_VITALITYACTIVATION +2016,0,0,0,0,0,300000,0 +//-- RK_STORMBLAST +2017,2000,1000,0,0,0,0,0 +//-- RK_FIGHTINGSPIRIT +2018,0,0,0,0,0,300000,0 +//-- RK_ABUNDANCE +2019,0,0,0,0,0,300000,0 //===== Archbishop ========================= //-- AB_JUDEX diff --git a/db/skill_db.txt b/db/skill_db.txt index 0af1014d2..e67ab2ba6 100644 --- a/db/skill_db.txt +++ b/db/skill_db.txt @@ -664,26 +664,26 @@ 1019,9,6,1,4,0x1,0,1,1,yes,0,0x1,0,magic,0, SA_ELEMENTWIND,Elemental Change Wind // Third Job Skills -2001,-1,6,16,0,0x1,0,5,1,yes,0,0,0,none,0, RK_ENCHANTBLADE,RK_ENCHANTBLADE -2002,7:8:9:10:11,6,1,0,0x04,0,5,1,yes,0,0,0,weapon,0, RK_SONICWAVE,RK_SONICWAVE -2003,0,6,4,0,0x1,0,10,1,yes,0,0,0,weapon,0, RK_DEATHBOUND,RK_DEATHBOUND -2004,-1,8,1,0,0,0,10,5,yes,0,0,0,weapon,0, RK_HUNDREDSPEAR,RK_HUNDREDSPEAR -2005,-1,6,2,4,0x6,0,5,1,yes,0,0,0,weapon,3, RK_WINDCUTTER,RK_WINDCUTTER -2006,0,6,4,0,0x6,0,5,1,no,0,0,0,weapon,0, RK_IGNITIONBREAK,RK_IGNITIONBREAK +2001,-1,6,4,0,0x1,0,5,1,yes,0,0,0,none,0, RK_ENCHANTBLADE,RK_ENCHANTBLADE +2002,7:8:9:10:11,6,1,-1,0,0,5,1,yes,0,0,0,weapon,0, RK_SONICWAVE,RK_SONICWAVE +2003,0,0,4,0,0x1,0,10,1,no,0,0,0,weapon,3, RK_DEATHBOUND,RK_DEATHBOUND +2004,-1,8,1,-1,0,0,10,5,no,0,0,0,weapon,0, RK_HUNDREDSPEAR,RK_HUNDREDSPEAR +2005,-1,6,2,4,0x2,2,5,1,no,0,0,0,weapon,3, RK_WINDCUTTER,RK_WINDCUTTER +2006,0,6,4,-1,0x2,5,5,1,no,0,0,0,weapon,0, RK_IGNITIONBREAK,RK_IGNITIONBREAK 2007,0,0,0,0,0,0,5,0,no,0,0,0,none,0, RK_DRAGONTRAINING,RK_DRAGONTRAINING -2008,9,6,2,3,0x6,0,10,1,no,0,0,0,weapon,0, RK_DRAGONBREATH,RK_DRAGONBREATH +2008,9,6,2,3,0xC0,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,misc,0, RK_DRAGONBREATH,RK_DRAGONBREATH 2009,0,6,4,0,0x1,0,5,1,yes,0,0,0,weapon,0, RK_DRAGONHOWLING,RK_DRAGONHOWLING 2010,0,0,0,0,0,0,10,0,no,0,0,0,none,0, RK_RUNEMASTERY,RK_RUNEMASTERY 2011,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_MILLENNIUMSHIELD,RK_MILLENNIUMSHIELD -2012,-1,6,1,0,0,0,1,1,no,0,0,0,weapon,0, RK_CRUSHSTRIKE,RK_CRUSHSTRIKE +2012,-1,6,4 ,-1,0,0,1,1,no,0,0,0,weapon,0, RK_CRUSHSTRIKE,RK_CRUSHSTRIKE 2013,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_REFRESH,RK_REFRESH 2014,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_GIANTGROWTH,RK_GIANTGROWTH 2015,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_STONEHARDSKIN,RK_STONEHARDSKIN 2016,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_VITALITYACTIVATION,RK_VITALITYACTIVATION -2017,0,6,4,0,0,0,1,1,no,0,0,0,weapon,0, RK_STORMBLAST,RK_STORMBLAST -2018,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_FIGHTINGSPIRIT,RK_FIGHTINGSPIRIT +2017,0,6,4,3,0x2,3,1,1,no,0,0,0,weapon,7, RK_STORMBLAST,RK_STORMBLAST +2018,0,0,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_FIGHTINGSPIRIT,RK_FIGHTINGSPIRIT 2019,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_ABUNDANCE,RK_ABUNDANCE -2020,5:6:7:8:9,6,16,0,0x6,0,5,1,yes,0,0,0,weapon,0, RK_PHANTOMTHRUST,RK_PHANTOMTHRUST +2020,5:6:7:8:9,6,16,-1,0,0,5,1,no,0,0,0,misc,0, RK_PHANTOMTHRUST,RK_PHANTOMTHRUST 2021,9,6,1,0,0x1,0,5,1,yes,0,0,0,none,0, GC_VENOMIMPRESS,GC_VENOMIMPRESS 2022,3,8,1,0,0,0,5,7,no,0,0,0,weapon,0, GC_CROSSIMPACT,GC_CROSSIMPACT 2023,3:4:5:6:7,6,1,0,0,0,5,1,no,0,0,0,weapon,0, GC_DARKILLUSION,GC_DARKILLUSION @@ -701,7 +701,7 @@ 2035,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, GC_HALLUCINATIONWALK,GC_HALLUCINATIONWALK 2036,0,6,4,0,0,0,5,1,no,0,0,0,weapon,0, GC_ROLLINGCUTTER,GC_ROLLINGCUTTER 2037,7,8,1,0,0,0,5,1,no,0,0,0,weapon,0, GC_CROSSRIPPERSLASHER,GC_CROSSRIPPERSLASHER -2038,11,8,1,6,0x2,3,5,-3,yes,0,0,0,magic,0, AB_JUDEX,Judex +2038,11,8,1,6,0x2,2,5,-3,yes,0,0,0,magic,0, AB_JUDEX,Judex 2039,0,6,4,0,0x1,0,1,1,yes,0,0,0,magic,0, AB_ANCILLA,Ancilla 2040,11,8,1,6,0,0,10,-10,yes,0,0,0,magic,0, AB_ADORAMUS,Adoramus 2041,0,6,4,0,0x3,3:7:15,3,1,yes,0,0,0,magic,0, AB_CLEMENTIA,Clementia @@ -716,7 +716,7 @@ 2050,11,6,16,6,0x1,0,1,1,yes,0,0,0,magic,0, AB_RENOVATIO,Renovatio 2051,11,6,16,6,0x1,0,5,1,yes,0,0,0,magic,0, AB_HIGHNESSHEAL,High Heal 2052,11,6,1,0,0x1,0,5,1,yes,0,0x600,0,magic,0, AB_CLEARANCE,Clearance -2053,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0, AB_EXPIATIO,Exipatio +2053,11,6,16,0,0x1,0,5,0,yes,0,0x1000,0,none,0, AB_EXPIATIO,Exipatio 2054,11,6,4,0,0x1,0,10,1,yes,0,0,0,none,0, AB_DUPLELIGHT,Duple Light 2055,11,6,1,0,0,0,10,1,yes,0,0,0,weapon,0, AB_DUPLELIGHT_MELEE,Duple Light (Melee) 2056,11,6,1,0,0,0,10,1,yes,0,0,0,magic,0, AB_DUPLELIGHT_MAGIC,Duple Light (Magic) diff --git a/db/skill_require_db.txt b/db/skill_require_db.txt index 635f856e8..7903b8fd8 100644 --- a/db/skill_require_db.txt +++ b/db/skill_require_db.txt @@ -19,6 +19,9 @@ // explosionspirits = Requires Fury skill activated // cartboost = Requires a Pushcart and Cart Boost skill activated // shield = Requires a 0,shield equipped +// dragon = requires Rune Knight dragon mount. +// warg = requires Sniper Warg. +// madogear = requires Mechanic Mado Gear. 5,0,0,8:8:8:8:8:15:15:15:15:15,0,0,0,0:1:2:3:4:5:6:7:8:9:10:12:13:14:15:16:17:18:19:20:21:22,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SM_BASH#バッシュ# 6,0,0,4:5:6:7:8:9:10:11:12:13,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SM_PROVOKE#プロボック# @@ -462,6 +465,7 @@ 2006,0,0,35:40:45:50:55,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_IGNITIONBREAK 2008,0,0,5:10:15:20:25:30:35:40:45:50,0,0,0,99,0,0,dragon,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_DRAGONBREATH 2009,0,0,5:10:15:20:25:30:35:40:45:50,0,0,0,99,0,0,dragon,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_DRAGONHOWLING +2012,0,0,0,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_CRUSHSTRIKE 2020,0,0,15:18:21:24:27,0,0,0,4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_PHANTOMTHRUST 2021,0,0,12:16:20:24:28,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_VENOMIMPRESS @@ -484,11 +488,11 @@ 2038,0,0,30:33:36:39:42,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_JUDEX 2039,0,0,30,0,30,0,99,0,0,none,0,717,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_ANCILLA 2040,0,0,22:28:34:40:46:52:58:64:70:76,0,0,0,99,0,0,none,0,717,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_ADORAMUS -2041,0,0,200:220:240,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CLEMENTIA -2042,0,0,145:160:175,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CANTO -2043,0,0,130:145:160,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CHEAL +2041,0,0,280:320:360,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CLEMENTIA +2042,0,0,200:220:240,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CANTO +2043,0,0,200:220:240,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CHEAL 2044,0,0,300,0,0,0,99,0,0,none,0,12333,1,523,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_EPICLESIS -2045,0,0,60:70:80:90:100:110:120:130:140:150,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_PRAEFATIO +2045,0,0,90:100:110:120:130:140:150:160:170:180,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_PRAEFATIO 2046,0,0,35:38:41:44:47:50:53:56:59:62,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_ORATIO 2047,0,0,50:60:70:80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_LAUDAAGNUS 2048,0,0,50:60:70:80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_LAUDARAMUS @@ -528,10 +532,10 @@ 2238,0,0,35,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_ELECTRICSHOCKER 2239,0,0,20,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_CLUSTERBOMB 2240,0,0,5,0,0,0,99,0,0,none,0,6124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGMASTERY -2241,0,0,20,0,0,0,99,0,0,wolf,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGRIDER -2242,0,0,40,0,0,0,99,0,0,wolf,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGDASH -2243,0,0,30:32:34:36:38,0,0,0,99,0,0,wolf,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGSTRIKE -2244,0,0,40:44:46:48:50,0,0,0,99,0,0,wolf,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGBITE +2241,0,0,20,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGRIDER +2242,0,0,40,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGDASH +2243,0,0,30:32:34:36:38,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGSTRIKE +2244,0,0,40:44:46:48:50,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGBITE 2246,0,0,10,0,0,0,99,0,0,wolf,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_SENSITIVEKEEN 2247,0,0,40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_CAMOUFLAGE 2249,0,0,10,0,0,0,99,0,0,none,0,7940,1,990,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_MAGENTATRAP @@ -541,25 +545,25 @@ 2253,0,0,10,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_FIRINGTRAP 2254,0,0,10,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_ICEBOUNDTRAP -2256,0,0,3:6:9:12:15,0,0,0,99,0,0,gear,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_BOOSTKNUCKLE -2257,0,0,50,0,0,0,99,0,0,gear,0,1549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_PILEBUNKER -2258,0,0,2,0,0,0,99,0,0,gear,0,6145,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_VULCANARM -2259,0,0,20,0,0,0,99,0,0,gear,0,2139,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_FLAMELAUNCHER -2260,0,0,20,0,0,0,99,0,0,gear,0,6147,1,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_COLDSLOWER -2261,0,0,30:45:60,0,0,0,99,0,0,gear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ARMSCANNON -2262,0,0,20:40:60,0,0,0,99,0,0,gear,0,2800,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ACCELERATION -2263,0,0,25,0,0,0,99,0,0,gear,0,2801,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_HOVERING -2264,0,0,20,0,0,0,99,0,0,gear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_F_SIDESLIDE -2265,0,0,20,0,0,0,99,0,0,gear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_B_SIDESLIDE -2267,0,0,200,0,0,0,99,0,0,gear,0,2802,0,6146,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_SELFDESTRUCTION -2268,0,0,100,0,0,0,99,0,0,gear,0,2803,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_SHAPESHIFT -2269,0,0,20,0,0,0,99,0,0,gear,0,2804,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_EMERGENCYCOOL -2270,0,0,45,0,0,0,99,0,0,gear,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_INFRAREDSCAN -2271,0,0,30,0,0,0,99,0,0,gear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ANALYZE -2272,0,0,90,0,0,0,99,0,0,gear,0,2805,0,6146,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_MAGNETICFIELD -2273,0,0,90,0,0,0,99,0,0,gear,0,2806,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_NEUTRALBARRIER -2274,0,0,100:150:200,0,0,0,99,0,0,gear,0,2808,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_STEALTHFIELD -2275,0,0,25:30:35:40:45,0,0,0,99,0,0,gear,0,2807,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_REPAIR +2256,0,0,3:6:9:12:15,0,0,0,99,0,0,madogear,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_BOOSTKNUCKLE +2257,0,0,50,0,0,0,99,0,0,madogear,0,1549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_PILEBUNKER +2258,0,0,2,0,0,0,99,0,0,madogear,0,6145,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_VULCANARM +2259,0,0,20,0,0,0,99,0,0,madogear,0,2139,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_FLAMELAUNCHER +2260,0,0,20,0,0,0,99,0,0,madogear,0,6147,1,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_COLDSLOWER +2261,0,0,30:45:60,0,0,0,99,0,0,madogear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ARMSCANNON +2262,0,0,20:40:60,0,0,0,99,0,0,madogear,0,2800,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ACCELERATION +2263,0,0,25,0,0,0,99,0,0,madogear,0,2801,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_HOVERING +2264,0,0,20,0,0,0,99,0,0,madogear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_F_SIDESLIDE +2265,0,0,20,0,0,0,99,0,0,madogear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_B_SIDESLIDE +2267,0,0,200,0,0,0,99,0,0,madogear,0,2802,0,6146,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_SELFDESTRUCTION +2268,0,0,100,0,0,0,99,0,0,madogear,0,2803,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_SHAPESHIFT +2269,0,0,20,0,0,0,99,0,0,madogear,0,2804,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_EMERGENCYCOOL +2270,0,0,45,0,0,0,99,0,0,madogear,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_INFRAREDSCAN +2271,0,0,30,0,0,0,99,0,0,madogear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ANALYZE +2272,0,0,90,0,0,0,99,0,0,madogear,0,2805,0,6146,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_MAGNETICFIELD +2273,0,0,90,0,0,0,99,0,0,madogear,0,2806,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_NEUTRALBARRIER +2274,0,0,100:150:200,0,0,0,99,0,0,madogear,0,2808,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_STEALTHFIELD +2275,0,0,25:30:35:40:45,0,0,0,99,0,0,madogear,0,2807,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_REPAIR 2278,0,0,20:22:24:26:28,0,0,0,6:7:,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_AXEBOOMERANG 2279,0,0,10:12:14:16:18,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_POWERSWING 2280,20:40:60:80:100,0,18:20:22:24:26,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_AXETORNADO diff --git a/doc/3rd_job_notes.txt b/doc/3rd_job_notes.txt index 64b737eba..e8a79e238 100644 --- a/doc/3rd_job_notes.txt +++ b/doc/3rd_job_notes.txt @@ -42,7 +42,6 @@ GC_CROSSRIPPERSLASHER == Archbishop ===================================================================================== AB_JUDEX Working - Damage is unnaturally high-- issue with pre-RE MATK formulae? AB_ANCILLA Working AB_ADORAMUS @@ -51,37 +50,46 @@ AB_ADORAMUS Ugly hack to cancel out using gemstone in skill_get_requirement(). Should SC_BLIND/SC_ADORAMUS be removed by speed bosting effects? Should effects cancel simultaneously? - Damage is unnaturally high-- issue with pre-RE MATK formulae? AB_CLEMENTIA Working + Applied kRO update (30/08/2011) + SP cost has changed (280/320/360). + Based on your job level, it can add an additional 1 ~ 5 Str/Int/Dex. Bug: Skill name and casting sprite animation should display only on caster AB_CANTO Working + Applied kRO update (30/08/2011) + SP cost is changed (200/220/240). + Based on your job level, it can add an additional 1 ~ 5 Agi. Bug: Skill name and casting sprite animation should display only on caster AB_CHEAL Working Bug: Skill name and casting sprite animation should display only on caster AB_EPICLESIS Working - Need to fix SC effect on moving out of unit. - What skills should have an inate immuity to this skill? + Need to fix SC effect on moving in/out of unit. + What status effects should cause immunity to this skill? has skill_check_condition_castbegin case, check to see if it can be improved. AB_PRAEFATIO Working + Applied kRO update (30/08/2011) + SP cost is changed (80 + SkillLv * 10). Bug: Skill name and casting sprite animation should display only on caster AB_ORATIO Working - Ugly hack to display/remove SI_ on mobs. + Ugly hack to display/remove SI_ORATIO on mobs. AB_LAUDAAGNUS Working Should +4+Skilllv luk apply to only those not cured from a status effect? Check: Skill name and casting sprite animation should display only on caster? - Should this skill fail if you are the only person in/online in a party? + Applied kRO update (21/09/2011) + * Now works when casting player is not in a party. AB_LAUDARAMUS Working Should +4+Skilllv luk apply to only those not cured from a status effect? Check: Skill name and casting sprite animation should display only on caster? - Should this skill fail if you are the only person in/online in a party? + Applied kRO update (21/09/2011) + * Now works when casting player is not in a party. AB_EUCHARISTICA Working AB_RENOVATIO @@ -92,11 +100,14 @@ AB_CLEARANCE Working Check: Should Soul Linkers be inately immune? Check list a second time to see what was missed. + Applied kRO update (30/08/2011) + * Now also removes the Critical Wounds status effect. AB_EXPIATIO Working + Applied kRO update (30/08/2011) + * Changed from self targeted to self and other players. AB_DUPLELIGHT Working - Check success rate, Is skill_addtimerskill the best way to implement the additional attacks? AB_DUPLELIGHT_MELEE Working diff --git a/npc/jobs/3-1/archbishop.txt b/npc/jobs/3-1/archbishop.txt index a01e06b69..976a66dfa 100644 --- a/npc/jobs/3-1/archbishop.txt +++ b/npc/jobs/3-1/archbishop.txt @@ -1,6 +1,23 @@ +//===== eAthena Script ======================================= +//= Arch Bishop Job Quest +//===== By: ================================================== +//= L0ne_W0lf +//===== Current Version: ===================================== +//= 1.1 +//===== Compatible With: ===================================== +//= eAthena SVN +//===== Description: ========================================= +//= [Aegis Conversion] +//= Job change script fr Third class (Arch Bishop) +//= Does not entirely support changing to Baby Third Class. +//===== Additional Comments: ================================= +//= 1.0 First version. +//= 1.1 Fixed class checks for arch bishops. +//============================================================ + prt_church,103,88,3 script Praying Minister#arch 60,{ if (BaseJob != Job_Priest) { - if (BaseJob == job_Archbishop) { + if (Class == Job_Archbishop || Class == Job_Archbishop_H || Class == Job_Baby_Bishop) { mes "[Praying Minister]"; mes "Ah! An Archbishop."; mes "You have reached the state of light."; @@ -819,7 +836,7 @@ job3_arch01,29,34,3 script Valkyrie#arch 403,{ end; } else { - if (BaseJob != Job_Archbishop) { + if (Class != Job_Archbishop || Class != Job_Archbishop_H || Class != Job_Baby_Bishop) { if (job_arch < 5) { warp "odin_tem02",282,263; end; diff --git a/src/map/battle.c b/src/map/battle.c index dfbda4ded..711310442 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -664,11 +664,6 @@ int battle_calc_gvg_damage(struct block_list *src,struct block_list *bl,int dama case NJ_ZENYNAGE: break; default: - /* Uncomment if you want god-mode Emperiums at 100 defense. [Kisuka] - if (md && md->guardian_data) { - damage -= damage * (md->guardian_data->castle->defense/100) * battle_config.castle_defense_rate/100; - } - */ if (flag & BF_SKILL) { //Skills get a different reduction than non-skills. [Skotlex] if (flag&BF_WEAPON) damage = damage * battle_config.gvg_weapon_damage_rate/100; @@ -1194,7 +1189,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo if (flag.cri) { wd.type = 0x0a; - flag.idef = flag.idef2 = flag.hit = 1; + flag.hit = 1; } else { //Check for Perfect Hit if(sd && sd->perfect_hit > 0 && rand()%100 < sd->perfect_hit) flag.hit = 1; @@ -1775,7 +1770,8 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo skill_num != ASC_BREAKER && skill_num != ASC_METEORASSAULT && skill_num != AS_SPLASHER && - skill_num != AS_VENOMKNIFE) + skill_num != AS_VENOMKNIFE && + skill_num != AS_GRIMTOOTH) // RE disabled Grimtooth carrying EDP. ATK_ADDRATE(sc->data[SC_EDP]->val3); } @@ -1845,7 +1841,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo if (!flag.idef || !flag.idef2) { //Defense reduction short vit_def; - signed char def1 = status_get_def(target); //Don't use tstatus->def1 due to skill timer reductions. + signed short def1 = status_get_def(target); //Don't use tstatus->def1 due to skill timer reductions. short def2 = (short)tstatus->def2; if( sc && sc->data[SC_EXPIATIO] ) @@ -2535,7 +2531,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list skillratio = skillratio * status_get_lv(src) / 100; break; case AB_ADORAMUS: - skillratio += 400 + 100 * skill_lv; //Possible RE-Formula + skillratio += 100 * (skill_lv + 5); if( status_get_lv(src) >= 100 ) skillratio = skillratio * status_get_lv(src) / 100; break; @@ -2567,7 +2563,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list } if(!flag.imdef){ - char mdef = tstatus->mdef; + short mdef = tstatus->mdef; int mdef2= tstatus->mdef2; if(sd) { i = sd->ignore_mdef[is_boss(target)?RC_BOSS:RC_NONBOSS]; @@ -3194,11 +3190,11 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t damage = wd.damage + wd.damage2; if( damage > 0 && src != target ) { - if(sc && sc->data[SC_DUPLELIGHT]) { + if( sc && sc->data[SC_DUPLELIGHT] ) { int skilllv = sc->data[SC_DUPLELIGHT]->val1; - if(rand()%100 < sc->data[SC_DUPLELIGHT]->val2) + if( rand()%100 < sc->data[SC_DUPLELIGHT]->val2 ) skill_addtimerskill(src,tick+status_get_adelay(src) / 2,target->id,0,0,AB_DUPLELIGHT_MELEE,skilllv,BF_WEAPON,flag); - else if(rand()%100 < sc->data[SC_DUPLELIGHT]->val3) + else if( rand()%100 < sc->data[SC_DUPLELIGHT]->val3 ) skill_addtimerskill(src,tick+status_get_adelay(src) / 2,target->id,0,0,AB_DUPLELIGHT_MAGIC,skilllv,BF_MAGIC,flag); } @@ -3808,7 +3804,7 @@ static const struct _battle_data { { "max_baby_parameter", &battle_config.max_baby_parameter, 80, 10, 10000, }, { "max_third_parameter", &battle_config.max_third_parameter, 120, 10, 10000, }, { "max_baby_third_parameter", &battle_config.max_baby_third_parameter, 108, 10, 10000, }, - { "max_def", &battle_config.max_def, 9999, 0, INT_MAX, }, + { "max_def", &battle_config.max_def, SHRT_MAX, 0, INT_MAX, }, { "over_def_bonus", &battle_config.over_def_bonus, 0, 0, 1000, }, { "skill_log", &battle_config.skill_log, BL_NUL, BL_NUL, BL_ALL, }, { "battle_log", &battle_config.battle_log, 0, 0, 1, }, @@ -4108,8 +4104,8 @@ void battle_adjust_conf() battle_config.max_walk_speed = 100*DEFAULT_WALK_SPEED/battle_config.max_walk_speed; battle_config.max_cart_weight *= 10; - if(battle_config.max_def > 9999 && !battle_config.weapon_defense_type) // added by [Skotlex] - battle_config.max_def = 9999; + if(battle_config.max_def > SHRT_MAX && !battle_config.weapon_defense_type) // added by [Skotlex] + battle_config.max_def = SHRT_MAX; if(battle_config.min_hitrate > battle_config.max_hitrate) battle_config.min_hitrate = battle_config.max_hitrate; diff --git a/src/map/clif.c b/src/map/clif.c index 3278a80cd..ef48e6d60 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -2487,26 +2487,22 @@ int clif_updatestatus(struct map_session_data *sd,int type) WFIFOL(fd,4)=sd->battle_status.amotion; break; case SP_ATK1: - WFIFOL(fd,4)=sd->battle_status.batk +sd->battle_status.rhw.atk +sd->battle_status.lhw.atk; + WFIFOL(fd,4)=sd->battle_status.batk; break; case SP_DEF1: - WFIFOL(fd,4)=sd->battle_status.def; + WFIFOL(fd,4)=sd->battle_status.def2; break; case SP_MDEF1: - WFIFOL(fd,4)=sd->battle_status.mdef; + WFIFOL(fd,4)= sd->battle_status.mdef2; break; case SP_ATK2: - WFIFOL(fd,4)=sd->battle_status.rhw.atk2 + sd->battle_status.lhw.atk2; + WFIFOL(fd,4)=sd->battle_status.rhw.atk + sd->battle_status.rhw.atk2 + sd->battle_status.equipment_atk; break; case SP_DEF2: - WFIFOL(fd,4)=sd->battle_status.def2; + WFIFOL(fd,4)=sd->battle_status.def; break; case SP_MDEF2: - //negative check (in case you have something like Berserk active) - len = sd->battle_status.mdef2 - (sd->battle_status.vit>>1); - if (len < 0) len = 0; - WFIFOL(fd,4)= len; - len = 8; + WFIFOL(fd,4)=sd->battle_status.mdef; break; case SP_CRITICAL: WFIFOL(fd,4)=sd->battle_status.cri/10; @@ -2843,16 +2839,13 @@ int clif_initialstatus(struct map_session_data *sd) WBUFB(buf,15)=pc_need_status_point(sd,SP_LUK,1); WBUFW(buf,16) = sd->battle_status.batk; - WBUFW(buf,18) = sd->battle_status.rhw.atk2 + sd->battle_status.lhw.atk2; //atk bonus + WBUFW(buf,18) = sd->battle_status.rhw.atk + sd->battle_status.lhw.atk2 + sd->battle_status.equipment_atk; //atk bonus WBUFW(buf,20) = sd->weapon_matk + sd->battle_status.rhw.atk2 + sd->equipment_matk; - WBUFW(buf,22) = sd->battle_status.matk_min; - WBUFW(buf,24) = sd->battle_status.def; // def - WBUFW(buf,26) = sd->battle_status.def2; - WBUFW(buf,28) = sd->battle_status.mdef; // mdef - fd = sd->battle_status.mdef2 - (sd->battle_status.vit>>1); - if (fd < 0) fd = 0; //Negative check for Frenzy'ed characters. - WBUFW(buf,30) = fd; - fd = sd->fd; + WBUFW(buf,22) = sd->battle_status.status_matk; + WBUFW(buf,24) = sd->battle_status.def2; + WBUFW(buf,26) = sd->battle_status.def; // def + WBUFW(buf,28) = sd->battle_status.mdef2; + WBUFW(buf,30) = sd->battle_status.mdef; // mdef WBUFW(buf,32) = sd->battle_status.hit; WBUFW(buf,34) = sd->battle_status.flee; WBUFW(buf,36) = sd->battle_status.flee2/10; @@ -2872,8 +2865,14 @@ int clif_initialstatus(struct map_session_data *sd) clif_updatestatus(sd,SP_ATTACKRANGE); clif_updatestatus(sd,SP_ASPD); + clif_updatestatus(sd,SP_ATK1); + clif_updatestatus(sd,SP_ATK2); clif_updatestatus(sd,SP_MATK1); clif_updatestatus(sd,SP_MATK2); + clif_updatestatus(sd,SP_DEF1); + clif_updatestatus(sd,SP_DEF2); + clif_updatestatus(sd,SP_MDEF1); + clif_updatestatus(sd,SP_MDEF2); return 0; } diff --git a/src/map/pc.c b/src/map/pc.c index cd00e0ffc..1869372ae 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1851,14 +1851,14 @@ int pc_bonus(struct map_session_data *sd,int type,int val) break; case SP_BASE_ATK: if(sd->state.lr_flag != 2) { - bonus = status->batk + val; - status->batk = cap_value(bonus, 0, USHRT_MAX); + bonus = status->equipment_atk + val; + status->equipment_atk = cap_value(bonus, 0, USHRT_MAX); } break; case SP_DEF1: if(sd->state.lr_flag != 2) { bonus = status->def + val; - status->def = cap_value(bonus, CHAR_MIN, CHAR_MAX); + status->def = cap_value(bonus, SHRT_MIN, SHRT_MAX); } break; case SP_DEF2: @@ -1870,7 +1870,7 @@ int pc_bonus(struct map_session_data *sd,int type,int val) case SP_MDEF1: if(sd->state.lr_flag != 2) { bonus = status->mdef + val; - status->mdef = cap_value(bonus, CHAR_MIN, CHAR_MAX); + status->mdef = cap_value(bonus, SHRT_MIN, SHRT_MAX); } break; case SP_MDEF2: @@ -3652,6 +3652,7 @@ int pc_isUseitem(struct map_session_data *sd,int n) //Not consumable item if( item->type != IT_HEALING && item->type != IT_USABLE && item->type != IT_CASH ) return 0; + // This contradicts official behavior. Items with no scripts should be consumed regardless. [L0ne_W0lf] if( !item->script ) //if it has no script, you can't really consume it! return 0; diff --git a/src/map/skill.c b/src/map/skill.c index 9aac438d4..3f386bbb7 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -274,6 +274,7 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, int skill struct map_session_data *tsd = map_id2sd(target->id); struct status_change* sc; struct status_data *status; + bool FullCalc = false; status = status_get_status_data(src); @@ -291,13 +292,14 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, int skill hp = (skill_lv>6)?666:skill_lv*100; break; default: + FullCalc = true; // Enables full calculation, which adds heal variance. if (skill_lv >= battle_config.max_heal_lv) return battle_config.max_heal; - + // iRO Wiki states as of 2011/08/22: // heal = ( [(Base Level + INT) / 5] ?30 ) ?(Heal Level / 10) ?(1 + (Modifiers / 100)) + MATK // fixme: Does not match up with iRO's heal, level 1 or level 10 - // with 219 mak + HP_MEDITATO, level 1 = 361; level 10 = 1839 + // with 219 matk + HP_MEDITATO (10) (no gear), level 1 = 361; level 10 = 1839 if( skill_id == AB_HIGHNESSHEAL ) { skill = pc_checkskill(sd,AL_HEAL); if( skill < 0 ) @@ -314,47 +316,50 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, int skill mod += skill * 2; else if( src->type == BL_HOM && (skill = merc_hom_checkskill(((TBL_HOM*)src), HLIF_BRAIN)) > 0 ) mod += skill * 2; - if( sd && (skill = pc_skillheal_bonus(sd, skill_id)) ) - mod += skill; - if( tsd && (skill = pc_skillheal2_bonus(tsd, skill_id)) ) - mod += skill; + break; + } - sc = status_get_sc(target); - if( sc && sc->count ) - { - if( sc->data[SC_CRITICALWOUND] && heal ) // Critical Wound has no effect on offensive heal. [Inkfish] - mod -= sc->data[SC_CRITICALWOUND]->val2; - if( sc->data[SC_INCHEALRATE] && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN ) - mod += sc->data[SC_INCHEALRATE]->val1; // Only affects Heal, Sanctuary and PotionPitcher.(like bHealPower) [Inkfish] - } + // Increment skill and status based modifiers + if( sd && (skill = pc_skillheal_bonus(sd, skill_id)) ) + mod += skill; + if( tsd && (skill = pc_skillheal2_bonus(tsd, skill_id)) ) + mod += skill; + + sc = status_get_sc(target); + if( sc && sc->count ) + { + if( sc->data[SC_CRITICALWOUND] && heal ) // Critical Wound has no effect on offensive heal. [Inkfish] + mod -= sc->data[SC_CRITICALWOUND]->val2; + if( sc->data[SC_INCHEALRATE] && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN ) + mod += sc->data[SC_INCHEALRATE]->val1; // Only affects Heal, Sanctuary and PotionPitcher.(like bHealPower) [Inkfish] +// if( sc->data[SC_VITALITYACTIVATION] && heal && skill_id != BA_APPLEIDUN ) +// mod += sc->data[SC_VITALITYACTIVATION]->val2; + } - // Adjust the HP recovered rate by adding all of the modifiers together. - hp = hp * mod / 100; + // Adjust the HP recovered rate by adding all of the modifiers together. + hp = hp * mod / 100; - // Get weapon level and weapon matk for variance calculations if it's a player. - // Mobs have their own variance, we've assumed: - // Weapon Level = 1 - // Weapom_Matk = ? - // Need more information before that can be implemented. - if( sd ) - { - int matk = 0; - int smatk = sd->battle_status.status_matk; - int ematk = sd->equipment_matk; - int wmatk = 0; - int wlv = 1; - int index = sd->equip_index[EQI_HAND_R]; - - if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON ) - wlv = sd->inventory_data[index]->wlv; + // Get weapon level and weapon matk for variance calculations if it's a player. + // Mobs have their own variance, we've assumed: + // Weapon Level = 1 + // Weapom_Matk = ? + // Need more information before that can be implemented. + if( sd && FullCalc) + { + int matk = 0; + int smatk = sd->battle_status.status_matk; + int ematk = sd->equipment_matk; + int wmatk = 0; + int wlv = 1; + int index = sd->equip_index[EQI_HAND_R]; - wmatk = (int)( sd->weapon_matk + ( (float)( ( rand() % 20 ) - 10 ) / 100 * wlv * sd->weapon_matk ) + ( sd->battle_status.rhw.atk2 ) ); - matk = ( smatk + wmatk + ematk ); + if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON ) + wlv = sd->inventory_data[index]->wlv; - hp += matk; - } + wmatk = (int)( sd->weapon_matk + ( (float)( ( rand() % 20 ) - 10 ) / 100 * wlv * sd->weapon_matk ) + ( sd->battle_status.rhw.atk2 ) ); + matk = ( smatk + wmatk + ematk ); - break; + hp += matk; } // mercenaries only take half-effectiveness from heals. @@ -5758,7 +5763,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case AB_CLEMENTIA: if( sd ) lv = pc_checkskill(sd,AL_BLESSING); break; case AB_CANTO: if( sd ) lv = pc_checkskill(sd,AL_INCAGI); break; } - clif_skill_nodamage(bl, bl, skillid, skilllv, sc_start(bl,type,100,lv,skill_get_time(skillid,skilllv))); + clif_skill_nodamage(bl, bl, skillid, skilllv, + sc_start4(bl,type,100,lv,0,sd?sd->status.job_level:0,0,skill_get_time(skillid,skilllv))); } else if( sd ) party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skillid, skilllv), src, skillid, skilllv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id); @@ -5784,8 +5790,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in { if( dstsd && dstsd->special_state.no_magic_damage ) break; - clif_skill_nodamage(bl,bl,skillid,skilllv,1); - clif_skill_nodamage(bl, bl, skillid, skilllv, sc_start4(bl, type, 100, skilllv, 0, 0, 1, skill_get_time(skillid, skilllv))); + clif_skill_nodamage(bl, bl, skillid, skilllv, + sc_start4(bl, type, 100, skilllv, 0, 0, 1, skill_get_time(skillid, skilllv))); } else party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skillid, skilllv), src, skillid, skilllv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id); @@ -5793,7 +5799,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case AB_ORATIO: if (flag&1) sc_start(bl, type, 40+skilllv*5, skilllv, skill_get_time(skillid, skilllv)); - else { + else + { clif_skill_nodamage(src, bl, skillid, skilllv, 1); map_foreachinrange(skill_area_sub, bl, skill_get_splash(skillid, skilllv), BL_CHAR, @@ -5803,7 +5810,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in break; case AB_LAUDAAGNUS: case AB_LAUDARAMUS: - if( flag&1 || sd == NULL ) + if( (flag&1) || sd == NULL || sd->status.party_id == 0 ) { if( tsc && (rand()%100 < 30+5*skilllv) ) { @@ -5849,7 +5856,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in { if (!tsc->data[i]) continue; - //Initial list of status effects cancelled by Clearance. Does not contain third job status. + //Initial list of status effects NOT cancelled by Clearance. switch (i) { case SC_WEIGHT50: case SC_WEIGHT90: case SC_TWOHANDQUICKEN: case SC_QUAGMIRE: case SC_SLOWPOISON: case SC_BENEDICTIO: @@ -5882,7 +5889,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case SC_FOOD_VIT_CASH: case SC_FOOD_DEX_CASH: case SC_FOOD_INT_CASH: case SC_FOOD_LUK_CASH: case SC_MERC_FLEEUP: case SC_MERC_ATKUP: case SC_MERC_HPUP: case SC_MERC_SPUP: case SC_MERC_HITUP: - case SC_SLOWCAST: case SC_CRITICALWOUND: case SC_SPEEDUP0: + case SC_SLOWCAST: /*case SC_CRITICALWOUND:*/ case SC_SPEEDUP0: case SC_DEF_RATE: case SC_MDEF_RATE: case SC_INCHEALRATE: case SC_S_LIFEPOTION: case SC_L_LIFEPOTION: case SC_INCCRI: case SC_SPCOST_RATE: case SC_COMMONSC_RESIST: case SC_ELEMENTALCHANGE: @@ -5899,9 +5906,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case SC_INTOABYSS: case SC_SIEGFRIED: case SC_WHISTLE: case SC_ASSNCROS: case SC_POEMBRAGI: case SC_APPLEIDUN: case SC_HUMMING: case SC_DONTFORGETME: case SC_FORTUNE: - case SC_SERVICE4U: case SC_EPICLESIS: case SC_PARTYFLEE: + case SC_SERVICE4U: case SC_PARTYFLEE: /*case SC_ANGEL_PROTECT:*/ + case SC_EPICLESIS: // not implemented - //case SC_ANGEL_PROTECT: case SC_BUCHEDENOEL: case SC_POPECOOKIE: + //case SC_BUCHEDENOEL: case SC_POPECOOKIE: //case SC_SAVAGE_STEAK: case SC_COCKTAIL_WARG_BLOOD: case SC_MINOR_BBQ: //case SC_SIROMA_ICE_TEA: case SC_DROCERA_HERB_STEAMED: case SC_PUTTI_TAILS_NOODLES: //case SC_CRIFOOD: case SC_STR_SCROLL: case SC_INT_SCROLL: @@ -6800,9 +6808,9 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk case AB_EPICLESIS: if( skill_unitsetting(src, skillid, skilllv, x, y, 0) ) { - int range = skill_get_splash(skillid,skilllv); // Use Splash Range. + i = skill_get_splash(skillid,skilllv); // Use Splash Range. map_foreachinarea(skill_area_sub, - src->m, x-range, y-range, x+range, y+range, BL_CHAR, + src->m, x-i, y-i, x+i, y+i, BL_CHAR, src, ALL_RESURRECTION, 1, tick, flag|BCT_NOENEMY|1, skill_castend_nodamage_id); } @@ -8024,7 +8032,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns //if( tsc->data[SC_BERSERK] ) // break; - //Apply status effect if standing in unit, should cancel upon stepping out of skill_get_splash() area. [FIXME] + //FIXME: Apply status effect if standing in unit, should cancel upon stepping out of skill_get_splash() area. if( tsc && !tsc->data[SC_EPICLESIS] ) sc_start(bl, type, 100, sg->skill_lv, skill_get_time(sg->skill_id,sg->skill_lv)); @@ -8955,6 +8963,26 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh break; clif_skill_fail(sd,skill,0,0); return 0; + break; +/* + case ST_DRAGON: + if(!pc_isdragon(sd)) { + clif_skill_fail(sd,skill,25,0); + return 0; + } + break; + case ST_WARG: + if(!pc_iswarg(sd)) { + clif_skill_fail(sd,skill,0,0); + return 0; + } + break; + case ST_MADOGEAR: + if(!pc_ismadogear(sd)) { + clif_skill_fail(sd,skill,33,0); + return 0; + } +*/ } if(require.mhp > 0 && get_percentage(status->hp, status->max_hp) > require.mhp) { @@ -9057,14 +9085,6 @@ int skill_check_condition_castend(struct map_session_data* sd, short skill, shor } break; } - case AB_LAUDAAGNUS: - case AB_LAUDARAMUS: - if( !sd->status.party_id ) - { - clif_skill_fail(sd,skill,0,0); - return 0; - } - break; } status = &sd->battle_status; @@ -9405,7 +9425,7 @@ int skill_castfix (struct block_list *bl, int skill_id, int skill_lv) } } - //TODO: apply fixed cast rate modifiers via status effects. + // apply fixed cast rate modifiers via status effects. if( !(skill_get_castnodex(skill_id, skill_lv)&2) && sc && sc->count ) { if( sc->data[SC_AB_SECRAMENT] && sc->data[SC_AB_SECRAMENT]->val2 > max_fixedReduction ) @@ -12113,6 +12133,9 @@ static bool skill_parse_row_requiredb(char* split[], int columns, int current) else if( strcmpi(split[10],"recover_weight_rate")==0 ) skill_db[i].state = ST_RECOV_WEIGHT_RATE; else if( strcmpi(split[10],"move_enable")==0 ) skill_db[i].state = ST_MOVE_ENABLE; else if( strcmpi(split[10],"water")==0 ) skill_db[i].state = ST_WATER; + else if( strcmpi(split[10],"dragon")==0 ) skill_db[i].state = ST_DRAGON; + else if( strcmpi(split[10],"warg")==0 ) skill_db[i].state = ST_WARG; + else if( strcmpi(split[10],"madogear")==0 ) skill_db[i].state = ST_MADOGEAR; else skill_db[i].state = ST_NONE; skill_split_atoi(split[11],skill_db[i].spiritball); diff --git a/src/map/skill.h b/src/map/skill.h index 73b3e9fd0..0cadd92d7 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -13,7 +13,7 @@ struct skill_unit_group; struct status_change_entry; #define MAX_SKILL_DB MAX_SKILL -#define MAX_SKILL_PRODUCE_DB 150 +#define MAX_SKILL_PRODUCE_DB 170 #define MAX_PRODUCE_RESOURCE 12 #define MAX_SKILL_ARROW_DB 150 #define MAX_ARROW_RESOURCE 5 @@ -369,6 +369,9 @@ enum { ST_RECOV_WEIGHT_RATE, ST_MOVE_ENABLE, ST_WATER, + ST_DRAGON, + ST_WARG, + ST_MADOGEAR }; enum e_skill { diff --git a/src/map/status.c b/src/map/status.c index bfa6be76d..933d18690 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -1304,7 +1304,7 @@ int status_base_amotion_pc(struct map_session_data* sd, struct status_data* stat static unsigned short status_base_atk(const struct block_list *bl, const struct status_data *status) { - int flag = 0, str, dex, dstr; + int flag = 0, str, dex, dstr, base; if(!(bl->type&battle_config.enable_baseatk)) return 0; @@ -1322,10 +1322,10 @@ static unsigned short status_base_atk(const struct block_list *bl, const struct flag = 1; } if (flag) { - str = status->dex; + base =str = status->dex; dex = status->str; } else { - str = status->str; + base = str = status->str; dex = status->dex; } //Normally only players have base-atk, but homunc have a different batk @@ -1334,7 +1334,7 @@ static unsigned short status_base_atk(const struct block_list *bl, const struct dstr = str/10; str += dstr*dstr; if (bl->type == BL_PC) - str+= dex/5 + status->luk/5; + str = (((TBL_PC*)bl)->status.base_level*10/4 + base*10 + dex*10/5 + status->luk*10/3)/10; return cap_value(str, 0, USHRT_MAX); } @@ -1354,10 +1354,17 @@ void status_calc_misc(struct block_list *bl, struct status_data *status, int lev status->matk_min = status_base_matk_min(status); status->matk_max = status_base_matk_max(status); - status->hit += 175 + status->dex + (unsigned short)floor((double)status->luk/3) + level; //Renewal calclation. + //Renewal calculation? HIT is currently coming up too high. + status->hit += 175 + status->dex + (unsigned short)floor((double)status->luk/3) + level; status->flee += 100 + status->agi + level; - status->def2 += status->vit; - status->mdef2 += status->mdef; + + // Values are still off by roughly 1~3 points. Getting there though. + status->def2 += (level*10/2 + status->vit*10/2 + status->agi*10/5)/10; + if( bl->type != BL_MOB ) + status->mdef2 += (level*10/4 + status->int_*10 + status->vit*10/5 + status->dex*10/5)/10; + else + status->mdef2 = status->mdef; // Mobs use their mdef as their mdef2. + //Status MATK = floor(Base Level/4 + INT + INT/2 + DEX/5 + LUK/3) status->status_matk = (unsigned short)floor((double)level/4 + (double)status->int_ + (double)status->int_/2 + (double)status->dex/5 + (double)status->luk/3); @@ -1539,8 +1546,6 @@ int status_calc_mob_(struct mob_data* md, bool first) status->max_sp += 200 * gc->defense; status->hp = status->max_hp; status->sp = status->max_sp; - status->def += (gc->defense+2)/3; - status->mdef += (gc->defense+2)/3; } }else{ status->max_hp += 1000 * gc->defense; @@ -1963,7 +1968,11 @@ int status_calc_pc_(struct map_session_data* sd, bool first) } } else if(sd->inventory_data[index]->type == IT_ARMOR) { - refinedef += sd->status.inventory[index].refine*refinebonus[0][0]; + int r = sd->status.inventory[index].refine; + int per = 0, refine=(r>0)?1:0; + for(per=1; perinventory_data[index]->script) { run_script(sd->inventory_data[index]->script,0,sd->bl.id,0); if (!calculating) //Abort, run_script retriggered this. [Skotlex] @@ -2296,13 +2305,13 @@ int status_calc_pc_(struct map_session_data* sd, bool first) sd->def_rate = 0; if(sd->def_rate != 100) { i = status->def * sd->def_rate/100; - status->def = cap_value(i, CHAR_MIN, CHAR_MAX); + status->def = cap_value(i, SHRT_MIN, SHRT_MAX); } if (!battle_config.weapon_defense_type && status->def > battle_config.max_def) { status->def2 += battle_config.over_def_bonus*(status->def -battle_config.max_def); - status->def = (unsigned char)battle_config.max_def; + status->def = (unsigned short)battle_config.max_def; } // ----- EQUIPMENT-MDEF CALCULATION ----- @@ -2312,13 +2321,13 @@ int status_calc_pc_(struct map_session_data* sd, bool first) sd->mdef_rate = 0; if(sd->mdef_rate != 100) { i = status->mdef * sd->mdef_rate/100; - status->mdef = cap_value(i, CHAR_MIN, CHAR_MAX); + status->mdef = cap_value(i, SHRT_MIN, SHRT_MAX); } if (!battle_config.magic_defense_type && status->mdef > battle_config.max_def) { status->mdef2 += battle_config.over_def_bonus*(status->mdef -battle_config.max_def); - status->mdef = (signed char)battle_config.max_def; + status->mdef = (signed short)battle_config.max_def; } // ----- ASPD CALCULATION ----- @@ -2580,9 +2589,9 @@ static signed short status_calc_hit(struct block_list *,struct status_change *,i static signed short status_calc_critical(struct block_list *,struct status_change *,int); static signed short status_calc_flee(struct block_list *,struct status_change *,int); static signed short status_calc_flee2(struct block_list *,struct status_change *,int); -static signed char status_calc_def(struct block_list *,struct status_change *,int); +static signed short status_calc_def(struct block_list *,struct status_change *,int); static signed short status_calc_def2(struct block_list *,struct status_change *,int); -static signed char status_calc_mdef(struct block_list *,struct status_change *,int); +static signed short status_calc_mdef(struct block_list *,struct status_change *,int); static signed short status_calc_mdef2(struct block_list *,struct status_change *,int); static unsigned short status_calc_speed(struct block_list *,struct status_change *,int); static short status_calc_aspd_rate(struct block_list *,struct status_change *,int); @@ -2823,7 +2832,7 @@ void status_calc_bl_main(struct block_list *bl, enum scb_flag flag) if(flag&SCB_LUK) { status->luk = status_calc_luk(bl, sc, b_status->luk); - flag|=SCB_BATK|SCB_CRI|SCB_FLEE2; + flag|=SCB_BATK|SCB_CRI|SCB_FLEE2|SCB_MATK; } if(flag&SCB_BATK && b_status->batk) { @@ -3194,25 +3203,26 @@ void status_calc_bl_(struct block_list* bl, enum scb_flag flag, bool first) clif_updatestatus(sd,SP_ASPD); if(b_status.speed != status->speed) clif_updatestatus(sd,SP_SPEED); - if(b_status.rhw.atk != status->rhw.atk || b_status.lhw.atk != status->lhw.atk || b_status.batk != status->batk) + if(b_status.rhw.atk != status->rhw.atk || b_status.lhw.atk != status->lhw.atk || b_status.batk != status->batk + || b_status.rhw.atk2 != status->rhw.atk2 || b_status.lhw.atk2 != status->lhw.atk2 || b_status.equipment_atk != status->equipment_atk) { clif_updatestatus(sd,SP_ATK1); + clif_updatestatus(sd,SP_ATK2); clif_updatestatus(sd,SP_MATK1); } - if(b_status.def != status->def) + if(b_status.def != status->def || b_status.def2 != status->def2) + { clif_updatestatus(sd,SP_DEF1); - if(b_status.rhw.atk2 != status->rhw.atk2 || b_status.lhw.atk2 != status->lhw.atk2) - clif_updatestatus(sd,SP_ATK2); - if(b_status.def2 != status->def2) clif_updatestatus(sd,SP_DEF2); + } if(b_status.flee2 != status->flee2) clif_updatestatus(sd,SP_FLEE2); if(b_status.cri != status->cri) clif_updatestatus(sd,SP_CRITICAL); if(b_status.matk_max != status->matk_max) { - clif_updatestatus(sd,SP_MATK1); - clif_updatestatus(sd,SP_MATK2); + clif_updatestatus(sd,SP_MATK1); + clif_updatestatus(sd,SP_MATK2); } if(b_status.mdef != status->mdef || b_status.mdef2 != status->mdef2) { @@ -3708,10 +3718,10 @@ static signed short status_calc_flee2(struct block_list *bl, struct status_chang return (short)cap_value(flee2,10,SHRT_MAX); } -static signed char status_calc_def(struct block_list *bl, struct status_change *sc, int def) +static signed short status_calc_def(struct block_list *bl, struct status_change *sc, int def) { if(!sc || !sc->count) - return (signed char)cap_value(def,CHAR_MIN,CHAR_MAX); + return (signed short)cap_value(def,SHRT_MIN,SHRT_MAX); if(sc->data[SC_BERSERK]) return 0; @@ -3748,7 +3758,7 @@ static signed char status_calc_def(struct block_list *bl, struct status_change * if (sc->data[SC_FLING]) def -= def * (sc->data[SC_FLING]->val2)/100; - return (signed char)cap_value(def,CHAR_MIN,CHAR_MAX); + return (signed short)cap_value(def,SHRT_MIN,SHRT_MAX); } static signed short status_calc_def2(struct block_list *bl, struct status_change *sc, int def2) @@ -3783,10 +3793,10 @@ static signed short status_calc_def2(struct block_list *bl, struct status_change return (short)cap_value(def2,1,SHRT_MAX); } -static signed char status_calc_mdef(struct block_list *bl, struct status_change *sc, int mdef) +static signed short status_calc_mdef(struct block_list *bl, struct status_change *sc, int mdef) { if(!sc || !sc->count) - return (signed char)cap_value(mdef,CHAR_MIN,CHAR_MAX); + return (signed short)cap_value(mdef,SHRT_MIN,SHRT_MAX); if(sc->data[SC_BERSERK]) return 0; @@ -3807,7 +3817,7 @@ static signed char status_calc_mdef(struct block_list *bl, struct status_change if(sc->data[SC_CONCENTRATION]) mdef += 1; //Skill info says it adds a fixed 1 Mdef point. - return (signed char)cap_value(mdef,CHAR_MIN,CHAR_MAX); + return (signed short)cap_value(mdef,SHRT_MIN,SHRT_MAX); } static signed short status_calc_mdef2(struct block_list *bl, struct status_change *sc, int mdef2) @@ -4288,7 +4298,7 @@ struct status_data *status_get_base_status(struct block_list *bl) } } -signed char status_get_def(struct block_list *bl) +signed short status_get_def(struct block_list *bl) { struct unit_data *ud; struct status_data *status = status_get_status_data(bl); @@ -4296,7 +4306,7 @@ signed char status_get_def(struct block_list *bl) ud = unit_bl2ud(bl); if (ud && ud->skilltimer != INVALID_TIMER) def -= def * skill_get_castdef(ud->skillid)/100; - return cap_value(def, CHAR_MIN, CHAR_MAX); + return cap_value(def, SHRT_MIN, SHRT_MAX); } unsigned short status_get_speed(struct block_list *bl) @@ -4521,6 +4531,22 @@ void status_set_viewdata(struct block_list *bl, int class_) class_ = JOB_BABY_CRUSADER2; break; } + /* + else + if (sd->sc.option&OPTION_DRAGON) // For completeness' sake. These aren't actually needed...except maybe in older clients. + switch (class_) + { + case JOB_RUNE_KNIGHT: + class_ = JOB_RUNE_KNIGHT2; + break; + case JOB_RUNE_KNIGHT_H: + class_ = JOB_RUNE_KNIGHT_H2; + break; + case JOB_BABY_RUNE: + class_ = JOB_BABY_RUNE2; + break; + } + */ sd->vd.class_ = class_; clif_get_weapon_view(sd, &sd->vd.weapon, &sd->vd.shield); sd->vd.head_top = sd->status.head_top; @@ -5316,6 +5342,8 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_INCREASEAGI: case SC_ADORAMUS: val2 = 2 + val1; //Agi change + if (val3) //Canto Candidus: Add joblv/10 additional AGI (8/31/2011) + val2 += (val3/10); break; case SC_ENDURE: val2 = 7; // Hit-count [Celest] @@ -5365,14 +5393,14 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val break; case SC_KYRIE: val2 = status->max_hp * (val1 * 2 + 10) / 100; //%Max HP to absorb - // val1 determines if status is casued by Kyrie or Praefatio, + // val4 determines if status is casued by Kyrie or Praefatio, // as Praefatio blocks more hits than Kyrie Elesion. - if( !val4 ) + if( !val4 ) //== PR_KYRIE val3 = (val1 / 2 + 5); - else + else //== AB_PRAEFATIO val3 = 6 + val1; if( sd ) - val1 = min(val1,pc_checkskill(sd,PR_KYRIE)); // uses kill level to determine barrier health. + val1 = min(val1,pc_checkskill(sd,PR_KYRIE)); // use skill level to determine barrier health. break; case SC_MAGICPOWER: //val1: Skill lv @@ -5923,7 +5951,11 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val break; case SC_BLESSING: if ((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC) + { val2 = val1; + if (val3) //Clementia: Add joblv/10 additional STR/INT/DEX (8/31/2011) + val2 += (val3/10); + } else val2 = 0; //0 -> Half stat. break; diff --git a/src/map/status.h b/src/map/status.h index 4eeadef12..169d193ae 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -11,7 +11,7 @@ struct homun_data; struct status_change; //Use this to refer the max refinery level [Skotlex] -#define MAX_REFINE 10 +#define MAX_REFINE 20 #define MAX_REFINE_BONUS 5 extern unsigned long StatusChangeFlagTable[]; @@ -330,7 +330,7 @@ typedef enum sc_type { SC_FOOD_INT_CASH, SC_FOOD_LUK_CASH, //SC_MOVHASTE_INFINITY, - SC_PARTYFLEE = 310 , + SC_PARTYFLEE = 310, //SC_ENDURE_MDEF, //311 // Third Jobs - Maintaining SI order for SCs. @@ -933,6 +933,62 @@ enum si_type { SI_WIND_INSIGNIA = 569, SI_EARTH_INSIGNIA = 570, SI_EQUIPED_FLOOR = 571, + SI_GUARDIAN_RECALL = 572, + SI_MORA_BUFF = 573, + SI_REUSE_LIMIT_G = 574, + SI_REUSE_LIMIT_H = 575, + SI_NEEDLE_OF_PARALYZE = 576, + SI_PAIN_KILLER = 577, + SI_G_LIFEPOTION = 578, + SI_VITALIZE_POTION = 579, + SI_LIGHT_OF_REGENE = 580, + SI_OVERED_BOOST = 581, + SI_SILENT_BREEZE = 582, + SI_ODINS_POWER = 583, + SI_STYLE_CHANGE = 584, + SI_SONIC_CLAW_POSTDELAY = 585, +//--586-595 Unused + SI_SILVERVEIN_RUSH_POSTDELAY = 596, + SI_MIDNIGHT_FRENZY_POSTDELAY = 597, + SI_GOLDENE_FERSE = 598, + SI_ANGRIFFS_MODUS = 599, + SI_TINDER_BREAKER = 600, + SI_TINDER_BREAKER_POSTDELAY = 601, + SI_CBC = 602, + SI_CBC_POSTDELAY = 603, + SI_EQC = 604, + SI_MAGMA_FLOW = 605, + SI_GRANITIC_ARMOR = 606, + SI_PYROCLASTIC = 607, + SI_VOLCANIC_ASH = 608, + SI_SPIRITS_SAVEINFO1 = 609, + SI_SPIRITS_SAVEINFO2 = 610, + SI_MAGIC_CANDY = 611, +//--612 skipped + SI_ALL_RIDING = 613, +//--614 skipped + SI_MACRO = 615, + SI_MACRO_POSTDELAY = 616, + SI_BEER_BOTTLE_CAP = 617, + SI_OVERLAPEXPUP = 618, + SI_PC_IZ_DUN05 = 619, + SI_CRUSHSTRIKE = 620, + SI_MONSTER_TRANSFORM = 621, + SI_SIT = 622, + SI_ONAIR = 623, + SI_MTF_ASPD = 624, + SI_MTF_RANGEATK = 625, + SI_MTF_MATK = 626, + SI_MTF_MLEATKED = 627, + SI_MTF_CRIDAMAGE = 628, + SI_REUSE_LIMIT_MTF = 629, + SI_MACRO_PERMIT = 630, + SI_MACRO_PLAY = 631, + SI_SKF_CAST = 632, + SI_SKF_ASPD = 633, + SI_SKF_ATK = 634, + SI_SKF_MATK = 635, + SI_REWARD_PLUSONLYJOBEXP = 636, */ }; @@ -1133,20 +1189,18 @@ struct status_data { max_hp, max_sp; unsigned short str, agi, vit, int_, dex, luk, - batk, + batk, equipment_atk, matk_min, matk_max, status_matk, speed, amotion, adelay, dmotion, mode; short hit, flee, cri, flee2, - def2, mdef2, + def, mdef, def2, mdef2, aspd_rate; unsigned char def_ele, ele_lv, size, race; - signed char - def, mdef; struct weapon_atk rhw, lhw; //Right Hand/Left Hand Weapon. }; @@ -1259,7 +1313,7 @@ int status_get_lv(struct block_list *bl); #define status_get_luk(bl) status_get_status_data(bl)->luk #define status_get_hit(bl) status_get_status_data(bl)->hit #define status_get_flee(bl) status_get_status_data(bl)->flee -signed char status_get_def(struct block_list *bl); +signed short status_get_def(struct block_list *bl); #define status_get_mdef(bl) status_get_status_data(bl)->mdef #define status_get_flee2(bl) status_get_status_data(bl)->flee2 #define status_get_def2(bl) status_get_status_data(bl)->def2 -- cgit v1.2.3-70-g09d2