diff options
Diffstat (limited to 'npc')
-rw-r--r-- | npc/031-1_NivalisPort/angelaOutside.txt | 67 | ||||
-rw-r--r-- | npc/031-1_NivalisPort/house.txt | 2 | ||||
-rw-r--r-- | npc/031-3_Cave/cindyCave.txt | 95 |
3 files changed, 148 insertions, 16 deletions
diff --git a/npc/031-1_NivalisPort/angelaOutside.txt b/npc/031-1_NivalisPort/angelaOutside.txt index 3c10df46..7bb02d71 100644 --- a/npc/031-1_NivalisPort/angelaOutside.txt +++ b/npc/031-1_NivalisPort/angelaOutside.txt @@ -13,16 +13,6 @@ set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT); -//TODO: remove DEBUG - mes "This menu is for debugging and will be removed"; - menu - "normal", L_normal, - "reset quest", -; - set @rescue_Cindy, 0; - callsub S_Update_Mask; - -L_normal: -////////////////////////////////// if (@rescue_Cindy > 3) goto L_Please_Visit_Again; if (@rescue_Cindy > 1) goto L_Please_Visit; if (@rescue_Cindy == 1) goto L_Please_Help; @@ -74,7 +64,7 @@ L_Menu_Potion: L_Calm_Down: if (countitem("ConcentrationPotion") == 0) goto L_No_Potion; delitem "ConcentrationPotion", 1; - mes "She drinks the concentration potions and calm down."; + mes "She drinks the concentration potions and calms down."; mes "[Angela]"; mes "\"Thank you, this was helpful.\""; next; @@ -121,11 +111,64 @@ S_Update_Mask: return; } +031-1.gat,80,25,0 script Debug 154, { +//TODO: remove DEBUG + set @Q_Nivalis_state_MASK, NIBBLE_5_MASK; + set @Q_Nivalis_state_SHIFT, NIBBLE_5_SHIFT; + set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT); + + mes "This menu is for debugging and will be removed"; + menu + "close", L_close, + "reset quest", -, + "magic", magic; + set @rescue_Cindy, 0; + callsub S_Update_Mask; + mes "quest variable is now " + @rescue_Cindy; + close; +L_close: + close; - +magic: + // Set up SkillUp function general magic + set @SUP_id, SKILL_MAGIC; + set @SUP_name$, "Magic"; + + set @SUP_xp, 5000; + set @SUP_lvl, 2; + callfunc "SkillUp"; + + // Set up SkillUp function war magic + set @SUP_id, SKILL_MAGIC_WAR; + set @SUP_name$, "War Magic"; + + set @SUP_xp, 5000; + set @SUP_lvl, 2; + callfunc "SkillUp"; + + // Set up SkillUp function life magic + set @SUP_id, SKILL_MAGIC_LIFE; + set @SUP_name$, "Life Magic"; + + set @SUP_xp, 5000; + set @SUP_lvl, 2; + callfunc "SkillUp"; + + mes "Lightning invocation: " + getspellinvocation("lightning-strike"); + mes "Flare-dart invocation: " + getspellinvocation("flare-dart"); + mes "Lesser-heal invocation: " + getspellinvocation("lesser-heal"); + mes "Lay-on-hands invocation: " + getspellinvocation("lay-on-hands"); + close; + +S_Update_Mask: + set QUEST_Nivalis_state, + (QUEST_Nivalis_state & ~(@Q_Nivalis_state_MASK)) + | (@rescue_Cindy << @Q_Nivalis_state_SHIFT); + return; +} diff --git a/npc/031-1_NivalisPort/house.txt b/npc/031-1_NivalisPort/house.txt index c81185d3..d9714ef5 100644 --- a/npc/031-1_NivalisPort/house.txt +++ b/npc/031-1_NivalisPort/house.txt @@ -9,7 +9,7 @@ set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT); if (@rescue_Cindy > 2) goto L_Warp; - mes "The door is locked."; + message strcharinfo(0), "The door is locked."; close; L_Warp: 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)) |