// TMW2/LoF scripts.
// Authors:
// TMW-LoF Team
// Jesusalva
// Description:
// Take care of hardcore players
018-2-1,22,29,0 script Colonel DUSTMAN NPC_CRUSADER,{
.@cod=getq(LoFQuest_COD);
.@hh=getq(LoFQuest_HH);
mesn;
mesq l("Hello adventurer. Are you interested in the Heroes Hold, or in the Call Of Dusty?");
next;
select
l("Heroes Hold"),
l("Call Of Dusty"),
l("Neither, sorry");
if (@menu == 3)
close;
else if (@menu == 2)
goto L_COD;
mes "";
if (BaseLevel < 40) {
mesn;
mesq l("Well, my men went down and still haven't returned.");
next;
mesn;
mesq l("I'm worried with them. Anyway, I think only heroes are allowed inside, and you are a few levels short of being a Hero...");
next;
mesn;
mesq l("Take care, adventurer!");
close;
}
mesn;
mesq l("This whole region is called the Heroes Hold. It's designed for hard core, bragging-rights-hunters, high level, supreme players.");
next;
mesn;
mesq l("This is the main hall. Below this stairs, you'll find the Heroes Hold Main Dungeon. It's a cave in a... uhm. Water.");
mesq l("I thought it was meant to be lava, this being in the Land Of Fire and all, but seems like someone must bug Saulc to fix it.");
if (.@hh > 1) {
next;
mesn;
mesq l("Where could my man have went?!");
next;
mesn;
mesq l("Perhaps this has something to do with the factions.");
next;
mesn;
mesq l("I wonder what secrets the Heroes Hold could be hiding...");
} else if (.@hh == 1) {
next;
mesn;
mesq l("Hm, good luck out there.");
if ((getq2(LoFQuest_HH) & HH_MASTER)) {
mes "";
mesn;
mesq l("I see you finished the Master Dungeon and didn't found my men. I'll think on something.");
next;
mesn;
mesq l("Thanks for your help, anyway.");
inventoryplace CrusadeHelmet, 1, MercBoxA, 5, AncientBlueprint, 2, HeroCoin, 60;
next;
mes "";
mesn;
mesc l("You can have my team's helmet, you're now officially a crusader!");
setq1 LoFQuest_HH, 2;
CsysNpcCraft(CrusadeHelmet, CLASS_DAMAGE_BOSS_TARGET, 10);
getitem MercBoxA, 5;
getitem AncientBlueprint, 2;
getitem HeroCoin, 60;
getexp 100000, 1000;
}
} else if (.@hh == 0) {
next;
mesn;
mesq l("So, let's return to the business at hand. My men went down and haven't returned. That was long ago, by the way.");
mesq l("I can send you to at least five from the seven cave levels this dungeon have.");
next;
mesn;
mesq l("Do you want to try to find them? Just search the first five floors: Novice, Intermediary, Advanced, Expert and Master.");
mesq l("The Supreme and Ultimate floors are just a WIP bonus. So if you don't find them on the five and report back, that'll do.");
next;
mesc l("Accept quest?");
if (askyesno() == ASK_YES) {
mes "";
mesn;
mesq l("Wonderful! You must finish Novice, Intermediary, Advanced and Expert levels before I unlock Master level for you.");
mesq l("I don't really understand how the dungeon works. I promise you a reward when you finish the task.");
next;
mesc l("You need to choose a Heroes Hold Group. This currently makes absolutely no difference whatsoever."), 1;
mesc l("However, each group may be expanded later. You can reset group by clearing the Master Floor.", 1);
mesc l("PS. The group names still aren't set. You're free to pinch in suggestions at LoF Discord (Legacy #discussion) :>");
next;
select
l("The Loyalists"),
l("The Wildlife");
setq LoFQuest_HH, 1, 0, (@menu-1);
}
}
close;
L_COD:
mes "";
// First time you're hearing about?
if (BaseLevel >= 50 && .@cod < 1) {
mesn;
mesq l("Hey, do you know the ##BCall Of Dusty##b event?");
next;
setq1 LoFQuest_COD, 1;
goto L_InformationCOD;
}
// Begin here
mesn;
mesq l("Just @@ ago, thieves stole Pihro & Pyndragon weapons.", FuzzyTime(1542570030));
next;
// Handle initial message
if (BaseLevel >= 50) {
mesn;
mesq l("Pyndragon said he'll craft a @@ to whoever reduces them to dust. Interested?", getitemlink(Dustynator)); // BottledDust, Dustynator
mesc l("Note: Dustynator is a high level weapon. You might not have enough level to use it yet.");
next;
} else if (BaseLevel < 50) {
mesn;
mesq l("It was a real problem, threatening them to go out of business. I think they are trying to recover the lost weapons.");
mesc l("Attain level 50 to try this quest.");
close;
}
L_SkipIntro:
mes "";
// Is the event currently active? Or is it exchange time?
if (.state == 0) {
mesn;
mesq l("The event starts hourly, when the minute clock hits zero. I'll tell everyone on this room when it starts and ends.");
next;
mesn;
mesc l("Do you want to exchange some of your @@ @@ for items?", countitem(BottledDust), getitemlink(BottledDust));
mes "";
if (askyesno() == ASK_YES) {
openshop;
closedialog;
}
close;
}
mesc l("Do you want to participate on Call Of Dusty?");
// Do you want to participate?
if (askyesno() == ASK_YES) {
mes "";
mesn;
mesq l("Do you need a refresher of the rules?");
if (askyesno() == ASK_YES) {
goto L_InformationCOD;
}
closeclientdialog;
@COD_CHECKPOINT=0;
warp "001-10", rand(163,171), rand(119,124);
addtimer(120000,"#COD_BossRoomCheck::OnTimeDefeat");
dispbottom l("Good luck!");
close;
}
close;
// Information about COD
L_InformationCOD:
mes "";
mesn;
mesc l("Call Of Dusty is a timed event quest. It begins hourly, when the minute clock marks zero.");
mesc l("When the boss is defeated, or the minute clock marks fifteen, event ends.");
next;
mesn;
mesc l("This is a @@, meaning only the victor party will receive the great prize.", b(l("Party Quest")));
mesc l("You will get @@ which can then be exchanged for items once CoD event quest ends.", countitem(BottledDust));
next;
mesn;
mesc l("You need be at minimum level 50 to participate. It is PVP, so watch out!");
mesc l("The first stage is on the desert canyons. You must give a full circle on the canyon in 90 seconds.");
mesc l("The second stage is in the first cave to northwest you can find.");
// The full circle have about 268 tiles in distance. You have the needed time to do 2.2 circles in the most efficient fashion.
// This means you have a time worth of 590 tiles, at 150ms, granting you 90 seconds to do this quest. (everything rounded up)
// But due a small thing called LAG and MANAPLUS DESYNC I'm now granting a whole two minutes for this stage.
next;
mesn;
mesc l("Once inside the BOSS Cave, you get a five minutes time limit to slay the boss with your party.");
mesc l("@@. PK, however, is allowed!", b(l("Only the party from the MVP will get the reward.")));
next;
mesc l("The MVP is the player who did more damage to the boss.");
mesc l("The title is transferred when the MVP is killed (either in PVP or by the boss), or when time runs out.");
next;
mesn;
mesc l("The boss can blind players. Blind will reduce hit rate and evasion in 25%.");
mesc l("Form the strongest party and win! Remember that if you don't kill the boss, you'll never win!");
next;
goto L_SkipIntro;
OnInit:
.sex=G_MALE;
.distance=5;
.state=0; // 0- Closed, 1- Open TODO begin at right state
tradertype(NST_CUSTOM);
// CoD Exchange Booth Selection
sellitem Dustynator,3000;
sellitem ArcmageBoxset,880;
sellitem BronzeGift,100;
sellitem HeroCoin,1;
end;
OnMinute00:
.state=1;
donpcevent("#COD_BossManager::OnEventStart");
npctalk("Call Of Dusty: Event Start!");
end;
OnCoDEnd:
OnMinute15:
.state=0;
npctalk("Call Of Dusty: Event End!");
end;
OnMinute30:
.state=0; // fail-safe
donpcevent("#COD_BossManager::OnCleanUp");
end;
// CoD Exchange Booth Prices
OnCountFunds:
setcurrency(countitem(BottledDust));
end;
OnPayFunds:
if( countitem(BottledDust) < @price )
end;
delitem BottledDust,@price;
purchaseok();
end;
}