// TMW2 Scripts // Author: // Jesusalva // Description: // Controls Elenium Mines, specially the instances // Main Controller for Instanced maps 018-6-1,0,0,0 script #01861_InstCtrl NPC_HIDDEN,{ end; // Map, x, y, width, height, mob, amount function AreaMonsterB { .@m$=getarg(0); .@x1=getarg(1); .@x2=.@x1+getarg(3); .@y1=getarg(2); .@y2=.@y1+getarg(4); .@mi=getarg(5); .@am=getarg(6); areamonster(.@m$, .@x1, .@y1, .@x2, .@y2, strmobinfo(1, .@mi), .@mi, .@am, instance_npcname(.name$)+"::OnKill"+.@mi); return; } // (var, value) function SetIfVoid { if (!getarg(0)) return getarg(1); return 0; } // Bifs won't respawn OnKill1226: OnKill1227: OnKill1228: end; // Others: Wait 30 seconds and respawn OnKill1178: .@mi=SetIfVoid(.@mi, 1178); OnKill1051: .@mi=SetIfVoid(.@mi, 1051); OnKill1074: .@mi=SetIfVoid(.@mi, 1074); OnKill1123: .@mi=SetIfVoid(.@mi, 1123); OnKill1176: .@mi=SetIfVoid(.@mi, 1176); OnKill1026: .@mi=SetIfVoid(.@mi, 1026); // Common utils /* // Respawn monster after 30s getmapxy(.@m$, .@x, .@y, 0); sleep(30000); AreaMonsterB(.@m$, .@x-2, .@y-2, 4, 4, .@mi, 1); */ end; OnInstanceInit: // Generate map ID getmapxy(.@m$, .@x, .@y, UNITTYPE_NPC); // Bif monsters AreaMonsterB(.@m$, 40, 49, 7, 8, BigEleniumBif, 5); AreaMonsterB(.@m$, 95, 51, 7, 8, BigEleniumBif, 5); AreaMonsterB(.@m$, 145, 83, 6, 5, EleniumBif, 5); AreaMonsterB(.@m$, 62, 86, 6, 5, EleniumBif, 5); AreaMonsterB(.@m$, 65, 130, 6, 5, EleniumBif, 5); AreaMonsterB(.@m$, 125, 158, 6, 5, SmallEleniumBif, 4); AreaMonsterB(.@m$, 129, 183, 6, 5, SmallEleniumBif, 4); AreaMonsterB(.@m$, 34, 181, 5, 5, SmallEleniumBif, 4); // Common Monsters AreaMonsterB(.@m$, 80, 172, 54, 25, BlackSlime, 16); AreaMonsterB(.@m$, 89, 167, 54, 25, DarkLizard, 8); AreaMonsterB(.@m$, 96, 103, 56, 29, BlackScorpion, 17); AreaMonsterB(.@m$, 101, 105, 54, 25, MountainSnake, 9); AreaMonsterB(.@m$, 70, 45, 44, 25, WickedMushroom, 14); AreaMonsterB(.@m$, 68, 45, 31, 21, Archant, 7); end; } ///////////////////////////// 018-6-1,83,26,0 script #ToForgottenChamber NPC_SUMMONING_CIRC,0,0,{ dispbottom l("It looks dangerous."); end; OnTouch: .@q=getq(LoFQuest_Barbara); .@q2=getq2(LoFQuest_Barbara); .@q3=getq3(LoFQuest_Barbara); // Skipped cutscenes, show you the EXIT if (.@q == 1 && .@q3 != 1) cwarp "017-1", 32, 45; if (.@q >= 1) { warp BarbaraInstCheck(0), 90, 91; // Complete the first arc if possible if (.@q == 1) { setnpcdialogtitle l("Forgotten Chamber"); mesn l("Forgotten Chamber"); mesq l("You see yourself in a strange chamber. Strange drawings litter the walls."); next; mesn l("Forgotten Chamber"); mesq l("You can see in distance two portals working, and two portals offline."); next; mesn l("Forgotten Chamber"); mesq l("It seems to be a puzzle, you can only imagine what needs to be done in order to enable the right portals."); next; setq1 LoFQuest_Barbara, 2; setq3 LoFQuest_Barbara, 0; closeclientdialog; } // Update M0 NPCs based on quest state if (.@q > 2) enablenpc instance_npcname("#ToForgottenShrine", .@q2); if (.@q == 2) { // Note: state 64 and 128 are temporary and must be removed if (.@q3 & 64) setq3 LoFQuest_Barbara, .@q3^64; // Safety update .@q3=getq3(LoFQuest_Barbara); if (.@q3 & 128) setq3 LoFQuest_Barbara, .@q3^128; // Safety update .@q3=getq3(LoFQuest_Barbara); if (.@q3 == 5) enablenpc instance_npcname("#ToForgottenShrine", .@q2); if (.@q3 == 3) enablenpc instance_npcname("#ToSouthHall", .@q2); } } else { Exception("ERROR, YOU SHOULD NOT BEEN SEEING THIS. 018-6-1.TFC"); } end; OnInit: disablenpc .name$; end; } ///////////////////////////// Minievents 018-6-1,128,131,0 script Wounded Soldier#01861 NPC_GUARD_DEAD,{ //npctalk3 l("Please find her and don't worry with me! And be careful!"); npctalk3 l("*scream in pain*"); close; OnMain: setpcblock(PCBLOCK_HARD, true); mesc l("STORY MODE ENABLED. Monsters won't attack you, so you can read without worries."), 1; next; showavatar NPC_GUARD_DEAD; mesn l("Wounded Soldier"); mesq l("Hey, you! Are you here on Kenton's orders?!"); next; setnpcdialogtitle l("Benjamin, Wounded Soldier"); mesn l("Benjamin, Wounded Soldier"); mesq l("My name is Benjamin, and I was in charge of an incursion here to capture Barbara."); next; mesn l("Benjamin, Wounded Soldier"); mesq l("My unit, however, was attacked! %s snuck up on us!", b(l("An assassin"))); mesc l("You help Benjamin in getting up."); next; mesn l("Benjamin, Wounded Soldier"); mesq l("I hope my men are safe, that was yesterday. I am barely alive."); mesc l("You know what is worse? THIS WHOLE CAVE HAVE DEATH PENALTY ON!!!"), 1; next; mesn l("Benjamin, Wounded Soldier"); mesq l("I shall report to Kenton. I now entrust this quest in your hands!"); next; mesn l("Benjamin, Wounded Soldier"); mesq l("And please, bring those criminals to justice! Barbara and the Assassin!"); next; mesc l("With a wave, Benjamin returns to report Kenton about the outcome."); setq3 LoFQuest_Barbara, 1; disablenpc instance_npcname(.name$); // NPC will now go to rest setpcblock(PCBLOCK_HARD, false); showavatar; close; OnInit: .sex=G_MALE; disablenpc .name$; end; OnInstanceInit: if ($@GM_OVERRIDE) setnpcdisplay instance_npcname(.name$), NPC_WOUNDEDSOLDIER; disablenpc instance_npcname(.name$); end; } // Event trigger 018-6-1,121,132,0 script #01861TriggerWS1 NPC_HIDDEN, 0, 10,{ end; OnTouch: .@q=getq(LoFQuest_Barbara); .@q2=getq2(LoFQuest_Barbara); .@q3=getq3(LoFQuest_Barbara); if (.@q == 1 && .@q3 == 0) { enablenpc instance_npcname("Wounded Soldier#01861", .@q2); addtimer2(500, instance_npcname("Wounded Soldier#01861", .@q2)+"::OnMain"); } end; OnInit: disablenpc .name$; end; } ///////////////////////////// Minievents 018-6-1,89,70,0 script Barbara#01861 NPC_INJURIED_GIRL,{ //npctalk3 l("Please find her and don't worry with me! And be careful!"); npctalk3 l("*scream in pain*"); close; OnMain: slide 84, 71; // Safety showavatar NPC_INJURIED_GIRL; // this is handled by avatars.xml .@q=getq(LoFQuest_Barbara); .@q2=getq2(LoFQuest_Barbara); .@q3=getq3(LoFQuest_Barbara); sleep2(50); // Barbara was taken hostage or murdered - save this data @evil=0; // Temporary variable to show the murder option or not setnpcdialogtitle l("Wounded Girl"); mesn l("Wounded Girl"); mesq l("..."); next; mesn l("Wounded Girl"); mesq l("...I guess I can't hide anymore..."); next; sshake(rand2(3,5), false); mesn l("Wounded Girl"); mesq l("Ah!"); next; setnpcdialogtitle l("Barbara, Wounded Girl"); mesn l("Barbara, Wounded Girl"); mesq l("Sorry, I haven't seen you. My name is Barbara."); next; select l("My name is ")+strcharinfo(0), l("I'm here to arrest you."); mes ""; if (@menu == 1) { mesn l("Barbara, Wounded Girl"); mesq l("Pleased to meet you. What brings you down here?"); next; mesn strcharinfo(0); mesq l("I'm here to arrest a criminal."); next; } else { @evil+=1; } mesn l("Barbara, Wounded Girl"); mesq l("Please spare me. I'm gravely wounded. I'm innocent, I swear!"); next; select l("Why should I spare you?"), l("Where is the item you've stolen?"); mes ""; mesn l("Barbara, Wounded Girl"); mesq l("I... I confess. I did steal an apple. I was hungry! I am very poor."); next; mesn l("Barbara, Wounded Girl"); mesq l("My family died when I was just a little girl... I have been trying to survive..."); next; select l("Cut the chat short and go straight to the point!"), l("I'm listening, but don't hope me to buy your story."); mes ""; if (@menu == 2) { mesn l("Barbara, Wounded Girl"); mesq l("You know, if you're poor, you can't get too close to the Noble district."); next; mesn l("Barbara, Wounded Girl"); mesq l("They left me no inheritance, either. Even surviving has been a struggle. I'm not strong enough to kill the living potatoes for @@.", getitemlink(Potatoz)); next; mesn l("Barbara, Wounded Girl"); mesq l("The monsters here are too strong, and as I said before, I can't get close to the Transcendence Portal nor to get training."); next; select l("I'm not here to listen stories, I need you to return what you've stole."); } else { @evil+=1; } mesn l("Barbara, Wounded Girl"); mesq l("I can't give you the Apple I've stole. Because, I was stolen first!"); next; select l("I don't believe you."), l("Let's say I believe you. Who stole you? Benjamin?"); mes ""; if (@menu == 1) { mesn l("Barbara, Wounded Girl"); mesq l("But- But you have to! It is the ")+b(l("truth"))+"!"; next; select l("And whom do you claim to be the thief?"), rif(@evil, l("[Kill her]")), l("Barbara. You're under arrest by Kenton's orders. Please surrend peacefully."); mes ""; @evil+=1; switch (@menu) { case 2: mesn l("Barbara, Wounded Girl"); mesq l("OH MY, PLEASE DON'T!"); next; mesn l("Barbara, Wounded Girl"); mesq l("I NEVER TOUCHED THE SOUL MENHIR! I SWEAR YOU, I'M INNOCENT! PLEASE HAVE MERCY!!"); next; mesc l("Really kill Barbara?"), 1; mesc l("WARNING: THIS ACTION IS IRREVERSIBLE."), 1; if (askyesno() == ASK_YES) { mes ""; mesc l("She falls in a single blow. You'll attribute her death to the Mysterious Assassin."); BARBARA_STATE=1; setq1 LoFQuest_Barbara, 5; disablenpc instance_npcname(.name$); // NPC will now go to rest close; } else { @evil=false; mesn l("Barbara, Wounded Girl"); mesc l("*sigh*"); mesq l("Thank you..."); next; } break; case 3: mesn l("Barbara, Wounded Girl"); mesq l("...I have no other choice, do I?"); next; mesn l("Barbara, Wounded Girl"); mesq l("But be warned, I don't have the Apple with me. It must be further in."); // The quest is not over yet - do not set BARBARA_STATE setq1 LoFQuest_Barbara, 5; disablenpc instance_npcname(.name$); // NPC will now go to rest close; break; } } else { mesn l("Barbara, Wounded Girl"); mesq l("Oh no, Benjamin is a city guard, he would never do that. I hope."); next; } L_MainStory: mesn l("Barbara, Wounded Girl"); mesq l("A hooded man attacked me, and left me in this state."); next; mesn l("Barbara, Wounded Girl"); mesq l("The hooded man was about to deliver me a final blow, but then he saw the Apple I've stole..."); next; mesn l("Barbara, Wounded Girl"); mesq l("...And for some reason he took the apple and went further in the caves."); next; mesn l("Barbara, Wounded Girl"); mesq l("Maybe if you go back the way you're coming, you find him..."); next; mesn l("Barbara, Wounded Girl"); mesq l("By the way, I can't say for sure it was a man. He smelled like onions, and his face was shinning."); next; // FIXME: Should she be so blunt? mesn l("Barbara, Wounded Girl"); mesq l("I'm only assuming it was a man because the lack of boobs."); next; mesn l("Barbara, Wounded Girl"); mesq l("So... I'm at your hands now... What will you do with me?"); next; select l("Listen to her story again."), rif(@evil, l("[Kill her]")), l("You're under arrest. I have to bring you back to Kenton."), l("I have some healing items with me, we should tend your wounds first."); mes ""; switch (@menu) { // Murder case 2: mesn l("Barbara, Wounded Girl"); mesq l("OH MY, PLEASE DON'T!"); next; mesn l("Barbara, Wounded Girl"); mesq l("I NEVER TOUCHED THE SOUL MENHIR! I SWEAR YOU, I'M INNOCENT! PLEASE HAVE MERCY!!"); next; mesc l("Really kill Barbara?"), 1; mesc l("WARNING: THIS ACTION IS IRREVERSIBLE."), 1; if (askyesno() == ASK_YES) { mes ""; mesc l("She falls in a single blow. You'll attribute her death to the Mysterious Assassin."); BARBARA_STATE=1; setq1 LoFQuest_Barbara, 5; disablenpc instance_npcname(.name$); // NPC will now go to rest next; closeclientdialog; dispbottom l("You see a fruit on her body. You take it."); getitembound MysteriousFruit, 1, 4; close; } else { @evil=false; mesn l("Barbara, Wounded Girl"); mesc l("*sigh*"); mesq l("Thank you..."); next; } // Repeat case 1: goto L_MainStory; break; // Healing case 4: mesn l("Barbara, Wounded Girl"); mesq l("I'm afraid my wounds are too critical. I'm bleeding. I was cursed. And I can't even move."); next; if (countitem(ElixirOfLife)) { mesc l("You have an @@ - Should you give her that?", getitemlink(ElixirOfLife)); if (askyesno() == ASK_YES) { mes ""; mesn l("Barbara, Wounded Girl"); mesq l("It's true enough an @@ could heal even a dead tree, and would dispel almost every status ailment I could have.", getitemlink(ElixirOfLife)); next; mesn l("Barbara, Wounded Girl"); mesq l("But my case requires extended treatment. I need to be hospitalized. I'm afraid it is too late for the Elixir to have effect..."); next; } } mesn strcharinfo(0); mesq l("...You're right. My medicine cannot heal you."); next; mesn l("Barbara, Wounded Girl"); mesq l("I think the Doctor, on Dimond's Cove could help me, but that means passing by Kenton..."); next; // Arrest case 3: mesn l("Barbara, Wounded Girl"); mesq l("...I have no other choice, do I?"); next; mesn l("Barbara, Wounded Girl"); mesc l("*sigh*"); mesq l("But be warned, I don't have the Apple with me. It must be further in."); mes ""; mesc l("Barbara was apprehended. It would be weird to show her on your inventory, so we won't."); // The quest is not over yet - do not set BARBARA_STATE setq1 LoFQuest_Barbara, 5; disablenpc instance_npcname(.name$); // NPC will now go to rest close; } Exception("Invalid Barbara Dialog State - 0"); close; OnInit: .sex=G_FEMALE; disablenpc .name$; end; OnInstanceInit: disablenpc instance_npcname(.name$); end; } // Event trigger 018-6-1,84,71,0 script #01861TriggerBB1 NPC_HIDDEN, 0, 10,{ end; OnTouch: .@q=getq(LoFQuest_Barbara); .@q2=getq2(LoFQuest_Barbara); .@q3=getq3(LoFQuest_Barbara); if (.@q == 4) { enablenpc instance_npcname("Barbara#01861", .@q2); addtimer2(500, instance_npcname("Barbara#01861", .@q2)+"::OnMain"); } end; OnInit: disablenpc .name$; end; }