diff options
Diffstat (limited to 'npc/031-3_Cave')
-rw-r--r-- | npc/031-3_Cave/cindyCave.txt | 95 |
1 files changed, 92 insertions, 3 deletions
diff --git a/npc/031-3_Cave/cindyCave.txt b/npc/031-3_Cave/cindyCave.txt index 738868d6..77046422 100644 --- a/npc/031-3_Cave/cindyCave.txt +++ b/npc/031-3_Cave/cindyCave.txt @@ -7,6 +7,8 @@ //TODO: picture 031-3.gat,122,51,0 script Cindy 114, { + if ($@FIGHT_YETI_STATUS != 0) goto L_Yeti; + set @KEYS_AMOUNT, 10; set @Q_Nivalis_state_MASK, NIBBLE_5_MASK; @@ -52,12 +54,33 @@ L_Try_Cage: mes "You get an uncomfortable feeling and Cindy starts to shiver."; next; mes "\"Oh no, the Yetis...\""; + if ($@FIGHT_YETI_STATUS != 0) goto L_Yeti; + + // initialize fight + set $@FIGHT_YETI_STATUS, 1; + set $@FIGHT_YETI_WAVE, 1; + set $@FIGHT_YETI_PLAYER_COUNT, getareausers("031-3.gat", 80, 20, 160, 90); + + startnpctimer; + goto L_Exit; + +//TODO: remove //TODO: start the battle and set state2 in case of success mes "DEBUG: ADD YETIFIGHT HERE, QUEST VARIABLE INCREASED"; set @rescue_Cindy, 2; callsub S_Update_Mask; close; - + +//TODO: why close and end? +L_Exit: + close; + end; + +L_Yeti: + mes "[Cindy]"; + mes "\"Watch out, the Yetis!\""; + close; + L_Reward: mes "[Cindy]"; mes "\"You are a hero! All this strong monsters!\""; @@ -70,8 +93,8 @@ L_Reward: set @reward, rand(1); if (@reward == 1) goto L_Wizard_Hat; //TODO: set right, when quarterstaff is in item_db - //getitem "QuarterStaff", 1; - mes "DEBUG: GET ACORN INSTEAD OF QUARTERSTAFF"; + //getitem "WoodenStaff", 1; + mes "DEBUG: GET ACORN INSTEAD OF WOODENSTAFF"; getitem "acorn", 1; goto L_Visit; @@ -102,6 +125,72 @@ L_Full_Inv: mes "\"Oh, it seems you carry so much stuff - I will keep it for you until you can take it.\""; close; +// Fight logic +OnTimer5000: + setnpctimer 0; + if ($@FIGHT_YETI_STATUS != 0) goto L_CaveLogic; +L_Return_1: + set $@FIGHT_YETI_PLAYER_COUNT, 0; + areatimer "031-3.gat", 80, 20, 160, 90, 10, "Cindy::onTick"; + end; + +L_CaveLogic: + set $@FIGHT_YETI_ROUND_PEN, $@FIGHT_YETI_PLAYER_COUNT; + if ($@FIGHT_YETI_ROUND_PEN > 60) set $@FIGHT_YETI_ROUND_PEN, 60; + if ($@FIGHT_YETI_PLAYER_COUNT <= 0) goto L_CleanUp; + set $@FIGHT_YETI_ROUND_TIMER, $@FIGHT_YETI_ROUND_TIMER + 5; // Advance 5 seconds + if (mobcount("031-3.gat", "Cindy::onPetDeath") <= 0) goto L_NextWave; + if ($@FIGHT_YETI_ROUND_TIMER + $@FIGHT_YETI_ROUND_PEN >= 120) goto L_NextWave; + goto L_Return_1; + +L_NextWave: + set $@FIGHT_YETI_ROUND_TIMER, 0; + + set $@FIGHT_YETI_WAVE, $@FIGHT_YETI_WAVE + 1; + if ($@FIGHT_YETI_WAVE >= 10) goto L_CleanUp; +//TODO: adjust number of yetis spawned + set $@FIGHT_YETI_NUMBER, $@FIGHT_YETI_WAVE + $@FIGHT_YETI_WAVE * $@FIGHT_YETI_PLAYER_COUNT/30; + + set $@YETI_SUMMON, 0; + + areamonster "031-3.gat", 80, 20, 160, 90, "", 1072, $@FIGHT_YETI_NUMBER, "Cindy::onPetDeath"; + goto L_Return_1; + +// Called on each player once every 5 seconds +onTick: + if (isdead(0)) end; + set $@FIGHT_YETI_PLAYER_COUNT, $@FIGHT_YETI_PLAYER_COUNT + 1; + end; + +onPetDeath: + end; + +onInit: + initnpctimer; + stopnpctimer; +L_CleanUp: + areatimer "031-3.gat", 80, 20, 160, 90, 10, "Cindy::onReward"; + set $@FIGHT_YETI_STATUS, 0; + set $@FIGHT_YETI_PLAYER_COUNT, 0; + set $@FIGHT_YETI_WAVE, 1; + set $@FIGHT_YETI_ROUND_TIMER, 0; + killmonster "031-3.gat", "Cindy::onPetDeath"; + stopnpctimer; + setnpctimer 0; + end; + +onReward: + if (isdead(0)) end; +//TODO: determine, if and how many boss points should be added + set BOSS_POINTS, BOSS_POINTS + 100; +//TODO: check, if two messages for the player works + message strcharinfo(0), "You gain 100 Boss Points giving you a total of " + BOSS_POINTS; + set @rescue_Cindy, 2; + callsub S_Update_Mask; + message strcharinfo(0), "Cindy looks relieved and as if she wants to talk with you."; + end; + +///////// S_Update_Mask: set QUEST_Nivalis_state, (QUEST_Nivalis_state & ~(@Q_Nivalis_state_MASK)) |