diff options
-rw-r--r-- | conf/map/maps.conf | 1 | ||||
-rw-r--r-- | db/map_index.txt | 45 | ||||
-rw-r--r-- | db/re/mob_db.conf | 38 | ||||
-rw-r--r-- | maps/re/006-1.mcache | bin | 0 -> 190 bytes | |||
-rw-r--r-- | npc/005-1/warpcandorbattle.txt | 12 | ||||
-rw-r--r-- | npc/006-1/_import.txt | 5 | ||||
-rw-r--r-- | npc/006-1/barrier.txt | 14 | ||||
-rw-r--r-- | npc/006-1/crazyfefe.txt | 230 | ||||
-rw-r--r-- | npc/006-1/mapflags.txt | 2 | ||||
-rw-r--r-- | npc/012-5/_import.txt | 1 | ||||
-rw-r--r-- | npc/012-5/nicholas.txt | 8 | ||||
-rw-r--r-- | npc/_import.txt | 1 |
12 files changed, 315 insertions, 42 deletions
diff --git a/conf/map/maps.conf b/conf/map/maps.conf index fca32f816..0b8d166ef 100644 --- a/conf/map/maps.conf +++ b/conf/map/maps.conf @@ -40,6 +40,7 @@ map_list: ( "005-5", "005-6", "005-7", + "006-1", "007-1", "009-1", "010-1-1", diff --git a/db/map_index.txt b/db/map_index.txt index 1e9f686cc..c600e1dca 100644 --- a/db/map_index.txt +++ b/db/map_index.txt @@ -37,25 +37,26 @@ 005-5 37 005-6 38 005-7 39 -007-1 40 -009-1 41 -010-1-1 42 -010-1 43 -010-2 44 -011-1 45 -011-2 46 -012-1 47 -012-2 48 -012-3 49 -012-4 50 -012-5 51 -014-1 52 -014-2 53 -015-1 54 -boss 55 -botcheck 56 -sec_pri 57 -soren-2 58 -soren 59 -test 60 -testbg 61 +006-1 40 +007-1 41 +009-1 42 +010-1-1 43 +010-1 44 +010-2 45 +011-1 46 +011-2 47 +012-1 48 +012-2 49 +012-3 50 +012-4 51 +012-5 52 +014-1 53 +014-2 54 +015-1 55 +boss 56 +botcheck 57 +sec_pri 58 +soren-2 59 +soren 60 +test 61 +testbg 62 diff --git a/db/re/mob_db.conf b/db/re/mob_db.conf index 5abe19a29..8ae7697d4 100644 --- a/db/re/mob_db.conf +++ b/db/re/mob_db.conf @@ -1318,6 +1318,7 @@ mob_db: ( Aggressive: true CanMove: true CanAttack: true + ChangeChase: true CastSensorChase: true } MoveSpeed: 400 @@ -1652,22 +1653,22 @@ mob_db: ( Id: 1051 SpriteName: "DarkLizard" Name: "Dark Lizard" - Lv: 5 - Hp: 500 + Lv: 45 + Hp: 12500 Sp: 0 - Exp: 4 - JExp: 1 + Exp: 75 + JExp: 15 AttackRange: 1 - Attack: [50, 100] - Def: 10 - Mdef: 0 + Attack: [200, 600] + Def: 30 + Mdef: 200 Stats: { - Str: 1 - Agi: 1 - Vit: 1 + Str: 20 + Agi: 20 + Vit: 20 Int: 1 - Dex: 6 - Luk: 5 + Dex: 46 + Luk: 55 } ViewRange: 1 ChaseRange: 12 @@ -1678,14 +1679,17 @@ mob_db: ( Aggressive: true CanMove: true CanAttack: true + ChangeChase: true CastSensorChase: true } MoveSpeed: 800 - AttackDelay: 1872 + AttackDelay: 1472 AttackMotion: 672 DamageMotion: 480 MvpExp: 0 Drops: { + CasinoCoins: 550 + PileOfAsh: 220 RoastedMaggot: 150 } }, @@ -1955,10 +1959,10 @@ mob_db: ( Id: 1064 SpriteName: "Yeti" Name: "Yeti" - Lv: 100 + Lv: 60 Hp: 12620 Sp: 0 - Exp: 950 + Exp: 250 JExp: 85 AttackRange: 2 Attack: [320, 533] @@ -1966,7 +1970,7 @@ mob_db: ( Mdef: 15 Stats: { Str: 60 - Agi: 5 + Agi: 55 Vit: 45 Int: 15 Dex: 60 @@ -1994,7 +1998,7 @@ mob_db: ( FrozenYetiTear: 300 WhiteFur: 150 WhiteFur: 51 - YetiMask: 5 + YetiMask: 4 } }, { diff --git a/maps/re/006-1.mcache b/maps/re/006-1.mcache Binary files differnew file mode 100644 index 000000000..f0c5e20e4 --- /dev/null +++ b/maps/re/006-1.mcache diff --git a/npc/005-1/warpcandorbattle.txt b/npc/005-1/warpcandorbattle.txt index c79830276..964aff26c 100644 --- a/npc/005-1/warpcandorbattle.txt +++ b/npc/005-1/warpcandorbattle.txt @@ -1,11 +1,17 @@ +// TMW2 Script // Author: // Crazyfefe +// Jesusalva 005-1,59,52,0 script Magic Barrier NPC_HIDDEN,0,0,{ + end; OnTouch: - if(BaseLevel >= 40) - warp "005-1", 59, 66; + if (BaseLevel >= 40 && !$@FIGHT_CAVE_LEVEL) + warp "006-1", 49, 53; + else if (BaseLevel >= 40) + npctalk l("You don't have the required level to pass this barrier."); else - npctalk l("You don't have the required level to pass this door."); + npctalk l("You can't pass this barrier while people are fighting inside!"); + end; } diff --git a/npc/006-1/_import.txt b/npc/006-1/_import.txt new file mode 100644 index 000000000..c5c393844 --- /dev/null +++ b/npc/006-1/_import.txt @@ -0,0 +1,5 @@ +// Map 006-1: Crazyfefe's Cave +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/006-1/barrier.txt", +"npc/006-1/crazyfefe.txt", +"npc/006-1/mapflags.txt", diff --git a/npc/006-1/barrier.txt b/npc/006-1/barrier.txt new file mode 100644 index 000000000..279211b1c --- /dev/null +++ b/npc/006-1/barrier.txt @@ -0,0 +1,14 @@ +// TMW2 Script +// Author: +// Crazyfefe +// Jesusalva + +006-1,49,54,0 script #FightCaveBarrier NPC_NO_SPRITE,0,0,{ + if ($@FIGHT_CAVE_LEVEL) goto L_Block; + warp "005-1", 59, 53; + end; + +L_Block: + dispbottom l("Your coward outer self fails to convince you to leave."); + end; +} diff --git a/npc/006-1/crazyfefe.txt b/npc/006-1/crazyfefe.txt new file mode 100644 index 000000000..d41a145a1 --- /dev/null +++ b/npc/006-1/crazyfefe.txt @@ -0,0 +1,230 @@ +// TMW2 Script +// Author: +// TMW Org. (original code) +// Jesusalva +// Description: +// Crazyfefe will wake up when he smells battle +// Variables: +// $@FIGHT_CAVE_LEVEL +// Tracks if a fight is going on, and the current round if true. +// $@FEFE_DELAY +// Tracks the delay between challenges. Also used to start the combat. +// $@FIGHT_CAVE_HERO$ +// Whoever started a fight. Also used to know if a fight is about to begin. +// $@FIGHT_CAVE_PLAYER_COUNT +// How many players are there + +006-1,50,52,0 script Crazyfefe NPC_STATUE_EVILMAN,{ + if ($@FIGHT_CAVE_LEVEL) goto L_Enjoy; + if ($@FEFE_DELAY < gettimetick(2)) goto L_Wait; + mesn; + mesq l("Who dares to disturb my slumber?"); + next; + menu + l("Sorry, sorry! Please rest, great Crazyfefe!"), L_Exit, + l("I do. I want to challenge the Candor Cave!"), L_Next, + l("What is this place anyway?"), L_Explain; + +L_Next: + mesn; + mesq l("Very well, but for a fee of @@ GP. There's no free lunch, after all!", .price); + select + l("Sorry, I misclicked the first button. Have a nice nap, great Crazyfefe!"), + l("Yeah, I have money to throw away. Give me ##Bfive##b minutes, and Bring it on!"), + l("Yeah, I have money to throw away. Give me ##Bten##b minutes, and Bring it on!"), + l("Yeah, I have money to throw away. Give me ##Bfifteen##b minutes, and Bring it on!"), + "","", + rif(is_gm(), l("I'm GM and got the money. Gimme HALF HOUR to invite everybody!")); + + // Cancel? + if (@menu == 1) + goto L_Exit; + + // Already started? + if ($@FIGHT_CAVE_LEVEL || $@FIGHT_CAVE_HERO$ != "") + goto L_AlreadyStarted; + + // Enough money? + if (Zeny < .price) + goto L_NotEnough; + + Zeny = Zeny - .price; + // Time delay + $@FEFE_DELAY = gettimetick(2)+300*(@menu-1); + $@FIGHT_CAVE_HERO$ = strcharinfo(0); + initnpctimer; + mesn; + mesq l("Please wait the designed time."); + close; + +L_StartFight: + if (getmapusers("006-1") < 3) + goto L_NotEnoughPlayers; + $@FIGHT_CAVE_LEVEL = 1; + $@FEFE_DELAY = gettimetick(2)+.delay; + $@FIGHT_CAVE_PLAYER_COUNT = getmapusers("006-1"); + mapannounce("006-1", "Let the battle begin!", bc_map); + initnpctimer; + end; + +L_Enjoy: + npctalk3 l("Pay attention to the fight, @@!", strcharinfo(0)); + end; + +L_NotEnough: + mesn; + mesq l("You lack money. Go sell your stuff. And don't ask why a statue needs money!"); + close; + +L_AlreadyStarted: + mesn; + mesq l("Sorry, @@ already started the fight.", $@FIGHT_CAVE_HERO$); + close; + +L_Wait: + .@time$=FuzzyTime($@FEFE_DELAY,2,2); + mesn; + mesq l("Be Patient... You still need to wait @@.", .@time$); + goto L_Exit; + +L_NotEnoughPlayers: + mapannounce("006-1", "Oh noes! There's not enough players. Fight aborted, no refunds!", bc_map); + goto L_CleanUp; + +L_Explain: + mesn; + mesq l("I am @@, guardian of Candor Cave. Below this cave, lies the legendary Fefe, arch-wizard from the Great War.", .name$); + next; + mesn; + mesq l("During the war, the Monster King cursed the place where he died, but he fought back, and cursed the curse."); + next; + mesn; + mesq l("For short, they had a fight with curses, and now there's a talking statue over his grave which can spawn monsters here."); + next; + mesn; + mesq l("If you pay the fee, I'll spawn them. You should not fight alone, instead, you need a group of at least three, because, you know, the curse. Or something."); + next; + menu + l("I need to think about this."), L_Exit, + l("I'm interested."), L_Next; + +L_Exit: + close; + + + + + + + +// Check if we're ready for next wave. Otherwise, do this check again after 5 seconds. +L_CaveLogic: + $@FIGHT_CAVE_PLAYER_COUNT = getmapusers("006-1"); + if (mobcount("006-1", "Crazyfefe::OnPetDeath") <= 0) + goto L_NextRound; + // reset timer + initnpctimer; + end; + +// TODO +L_NextRound: + $@FIGHT_CAVE_LEVEL = $@FIGHT_CAVE_LEVEL + $@FIGHT_CAVE_PLAYER_COUNT; + if ($@FIGHT_CAVE_LEVEL >= 2200) + goto L_CleanUp; + + mapannounce "006-1", "The next round, with level " + $@FIGHT_CAVE_LEVEL + ", is starting with " + $@FIGHT_CAVE_PLAYER_COUNT + " player(s) left alive." , 0; + goto L_Summon; + +// TODO +L_Summon: + .@amount=($@FIGHT_CAVE_LEVEL/3); + for (.@i = 0; .@i < .@amount; ++.@i) { + .@mid=rand(1,15); + .@monsterId=Piou; + switch (.@mid) { + case 1: + .@monsterId = CaveMaggot ; break; + case 2: + .@monsterId = Wolvern ; break; + case 3: + .@monsterId = DarkLizard ; break; + case 4: + .@monsterId = MagicGoblin ; break; + case 5: + .@monsterId = Bandit ; break; + case 6: + .@monsterId = GreenSlime ; break; + case 7: + .@monsterId = LavaSlime ; break; + case 8: + .@monsterId = Snake ; break; + case 9: + .@monsterId = DesertBandit ; break; + case 10: + .@monsterId = Sarracenus ; break; + case 11: + .@monsterId = AngryRedScorpion ; break; + case 12: + .@monsterId = BlackScorpion ; break; + case 13: + .@monsterId = FallenGuard1 ; break; + case 14: + .@monsterId = Yeti ; break; + default: + .@monsterId = AngryScorpion ; break; + } + areamonster "006-1", 20, 20, 70, 60, "", .@monsterId, .@amount, "Crazyfefe::OnPetDeath"; + } + close; + +L_CleanUp: + npctalk3 "Game Over!"; + mapannounce "006-1", "Who will be the next to fall on Crazyfefe's Cave?", 0; + + areatimer 0, "006-1", 20, 20, 70, 60, 10, "Crazyfefe::OnReward"; + $@FIGHT_CAVE_LEVEL = 0; + $@FIGHT_CAVE_HERO$ = ""; + killmonster "006-1", "Crazyfefe::OnPetDeath"; + stopnpctimer; + end; + + + + + + + + +// Rewards surviving players, according to performance +OnReward: + if (ispcdead()) + end; + // TODO + Zeny=Zeny+($@FIGHT_CAVE_LEVEL); + getexp $@FIGHT_CAVE_LEVEL, 0; + dispbottom l("You've gained @@ GP and EXP", ($@FIGHT_CAVE_LEVEL)); + end; + +// Announces and attempts to start the fight once time run out +OnTimer300000: + if ($@FEFE_DELAY <= gettimetick(2)) goto L_StartFight; + announce $@FIGHT_CAVE_HERO$+" invites everyone to a challenge against Candor Cave. It'll start in "+FuzzyTime($@FEFE_DELAY,2,2)+". Prepare yourselves!", bc_all|bc_npc; + inittimer; + end; + +// Every 5 seconds, handle cave, if fighting. Does nothing when waiting. +OnTimer5000: + if ($@FIGHT_CAVE_LEVEL) + goto L_CaveLogic; + end; + +OnPetDeath: + end; + +OnInit: + .sex=G_OTHER; + .distance=5; + .price=8000; + .delay=(60*60*4); + end; +} diff --git a/npc/006-1/mapflags.txt b/npc/006-1/mapflags.txt new file mode 100644 index 000000000..7493f64db --- /dev/null +++ b/npc/006-1/mapflags.txt @@ -0,0 +1,2 @@ +006-1 mapflag nosave 005-1,61,54 +006-1 mapflag nopenalty diff --git a/npc/012-5/_import.txt b/npc/012-5/_import.txt index e65d06a2c..a6b89d2c1 100644 --- a/npc/012-5/_import.txt +++ b/npc/012-5/_import.txt @@ -1,3 +1,4 @@ // Map 012-5: Indoors // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/012-5/_warps.txt", +"npc/012-5/nicholas.txt", diff --git a/npc/012-5/nicholas.txt b/npc/012-5/nicholas.txt new file mode 100644 index 000000000..a98c0de94 --- /dev/null +++ b/npc/012-5/nicholas.txt @@ -0,0 +1,8 @@ +// TMW-2 Script +// Author: +// Jesusalva +// Description: +// Nicholas is Hurnscald's blakcsmith. He forges stuff, and sell ammo. + + + diff --git a/npc/_import.txt b/npc/_import.txt index 711de6aeb..970ee235c 100644 --- a/npc/_import.txt +++ b/npc/_import.txt @@ -39,6 +39,7 @@ @include "npc/005-5/_import.txt" @include "npc/005-6/_import.txt" @include "npc/005-7/_import.txt" +@include "npc/006-1/_import.txt" @include "npc/007-1/_import.txt" @include "npc/009-1/_import.txt" @include "npc/010-1-1/_import.txt" |