diff options
Diffstat (limited to 'npc')
-rw-r--r-- | npc/023-3/logic.txt | 412 |
1 files changed, 206 insertions, 206 deletions
diff --git a/npc/023-3/logic.txt b/npc/023-3/logic.txt index 9917302e8..3968de1dd 100644 --- a/npc/023-3/logic.txt +++ b/npc/023-3/logic.txt @@ -1,211 +1,211 @@ // TMW2 scripts. // Author: -// Jesusalva +// Jesusalva // Description: -// 023-3 Abandoned Ice Caves Configuration File. Variables: $@LOGIC_0233BOSS +// 023-3 Abandoned Ice Caves Configuration File. Variables: $@LOGIC_0233BOSS 023-3 mapflag zone MMO 023-3,63,220,0 script #Exit0233 NPC_HIDDEN,0,0,{ - end; + end; OnTouch: - .@q=getq(General_Narrator); - .@q2=getq2(General_Narrator); - // Cheater Detected - if (.@q < 15) { - warp "Save", 0, 0; - percentheal -100, -100; - end; - } + .@q=getq(General_Narrator); + .@q2=getq2(General_Narrator); + // Cheater Detected + if (.@q < 15) { + warp "Save", 0, 0; + percentheal -100, -100; + end; + } mesc l("Return to Frostia's Castle?"); if (askyesno() == ASK_YES) { .@mapn$="024-16"; - warp .@mapn$, 30, 26; + warp .@mapn$, 30, 26; } closeclientdialog; close; } 023-3,48,22,0 script #Finish0233 NPC_HIDDEN,0,0,{ - end; + end; OnTouch: - .@q=getq(General_Narrator); - .@q2=getq2(General_Narrator); - // Cheater Detected - if (.@q < 15) { - warp "Save", 0, 0; - percentheal -100, -100; - end; - } + .@q=getq(General_Narrator); + .@q2=getq2(General_Narrator); + // Cheater Detected + if (.@q < 15) { + warp "Save", 0, 0; + percentheal -100, -100; + end; + } // Not allowed to proceed - if (.@q > 15) { + if (.@q > 15) { dispbottom l("Hmm, no, I shouldn't go back there..."); end; } .@mapn$="001-7"; - warp .@mapn$, 91, 90; - end; + warp .@mapn$, 91, 90; + end; } // A simple random treasure chest - to be sure players were introduced to this // awesome system. Same rules as any treasure box still applies. 023-3,94,212,0 script #chest_02330 NPC_CHEST,{ - TreasureBox(); - specialeffect(.dir == 0 ? 24 : 25, AREA, getnpcid()); // closed ? opening : closing - close; + TreasureBox(); + specialeffect(.dir == 0 ? 24 : 25, AREA, getnpcid()); // closed ? opening : closing + close; OnInit: - .distance = 2; - end; + .distance = 2; + end; } // Miniboss fight must be enabled on right npc. No passing before that. 023-3,120,103,0 script #MiniBossTrap0233 NPC_HIDDEN,0,2,{ - end; + end; OnTouch: - .@q=getq(FrostiaQuest_Homunculus); - if (!.@q) { - dispbottom l("A powerful magic barrier repels you!"); - getmapxy(.@m$, .@x, .@y, 0); - slide .@x-2, .@y; - sit(); - } - end; + .@q=getq(FrostiaQuest_Homunculus); + if (!.@q) { + dispbottom l("A powerful magic barrier repels you!"); + getmapxy(.@m$, .@x, .@y, 0); + slide .@x-2, .@y; + sit(); + } + end; } // The scout which went ahead of you (+ miniboss mechanics) 023-3,86,88,0 script Elite Scout#MB0233 NPC_DARKSABER,{ - if ($@LOGIC_0233BOSS) { - npctalkonce l("FIGHT!"); - end; - } - if (getq(FrostiaQuest_Homunculus) >= 1) { - npctalkonce l("I'm not going any closer to that cursed place!"); - end; - } - mesn; - mesq l("Congratulations in making this far, @@.", strcharinfo(0)); - next; - select - l("Thanks, and bye."), - l("What should I do now?"); - if (@menu == 1) - close; - mes ""; - mesn; - mesq l("So, there is a magical barrier to the right, which is in place exactly to protect us."); - next; - mesn; - mesq l("Past this checkpoint, is the village where the Monster King was born."); - next; - mesn; - mesq l("If you want to pass through it, you'll need to defeat the Guardian which made the seal. You can bring friends for healing and support."); - next; - mesn; - mesq l("Once the fight begins, the barrier at your left will lock. It won't open until the fight is over."); - next; - mesn; - mesq l("Are you ready?"); - mesc l("WARNING: DO NOT PROCEED UNLESS YOU'RE READY."), 1; - if (askyesno() == ASK_YES && !$@LOGIC_0233BOSS) { - $@LOGIC_0233BOSS=getcharid(3); // It could be 1. - $@LOGIC_0233BOXX=monster("023-3", any(85,94,103,113), any(91,96,102,111), "Guardian", Yeti, 1, .name$+"::OnYetiDefeat"); - initnpctimer; - } - closeclientdialog; - end; + if ($@LOGIC_0233BOSS) { + npctalkonce l("FIGHT!"); + end; + } + if (getq(FrostiaQuest_Homunculus) >= 1) { + npctalkonce l("I'm not going any closer to that cursed place!"); + end; + } + mesn; + mesq l("Congratulations in making this far, @@.", strcharinfo(0)); + next; + select + l("Thanks, and bye."), + l("What should I do now?"); + if (@menu == 1) + close; + mes ""; + mesn; + mesq l("So, there is a magical barrier to the right, which is in place exactly to protect us."); + next; + mesn; + mesq l("Past this checkpoint, is the village where the Monster King was born."); + next; + mesn; + mesq l("If you want to pass through it, you'll need to defeat the Guardian which made the seal. You can bring friends for healing and support."); + next; + mesn; + mesq l("Once the fight begins, the barrier at your left will lock. It won't open until the fight is over."); + next; + mesn; + mesq l("Are you ready?"); + mesc l("WARNING: DO NOT PROCEED UNLESS YOU'RE READY."), 1; + if (askyesno() == ASK_YES && !$@LOGIC_0233BOSS) { + $@LOGIC_0233BOSS=getcharid(3); // It could be 1. + $@LOGIC_0233BOXX=monster("023-3", any(85,94,103,113), any(91,96,102,111), "Guardian", Yeti, 1, .name$+"::OnYetiDefeat"); + initnpctimer; + } + closeclientdialog; + end; // Check if fight is still going on OnTimer10000: - if (!attachrid($@LOGIC_0233BOSS)) { - killmonster("023-3", .name$+"::OnYetiDefeat"); - $@LOGIC_0233BOSS=0; - end; - } - // You gave up, finish it now and not later - if (getmap() != "023-3") { - killmonster("023-3", .name$+"::OnYetiDefeat"); - $@LOGIC_0233BOSS=0; - end; - } - // What if the Yeti left the chamber? O.o - // It's not like there was mob collision to prevent this from happening - // If that's the case, bring the Yeti to player position and order attack :> - getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@LOGIC_0233BOXX); - getmapxy(.@mx$, .@xx, .@yx, 0); - if (!(is_between(79, 120, .@x) && is_between(75, 125, .@y))) { - unitwarp($@LOGIC_0233BOXX, .@mx$, .@xx, .@yx); - unitattack($@LOGIC_0233BOXX, $@LOGIC_0233BOSS); - unittalk($@LOGIC_0233BOXX, "I did not forgot you, @@! %%e", strcharinfo(0)); - end; - } - initnpctimer; - end; + if (!attachrid($@LOGIC_0233BOSS)) { + killmonster("023-3", .name$+"::OnYetiDefeat"); + $@LOGIC_0233BOSS=0; + end; + } + // You gave up, finish it now and not later + if (getmap() != "023-3") { + killmonster("023-3", .name$+"::OnYetiDefeat"); + $@LOGIC_0233BOSS=0; + end; + } + // What if the Yeti left the chamber? O.o + // It's not like there was mob collision to prevent this from happening + // If that's the case, bring the Yeti to player position and order attack :> + getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@LOGIC_0233BOXX); + getmapxy(.@mx$, .@xx, .@yx, 0); + if (!(is_between(79, 120, .@x) && is_between(75, 125, .@y))) { + unitwarp($@LOGIC_0233BOXX, .@mx$, .@xx, .@yx); + unitattack($@LOGIC_0233BOXX, $@LOGIC_0233BOSS); + unittalk($@LOGIC_0233BOXX, "I did not forgot you, @@! %%e", strcharinfo(0)); + end; + } + initnpctimer; + end; // Yeti Defeated OnYetiDefeat: - stopnpctimer; - .@rid=$@LOGIC_0233BOSS; - $@LOGIC_0233BOSS=0; - // In past, only MVP would count. Now, the requester count. - if (playerattached()) - detachrid(); - // Player decided to leave the game, annuled - if (!attachrid(.@rid)) - end; - // Player decided to leave for a walk, annuled - if (!isin("023-3", 79, 75, 120, 125)) - end; - - // We don't need compareandsetq because it's now the requester - message(.@rid, l("You've slayed the Yeti.")); - npctalk l("Good luck in your journey, @@.", rid2name(.@rid)); - setq FrostiaQuest_Homunculus, 1; - - end; + stopnpctimer; + .@rid=$@LOGIC_0233BOSS; + $@LOGIC_0233BOSS=0; + // In past, only MVP would count. Now, the requester count. + if (playerattached()) + detachrid(); + // Player decided to leave the game, annuled + if (!attachrid(.@rid)) + end; + // Player decided to leave for a walk, annuled + if (!isin("023-3", 79, 75, 120, 125)) + end; + + // We don't need compareandsetq because it's now the requester + message(.@rid, l("You've slayed the Yeti.")); + npctalk l("Good luck in your journey, @@.", rid2name(.@rid)); + setq FrostiaQuest_Homunculus, 1; + + end; OnInit: - .distance = 5; - end; + .distance = 5; + end; } // Cannot flee from Miniboss Fight 023-3,80,84,0 script #MiniBossTrapB0233 NPC_HIDDEN,5,0,{ - end; + end; OnTouch: - .@q=getq(FrostiaQuest_Homunculus); - .@q2=getq(FrostiaQuest_Homunculus); - if ($@LOGIC_0233BOSS) { - dispbottom l("A powerful magic barrier repels you!"); - slide 81, 86; - sit(); - } - end; + .@q=getq(FrostiaQuest_Homunculus); + .@q2=getq(FrostiaQuest_Homunculus); + if ($@LOGIC_0233BOSS) { + dispbottom l("A powerful magic barrier repels you!"); + slide 81, 86; + sit(); + } + end; } // A not-so-simple treasure chest from Sagratha's Dungeon 023-3,0,0,0 script #0233ChestCtrl NPC_HIDDEN,{ - end; + end; OnDelay: - initnpctimer; - end; + initnpctimer; + end; OnTimer180000: - stopnpctimer; + stopnpctimer; OnInit: - setarray .@x, 189, 191, 193, 186; - setarray .@y, 44, 42, 43, 45; - .@r=rand2(getarraysize(.@x)); - monster "023-3", .@x[.@r], .@y[.@r], "Treasure Chest", any(BronzeChest,BronzeMimic,SilverChest,SilverMimic,GoldenChest,GoldenMimic), 1, "#0233ChestCtrl::OnDelay"; - end; + setarray .@x, 189, 191, 193, 186; + setarray .@y, 44, 42, 43, 45; + .@r=rand2(getarraysize(.@x)); + monster "023-3", .@x[.@r], .@y[.@r], "Treasure Chest", any(BronzeChest,BronzeMimic,SilverChest,SilverMimic,GoldenChest,GoldenMimic), 1, "#0233ChestCtrl::OnDelay"; + end; } // TODO: Spike traps and etc. at the corritor @@ -214,116 +214,116 @@ OnInit: // Delete rolling stones as they hit this wall /*023-3,47,40,0 script #0233DelStone NPC_HIDDEN,1,0,{ OnTouch: - end; + end; OnTouchNPC: - //percentheal -100, -100; - //unitkill(0); - unitwarp(0, "023-3", 42, 26); - end; + //percentheal -100, -100; + //unitkill(0); + unitwarp(0, "023-3", 42, 26); + end; } // TODO: Rolling Stone core 023-3,0,0,0 script #0233RollStone NPC_HIDDEN,{ - end; + end; OnInit: - $@0233_STONEA=monster("023-3", 47, 23, "Rolling Stone", RollingStone, 1); - $@0233_STONEB=monster("023-3", 48, 25, "Rolling Stone", RollingStone, 1); - $@0233_STONEC=monster("023-3", 47, 30, "Rolling Stone", RollingStone, 1); - $@0233_STONED=monster("023-3", 48, 37, "Rolling Stone", RollingStone, 1); - initnpctimer; - end; + $@0233_STONEA=monster("023-3", 47, 23, "Rolling Stone", RollingStone, 1); + $@0233_STONEB=monster("023-3", 48, 25, "Rolling Stone", RollingStone, 1); + $@0233_STONEC=monster("023-3", 47, 30, "Rolling Stone", RollingStone, 1); + $@0233_STONED=monster("023-3", 48, 37, "Rolling Stone", RollingStone, 1); + initnpctimer; + end; OnTimer250: - unitwalk($@0233_STONEA, 47, 40); - unitwalk($@0233_STONEC, 47, 40); - unitwalk($@0233_STONEB, 48, 40); - unitwalk($@0233_STONED, 48, 40); + unitwalk($@0233_STONEA, 47, 40); + unitwalk($@0233_STONEC, 47, 40); + unitwalk($@0233_STONEB, 48, 40); + unitwalk($@0233_STONED, 48, 40); - getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@0233_STONEA); - if (.@y >= 40) - unitwarp($@0233_STONEA, "023-3", 47, 23); + getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@0233_STONEA); + if (.@y >= 40) + unitwarp($@0233_STONEA, "023-3", 47, 23); - getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@0233_STONEB); - if (.@y >= 40) - unitwarp($@0233_STONEB, "023-3", 48, 23); + getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@0233_STONEB); + if (.@y >= 40) + unitwarp($@0233_STONEB, "023-3", 48, 23); - getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@0233_STONEC); - if (.@y >= 40) - unitwarp($@0233_STONEC, "023-3", 47, 23); + getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@0233_STONEC); + if (.@y >= 40) + unitwarp($@0233_STONEC, "023-3", 47, 23); - getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@0233_STONED); - if (.@y >= 40) - unitwarp($@0233_STONED, "023-3", 48, 23); + getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@0233_STONED); + if (.@y >= 40) + unitwarp($@0233_STONED, "023-3", 48, 23); - initnpctimer; - end; + initnpctimer; + end; } */ // TODO: NPC walking cannot trigger OnTouch events >.> 023-3,47,23,0 script #0233RollStoneA NPC_ROLLINGSTONE,0,0,{ - end; + end; OnInit: - npcspeed(240); - initnpctimer; - npcwalkto(47, 41); - end; + npcspeed(240); + initnpctimer; + npcwalkto(47, 41); + end; OnTimer120: - if (.y >= 40) { - movenpc(.name$, 47, 23); - npcwalkto(47, 41); - } + if (.y >= 40) { + movenpc(.name$, 47, 23); + npcwalkto(47, 41); + } if (getareausers("023-3", 0)) { areatimer2("023-3", .x, .y, .x, .y, 10, .name$+"::OnTouchie"); } - initnpctimer; - end; + initnpctimer; + end; OnTouchie: - if (isin(.map$, .x, .y, 0)) { - percentheal -40, -40; - slide 49, 41; - } - end; + if (isin(.map$, .x, .y, 0)) { + percentheal -40, -40; + slide 49, 41; + } + end; OnTouchNPC: - sc_start SC_COMA, 60000, 0; - end; + sc_start SC_COMA, 60000, 0; + end; } 023-3,48,26,0 script #0233RollStoneB NPC_ROLLINGSTONE,0,0,{ - end; + end; OnInit: - npcspeed(240); - initnpctimer; - npcwalkto(49, 41); - end; + npcspeed(240); + initnpctimer; + npcwalkto(49, 41); + end; OnTimer120: - if (.y >= 40) { - movenpc(.name$, 48, 23); - npcwalkto(48, 41); - } + if (.y >= 40) { + movenpc(.name$, 48, 23); + npcwalkto(48, 41); + } if (getareausers("023-3", 0)) { areatimer2("023-3", .x, .y, .x, .y, 10, .name$+"::OnTouchie"); } - initnpctimer; - end; + initnpctimer; + end; OnTouchie: - if (isin(.map$, .x, .y, 0)) { - percentheal -40, -40; - slide 49, 41; - } - end; + if (isin(.map$, .x, .y, 0)) { + percentheal -40, -40; + slide 49, 41; + } + end; OnTouchNPC: - sc_start SC_COMA, 60000, 0; - end; + sc_start SC_COMA, 60000, 0; + end; } 023-3,47,30,0 duplicate(#0233RollStoneA) #0233RollStoneC NPC_ROLLINGSTONE,0,0 |