diff options
-rw-r--r-- | db/re/map_zone_db.conf | 5 | ||||
-rw-r--r-- | db/re/mob_db.conf | 6 | ||||
-rw-r--r-- | db/re/mob_skill_db.conf | 55 | ||||
-rw-r--r-- | maps/re/001-7.mcache | bin | 1050 -> 1050 bytes | |||
-rw-r--r-- | npc/001-7/_import.txt | 2 | ||||
-rw-r--r-- | npc/001-7/_mobs.txt | 4 | ||||
-rw-r--r-- | npc/001-7/celestia_bossfight.txt | 136 | ||||
-rw-r--r-- | npc/001-7/mapflags.txt | 1 | ||||
-rw-r--r-- | npc/003-1-1/yetiking.txt | 2 | ||||
-rw-r--r-- | npc/012-7/celestia.txt | 2 | ||||
-rw-r--r-- | npc/soren-2/main.txt | 12 |
11 files changed, 213 insertions, 12 deletions
diff --git a/db/re/map_zone_db.conf b/db/re/map_zone_db.conf index ddb34122d..f3ab2f5f6 100644 --- a/db/re/map_zone_db.conf +++ b/db/re/map_zone_db.conf @@ -117,12 +117,13 @@ zones: ( monstersmall: 100 monsterbig: 100 save: 100 - raisemap: 100 - doommap: 100 killmonster: 100 killmonster2: 100 + raisemap: 100 + doommap: 100 kill: 100 nuke: 100 + revive: 100 setbattleflag: 100 cvcon: 100 cvcoff: 100 diff --git a/db/re/mob_db.conf b/db/re/mob_db.conf index 623aba5c5..b3380a39a 100644 --- a/db/re/mob_db.conf +++ b/db/re/mob_db.conf @@ -1382,13 +1382,13 @@ mob_db: ( { Id: 1040 SpriteName: "YetiKing" - Name: "Yeti King" + Name: "The Yeti King" Lv: 120 Hp: 270000 Sp: 0 Exp: 1000 JExp: 0 - AttackRange: 1 + AttackRange: 2 Attack: [400, 900] Def: 120 Mdef: 80 @@ -1408,7 +1408,7 @@ mob_db: ( Mode: { Aggressive: true CanMove: true - Looter: true + Looter: true CanAttack: true CastSensorChase: true } diff --git a/db/re/mob_skill_db.conf b/db/re/mob_skill_db.conf index 70b38b273..93f0f239c 100644 --- a/db/re/mob_skill_db.conf +++ b/db/re/mob_skill_db.conf @@ -228,5 +228,60 @@ mob_skill_db:( ConditionData: 3 } } + YetiKing: { + NPC_SUMMONSLAVE: { + SkillState: "MSS_BERSERK" + SkillLevel: 5 + Rate: 10000 + CastTime: 2000 + Delay: 60000 + SkillTarget: "MST_SELF" + CastCondition: "MSC_SLAVELE" + ConditionData: 3 + val0: 1064 + } + NPC_SUMMONSLAVE: { + SkillState: "MSS_IDLE" + SkillLevel: 5 + Rate: 10000 + CastTime: 2000 + Delay: 60000 + SkillTarget: "MST_SELF" + CastCondition: "MSC_SLAVELE" + ConditionData: 3 + val0: 1064 + } + NPC_POISON: { + SkillState: "MSS_BERSERK" + SkillLevel: 20 + Rate: 400 + Delay: 500 + Cancelable: true + SkillTarget: "MST_TARGET" + CastCondition: "MSC_ATTACKPCGE" + ConditionData: 3 + } + NPC_POISON: { + SkillState: "MSS_BERSERK" + SkillLevel: 20 + Rate: 1200 + Delay: 500 + Cancelable: true + SkillTarget: "MST_TARGET" + CastCondition: "MSC_ATTACKPCGE" + ConditionData: 5 + } + NPC_POISON: { + SkillState: "MSS_BERSERK" + SkillLevel: 20 + Rate: 2500 + Delay: 500 + Cancelable: true + SkillTarget: "MST_TARGET" + CastCondition: "MSC_ATTACKPCGE" + ConditionData: 8 + } + } + } ) diff --git a/maps/re/001-7.mcache b/maps/re/001-7.mcache Binary files differindex 57eb3e7e4..2c42657ac 100644 --- a/maps/re/001-7.mcache +++ b/maps/re/001-7.mcache diff --git a/npc/001-7/_import.txt b/npc/001-7/_import.txt index bb1b11c91..a1b235402 100644 --- a/npc/001-7/_import.txt +++ b/npc/001-7/_import.txt @@ -2,3 +2,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/001-7/_mobs.txt", "npc/001-7/_warps.txt", +"npc/001-7/celestia_bossfight.txt", +"npc/001-7/mapflags.txt", diff --git a/npc/001-7/_mobs.txt b/npc/001-7/_mobs.txt index 07331e8c3..14057ec8e 100644 --- a/npc/001-7/_mobs.txt +++ b/npc/001-7/_mobs.txt @@ -1,8 +1,8 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 001-7: Frostia Cliffs mobs 001-7,48,95,24,11 monster Ice Fluffy 1041,8,30000,30000 -001-7,52,33,10,9 monster Wolvern 1037,8,30000,30000 -001-7,29,42,6,2 monster Wolvern 1037,5,30000,30000 +001-7,103,96,14,14 monster Wolvern 1037,8,30000,30000 +001-7,30,23,6,2 monster Wolvern 1037,5,30000,30000 001-7,49,45,8,2 monster Wolvern 1037,2,30000,30000 001-7,41,49,16,2 monster Wolvern 1037,2,30000,30000 001-7,27,53,8,2 monster Wolvern 1037,2,30000,30000 diff --git a/npc/001-7/celestia_bossfight.txt b/npc/001-7/celestia_bossfight.txt new file mode 100644 index 000000000..eaff99c8f --- /dev/null +++ b/npc/001-7/celestia_bossfight.txt @@ -0,0 +1,136 @@ +// TMW2 Scripts +// Author: +// Jesusalva +// Description: +// Celestia Yeti King's quest. This controls the final showdown, and brings you +// back home safely. +// +// If you cheated your way to here, you won't be able to interact with it. +// No other safety measures are in place. Lone players cannot challenge the +// Yeti King, there must be at least 2 players there to do the challenge. +// BEWARE, the Yeti King gains stronger poisons the more people are attacking him. +// +// $@GM_OVERRIDE allows a single player to challenge him, as usual with all +// co-op scripts. +// +// If you do not challenge him, the chance to challenge him again is lost. + +001-7,33,39,0 script #YetiKing NPC_YETI_KING,0,0,{ + .@q=getq(HurnscaldQuest_Celestia); + if (.@q == 5 && !mobcount(.map$, "#YetiKing::OnVictory")) goto L_Survivor; + if (.@q == 6) goto L_GoHome; + end; + +L_GoHome: + mes col("Go home now?", 9); + if (askyesno() == ASK_YES) + warp "003-1-1", 94, 22; + closedialog; + if (!getareausers("001-7", 7)) + setnpcdisplay .name$, NPC_YETI_KING; + close; + +L_Survivor: + mesn col("The Yeti King", 3); + mesq l("Good job, kid. You've survived both the Cave Of Trials and Soren's Village."); + next; + mesn col("The Yeti King", 3); + mesq l("That was only to prove you're strong enough on yourself to do whatever you want to do. You have friends."); + next; + mesn col("The Yeti King", 3); + mesq l("In this world, your friends are your strength. You deserve a reward for the victory, please choose whatever you want."); + select + l("I want a gemstone or ore"), + l("I want experience"), + l("I want gold"), + l("I want coal"); + + mes ""; + .@r=rand(1,100); + switch (@menu) { + case 1: + if (.@r < 30) + getitem rand(Diamond, Amethyst), 1; + else + getitem rand(CopperOre, TitaniumOre), 1; + break; + case 2: + getexp .@r*20, .@r; // max 2000 xp and 100 jp + break; + case 3: + Zeny=Zeny+.@r*25; // max 2500 gp + break; + case 4: + getitem Coal, (.@r/20); // max 5 coal + break; + } + compareandsetq HurnscaldQuest_Celestia, 5, 6; + mesn col("The Yeti King", 3); + mesq l("Here kid. Frostia, the elf town, is somewhere near here, but I'm not sure if you can reach it from here."); + next; + mesn col("The Yeti King", 3); + mesq l("I can warp you home now."); + mes ""; + select + l("Please, bring me back home."), + rif((getareausers("001-7", 7) > 1 || $@GM_OVERRIDE) && !mobcount(.map$, "#YetiKing::OnVictory"), l("No, we challenge you to a duel!")), + l("I'll walk around here a little more."); + + mes ""; + switch (@menu) { + case 1: + warp "003-1-1", 94, 22; + break; + case 2: + compareandsetq HurnscaldQuest_Celestia, 6, 7; + mesn col("The Yeti King", 3); + mesq l("Foolish kids, do you think violence is the answer to everything?!"); + next; + mesn col("The Yeti King", 3); + mesq l("I give you three minutes to defeat me. Witness my wrath!"); + setnpcdisplay .name$, NPC_NO_SPRITE; + monster .map$, .x, .y, strmobinfo(1, YetiKing), YetiKing, 1, "#YetiKing::OnVictory"; + initnpctimer; + break; + } + close; + +OnVictory: + stopnpctimer; + setnpcdisplay .name$, NPC_SUMMONING_CIRC; + npctalk l("Good job... You can keep the drops. Touch here to return home."); + areatimer "006-1", 20, 20, 141, 171, 10, "#YetiKing::OnDefeat"; + end; + +// This allows the challenger to go back home without dying. +OnDefeat: + compareandsetq HurnscaldQuest_Celestia, 7, 6; + end; + +OnTimer60000: + npctalk "Time left: 2 minutes"; + end; + +OnTimer120000: + npctalk "Time left: 1 minute"; + end; + +OnTimer150000: + npctalk "Time left: 30 seconds"; + end; + +OnTimer170000: + npctalk "Time left: 10 seconds"; + end; + +OnTimer180000: + npctalk "Time is up!"; + killmonster(.map$, "#YetiKing::OnVictory"); // I could use "All" as label, too + end; + +} + + + + + diff --git a/npc/001-7/mapflags.txt b/npc/001-7/mapflags.txt new file mode 100644 index 000000000..f38cb43db --- /dev/null +++ b/npc/001-7/mapflags.txt @@ -0,0 +1 @@ +soren mapflag zone MMO diff --git a/npc/003-1-1/yetiking.txt b/npc/003-1-1/yetiking.txt index 791754faf..6377637e0 100644 --- a/npc/003-1-1/yetiking.txt +++ b/npc/003-1-1/yetiking.txt @@ -10,7 +10,7 @@ // Only possible with @set command, overrides the co-op requeriment. -003-1-1,94,21,0 script #YetiKing NPC_SUMMONING_CIRC,{ +003-1-1,94,21,0 script #DahYetiKing NPC_SUMMONING_CIRC,{ .@q=getq(HurnscaldQuest_Celestia); if (.@q > 1 && .@q < 99) setq HurnscaldQuest_Celestia, 1; diff --git a/npc/012-7/celestia.txt b/npc/012-7/celestia.txt index 3b71ee13a..afae1c60e 100644 --- a/npc/012-7/celestia.txt +++ b/npc/012-7/celestia.txt @@ -25,7 +25,7 @@ rif(.@q2 == 1, l("I have some sweeties for the Tea Party!")), L_TeaCheck, rif(.@q2 >= 2, l("Tea party! I want to participate.")), L_TeaParty, rif(.@q1 == 0, l("There are Monster Attacks every month, how do you have time for tea parties?!")), L_MainQuest, - rif(.@q1 == 99, l("I want to try convincing the Yeti King again.")), L_MainQuestCore; + rif(.@q1 >= 6, l("I want to try convincing the Yeti King again.")), L_MainQuestCore; L_Coffee: mes ""; diff --git a/npc/soren-2/main.txt b/npc/soren-2/main.txt index b52aad782..d8ad7dd75 100644 --- a/npc/soren-2/main.txt +++ b/npc/soren-2/main.txt @@ -37,10 +37,12 @@ soren-2,38,29,0 script #SorenSanctum NPC_NO_SPRITE,0,0,{ OnTouch: if (@sorensanctum >= 5 && !mobcount(.map$, "#SorenSanctum::OnCheck")) { + /* dispbottom l("Error, contact Jesusalva! Missing warp. Healing & Reseting temporaly."); - percentheal 100, 100; - @sorensanctum=@sorensanctum-5; - //compareandsetq HurnscaldQuest_Celestia, 4, 5; + percentheal 100, 100;*/ + @sorensanctum=0; + compareandsetq HurnscaldQuest_Celestia, 4, 5; + warp "001-7", 30, 42; } end; @@ -180,6 +182,10 @@ OnStart: // it is harder this way, so I'm not touching on quest state :> if (getq(HurnscaldQuest_Celestia) != 4) end; + addtimer(200, "#SorenSanctum::OnStep1"); // Allow client to update stuff + end; + +OnStep1: // When we reach here, we have both a player attached, and the player was already warped. // I don't know if you walked in and out the house, though. If you do, this will loop... // Which is actually bad for you, as that will reset your progress!! |