// TMW2 Scripts. // Author: // Jesusalva // Description: // Lua is an Alliance Officer. She takes care of miscelanneous administrative tasks, including Strange Coin generation. // She can also change the world's hero, give Sponsor their necklace, and is part of main storyline. 003-2,38,34,0 script Lua#003-2 NPC_FEMALE,{ .@n = getq(General_Narrator); mesn; mesq l("Hello, I act on the Alliance's behalf."); L_Menu: mes ""; menu l("Ok, see you later."),L_Close, rif(.@n == 1, l("I was found near Candor Island, on a raft, and can't remember anything. Do you know who I am?")), L_Info, rif(.@n == 2, l("What you asked me for, again?")), L_Task, rif(.@n == 3, l("Where I needed to go, again?")), L_Complete, rif(.@n >= 4, l("Do you think I'm ready to go to Halinarzo?")), L_Check, rif(is_gm(), l("I need a GM set, please!")), L_GMItems, rif(is_gm() && #GMEVENT_T <= gettimetick(2), l("I plan in doing an event! Give me the coins!")), L_GMEvent, rif(is_gm() && #GMEVENT_T > gettimetick(2), l("Trade my coins in Gift Boxes, pretty please!")), L_GMEventShop, rif(is_staff(), l("Tell people the name of a new hero.")), L_NewHero, rif((getgmlevel() == 1 || is_admin()) && #T_SPONSOR <= gettimetick(2), l("I want a Sponsor Necklace.")), L_Sponsor, l("Do you have any tips for beginners?"), L_Tips, l("I am a contributor, and I want contributor stuff."), L_Contributor, l("What alliance?"),-; mes ""; mesn; mesq l("The Alliance which was formed after the war!"); close; L_GMItems: getitembound GMRobe, 1, 1; getitembound GMCap, 1, 1; logmes(strcharinfo(0)+" just took a GM set."); logmes(strcharinfo(0)+" just took a GM set.", LOGMES_ATCOMMAND); mes ""; mesn; mesq lg("Here they are, miss.", "Here they are, mister."); mes ""; goto L_Menu; L_GMEvent: #GMEVENT_T=gettimetick(2)+(60*60*24); getitem StrangeCoin, 30; //logmes(strcharinfo(0)+" just took thirty event coins."); //logmes(strcharinfo(0)+" just took thirty event coins.", LOGMES_ATCOMMAND); mes ""; mesn; mesq lg("Here they are, miss.", "Here they are, mister."); mes ""; goto L_Menu; L_GMEventShop: // Inflaction: Non-admins pay more out of main events (for whatever reasons) .@inf=1; if (!is_admin() && $EVENT$ == "") .@inf+=1; // Main Code .@s=countitem(StrangeCoin); mes ""; mesn; mesq l("You currently have @@ @@.", countitem(StrangeCoin), getitemlink(StrangeCoin)); mes ""; mesc l("@@ - @@ coins", getitemlink(BronzeGift), 10*.@inf); mesc l("@@ - @@ coins", getitemlink(SilverGift), 20*.@inf); mesc l("@@ - @@ coins", getitemlink(GoldenGift), 40*.@inf); mesc l("@@ - @@ coins", getitemlink(PrismGift), 80*.@inf); mesc l("@@ - @@ coins", getitemlink(SupremeGift), 160*.@inf); mes ""; menuint "Return to main menu", -1, rif(.@s > 10*.@inf, "Bronze Gift"), 10, rif(.@s > 20*.@inf, "Silver Gift"), 20, rif(.@s > 40*.@inf, "Golden Gift"), 40, rif(.@s > 80*.@inf, "Prism Gift"), 80, rif(.@s > 160*.@inf, "Supreme Gift"), 160; if (@menuret == -1) goto L_Menu; delitem StrangeCoin, @menuret*.@inf; switch (@menuret) { case 10: getitem BronzeGift, 1; break; case 20: getitem SilverGift, 1; break; case 40: getitem GoldenGift, 1; break; case 80: getitem PrismGift, 1; break; case 160: getitem SupremeGift, 1; break; default: mesc(l("A script error happened, please report: @@", @menuret), 1); break; } goto L_GMEventShop; L_NewHero: mes ""; mes l("Current hero: @@", $MOST_HEROIC$); input .@MH$; logmes "Changing hero from "+$MOST_HEROIC$+" to "+.@MH$; logmes(strcharinfo(0)+" changed the world's hero.", LOGMES_ATCOMMAND); $MOST_HEROIC$ = .@MH$; goto L_Menu; L_Sponsor: #T_SPONSOR=gettimetick(2)+(60*60*24*30); rentitem "SponsorNecklace", (60*60*24*30); logmes(strcharinfo(0)+" just took a Sponsor Necklace."); logmes(strcharinfo(0)+" just took a Sponsor Necklace.", LOGMES_ATCOMMAND); mes ""; mesn; mesq lg("Here it is, miss.", "Here it is, mister."); mes col("This item will be returned in 30 days counting from now, and you will need to take another.", 9); mes col("It cannot be dropped, traded, sold, but you can store it and use with same account.", 9); mes ""; goto L_Menu; OnLuaInfo: @lua_isok=1; end; L_Info: if (!@lua_isok) { mes ""; mesn; mesq l("Of course, give me just a minute to look up for your data, @@.", strcharinfo(0)); next; mesn; mesq l("Please wait here on the meanwhile. Try asking Estard about parties, or talk to Eistein."); //mesq l("You can explore the city on the meanwhile, I need to inspect the data."); if (!@lua_init) { @lua_init=1; addtimer(rand(55000,65000),"Lua#003-2::OnLuaInfo"); } close; } mes "..."; next; mes "... ..."; next; mes "... ... ..."; next; mesn; mesq l("No criminal record, no bank account, not even a tax payment declaration."); next; mesq l("I found your birth record, but it is not complete. Here says you were born on @@.", b("Halinarzo")); next; mesq l("The problem is that Halinarzo was destroyed in the never-ending war and was just recently rebuilt."); next; mesq l("Almost all documents were lost, destroyed or damaged. I cannot even find your parents name."); next; mesq l("All I can say is that you were born there, and moved by the age of 4, but to where? I don't know."); next; mesn; mesq l("Sorry. At best, you can try your luck in Halinarzo, but the odds of someone recognizing you are pretty slim."); next; mesn; mesq l("However..."); mesq l("You will be killed on the road if you try to go like this. The Canyon route is dangerous, and the Swamps route claimed many souls."); mesq l("Not to say about bandits and robbers you'll find."); next; getexp BaseLevel*30, JobLevel*5; // Reference Levels: (10, 3) setq General_Narrator, 2; mesn; mesq l("Lucky for you, the Alliance have means to assist you. You'll be a grown up, full fledged adventurer in no time at all, and will be able to visit a friend of mine, who will then send you there."); next; goto L_Task; L_Task: mesc b(l(".:: Main Quest 2-1 ::.")), 3; msObjective(BaseLevel >= 20, l("* @@/@@ Base Level", BaseLevel, 20)); msObjective(JobLevel >= 6, l("* @@/@@ Job Level", JobLevel, 6)); msObjective(Zeny >= 1000, l("* @@/@@ GP", Zeny, 1000)); msObjective(countitem(TulimsharGuardCard), l("* @@/@@ @@", countitem(TulimsharGuardCard), 1, getitemlink(TulimsharGuardCard))); msObjective(countitem(FishingRod), l("* @@/@@ @@", countitem(FishingRod), 1, getitemlink(FishingRod))); msObjective(countitem(LifestonePendant), l("* @@/@@ @@", countitem(LifestonePendant), 1, getitemlink(LifestonePendant))); next; if (BaseLevel >= 20 && JobLevel >= 6 && Zeny >= 1000 && countitem(TulimsharGuardCard) && countitem(FishingRod) && countitem(LifestonePendant)) goto L_Finish; mesn; if (!countitem(TulimsharGuardCard)) { mes l("The Guard Card will prove your intentions. Talk to the Lieutenant."); mes ""; } if (!countitem(FishingRod)) { mes l("The fishing rod allows a quick income by selling fishes. However, reaching the fisherman might require some exploration... The whole world is full of secrets."); mes ""; } if (!countitem(LifestonePendant)) { mes l("The lifestone pendant allows you a quicker HP recovery. Life is more important than defense."); mes l("I have no idea about who would make a pendant, but lifestone can be done just outside the town walls."); mes ""; } if (!getq(TulimsharQuest_Sailors) < 2) { mes l("There are some sailors near the forge. Think outside the box - or rather, inside it, unless you have a fortune to buy the items."); mes ""; } close; L_Finish: getexp BaseLevel*60, JobLevel*10; // Reference Levels: (20, 6) setq General_Narrator, 3, 0; mesn; mesq l("Great job! You can keep these items, they will be crucial to your journey."); next; L_Complete: mesn; mesq l("You see the docks on the other side of the town? There should be a ship docked there."); next; if (!$GAME_STORYLINE < 1) { mesn; mesq l("The ship can bring you to the town of Hurnscald, but we have a problem: It is currently being occupied by a Monster Army."); next; mesn; mesq l("That would be your next destination, but first, the monster army must be driven out!"); next; mesn; mesq l("The Game Masters are assembling a party to storm Hurnscald and liberate it. You should try joining it!"); next; mesc l(">> Hurnscald must be Liberated first, to continue this story <<"), 1; close; } mesn; mesq l("You already got the money. Go there and pay ##B Hurnscald ##b a visit. The ##B mayor ##b should be able to help you."); next; mesn; mesq l("Ship travels are quite expensive, so perhaps you may think it is worth to complete the other quests here?"); next; .@r=reputation("Tulim"); mesn; if (.@r <= 35) mesq l("Try helping the city guard. Talk to NPCs around the city. Outside the city walls too. And there are some people on the mines."); else if (.@r <= 60) mesq l("You are doing some progress. There are about 4 quests on the mines, 1 outside walls, and 10 on the town. Some require level, so talk to people again sometimes."); else if (.@r <= 85) mesq l("You'll soon run out of stuff to do around here, so yeah, you should extend your horizons or you may get bored soon enough."); else mesq l("Tulimshar doesn't have a lot more of quests to offer you, so you should definitely explore new places."); if (BaseLevel < 30) mesq l("I'm sure there are a lot of sidequests here until you reach level 30, but that's optional."); close; L_Tips: mesn; mesq l("Hmm... First of, I would really add some agility. Agility helps you to don't be hit, and not being hit is awesome."); mesq l("Hm, I would also do some quests if I needed money... On other hand, maybe I could go fishing? Do I know any fisher?"); mesq l("Ah, getting experience is hard, too... I would stay within the city. Hit and Run tactics works the best."); next; mesn; mesq l("Hit'n'run is not so hard... One hit, one step back... One hit, another step back... One miss, two steps back..."); mesq l("That works with most of monsters. Well, but we all know from @@ that it is better to stay put and let mobs kill us, right?", "Apane"); mesq l("Heh, there is death penalty indoors and outside the town. You better watch out. The mobs are on a foul mood today, very easy to get killed."); close; L_Check: mesn; mesq l("Hmm... That's a though question!"); next; mesn; if (BaseLevel < 20) mesq l("Currently, you stand no chance against the Snakes on the Desert Canyon."); else if (BaseLevel < 25) mesq l("Currently, you should not attempt the Desert Canyon because low level."); else if (BaseLevel < 30) mesq l("Currently, you stand no chance against the Snakes on the Desert Canyon, but you probably can cross it."); else if (BaseLevel < 40) mesq l("I'm pretty confident you can attempt the Desert Canyon, but expect to die a few times."); else if (BaseLevel < 50) mesq l("You have a high level. Go to Halinarzo already! You could even, I don't know, search for magic?!"); else mesq l("Your level is so high, I'm surprised you haven't went there already. But then, most quests around there are for your level..."); next; mesn; mesq l("Bows are good, but if you're going to the Desert Canyon, I would instead invest on a light shield. Heavy ones make you walk slower."); next; .@r=reputation("Tulim"); mesn; if (.@r <= 35) mesq l("Try helping the city guard. Talk to NPCs around the city. Outside the city walls too. And there are some people on the mines."); else if (.@r <= 60) mesq l("You are doing some progress. There are about 4 quests on the mines, 1 outside walls, and 10 on the town. Some require level, so talk to people again sometimes."); else if (.@r <= 85) mesq l("You'll soon run out of stuff to do around here, so yeah, you should extend your horizons or you may get bored soon enough."); else mesq l("Tulimshar doesn't have a lot more of quests to offer you, so you should definitely explore new places."); close; L_Contributor: mes ""; .@m = htget($@CONTRIBUTORS, strtolower(strcharinfo(0)), 0); if (!.@m) { mesn; mesq l("Ah... Sorry, your name is not on the contributor list."); next; mesn; mesq l("You can colaborate with our project though! Just ask on #tmw2-dev, be it on Discord or IRC!"); close; } mesn; mesq l("Ah, welcome @@. You have @@ Contributor Points.", strcharinfo(0), .@m); mesq l("Let's see if you can pick a reward!"); select rif(!(#CRW & 128) && .@m >= 10000, l("30x Bug Leg")), rif(!(#CRW & 32) && .@m >= 5000 && Zeny > 10000, l("(10,000 GP) Legendary Mount")), rif(!(#CRW & 16) && .@m >= 2000, l("Delicious Cookie")), rif(!(#CRW & 64) && .@m >= 1000, l("20x Bug Leg")), rif(!(#CRW & 8) && .@m >= 500, l("Developer Cap")), rif(!(#CRW & 4) && .@m >= 250, l("Contributor Sweater")), rif(!(#CRW & 2) && .@m >= 100, l("Community Shirt")), rif(!(#CRW & 1) && .@m, l("5x Strange Coins")), l("Which rewards are available?"), l("Ok, thanks."); mes ""; switch (@menu) { case 1: getitem BugLeg, 30; #CRW=#CRW|128 ; break; case 2: Zeny=Zeny-10000; getitembound "LegendaryMount", 1, 1; #CRW=#CRW|32 ; break; case 3: getitem "DeliciousCookie", 1; #CRW=#CRW|16 ; break; case 4: getitem BugLeg, 20; #CRW=#CRW|64 ; break; case 5: getitem "DEVCap", 1; #CRW=#CRW|8 ; break; case 6: getitem "ContributorSweater", 1; #CRW=#CRW|4 ; break; case 7: getitem "CommunityShirt", 1; #CRW=#CRW|2 ; break; case 8: getitem "StrangeCoin", 5; #CRW=#CRW|1 ; break; case 9: mes l("10000 - 30x @@", getitemlink(BugLeg)); mes l("5000 (+10,000 GP) - @@", getitemlink(LegendaryTortuga)); mes l("2000 - @@", getitemlink(DeliciousCookie)); mes l("1000 - 20x @@", getitemlink(BugLeg)); mes l("500 - @@", getitemlink(DEVCap)); mes l("250 - @@", getitemlink(ContributorSweater)); mes l("100 - @@", getitemlink(CommunityShirt)); next; goto L_Contributor; break; } close; L_Close: close; OnInit: .@npcId = getnpcid(.name$); setunitdata(.@npcId, UDT_HEADTOP, NPCEyes); setunitdata(.@npcId, UDT_HEADMIDDLE, GMRobe); setunitdata(.@npcId, UDT_HEADBOTTOM, LousyMoccasins); setunitdata(.@npcId, UDT_WEAPON, BugSlayer); setunitdata(.@npcId, UDT_HAIRSTYLE, 12); setunitdata(.@npcId, UDT_HAIRCOLOR, 5); .sex = G_FEMALE; .distance = 4; end; }