// TMW-2 Script
// Author:
// Jesusalva
// Description:
// Legendary hero
// I started with 'Greetings, citzen' and then I thought on 4144.
// He would never do such formal, hero-ish introduction. So I decided for something
// more realistic, which sounded like a human hero (ie. a normal player).
012-1,75,58,0 script Andrei Sakar NPC_ANDREI,{
// NLib_question ( )
function NLib_question {
//freeloop(true);
do {
@qid=rand(0,7);
} while (! (2**@qid) & @sortable);
debugmes "Question "+@qid;
@sortable-=(2**@qid);
setarray @ans$, $@NLIBa1$[@qid], $@NLIBa2$[@qid], $@NLIBa3$[@qid], $@NLIBa4$[@qid];
setarray @val, $@NLIBmr1[@qid], $@NLIBmr2[@qid], $@NLIBmr3[@qid], $@NLIBmr4[@qid];
/*
@nm=15;
@i=0;
debugmes "BG WHILE S00002";
while (@nm > 0) {
do {
@nai=rand(0,3);
} while ((2**@nai) & @nm);
debugmes "BG WS2 NODE";
@nm-=@nai;
@ans$[@i]=@as$[@nai];
@val[@i]=@nai;
}
debugmes "BG NO FREE LOOP";
//freeloop(false);
*/
// Final: @ans$ ; @val ; @qid
// Question, menuret, QID
mes "";
addtimer(30000, "Andrei Sakar::OnTooLong");
.@q=getq3(Q_NivalisLibday);
setq3 Q_NivalisLibday, .@q-7;
mesn;
mesq $@NLIBqs$[@qid];
menuint
@ans$[0], @val[0],
@ans$[1], @val[1],
@ans$[2], @val[2],
@ans$[3], @val[3];
mes "";
deltimer("Andrei Sakar::OnTooLong");
if (@menuret == 1) {
.@q=getq3(Q_NivalisLibday);
setq3 Q_NivalisLibday, .@q+7;
mesn;
mesq l("That's right.");
next;
} else {
mesn;
mesq l("Sorry, but that's wrong.");
close;
}
debugmes "BG END";
// end
}
mesn l("Andrei Sakar, Legendary Hero");
if ($NLIB_DAY || ($@GM_OVERRIDE && is_admin())) goto L_Quizz;
L_Default:
if (strcharinfo(0) == $MOST_HEROIC$)
mesq l("Hi, @@.", strcharinfo(0));
else
mesq l("Hi.");
close;
L_Quizz:
.@q=getq3(Q_NivalisLibday);
if (.@q == 0) {
setq3 Q_NivalisLibday, 100;
.@q=100;
} else if (.@q > 100) {
goto L_Default;
}
mesq l("We are assembling forces to take Nivalis back.");
mesq l("I'll make you five questions about lore and general knowledge. You'll have 30 seconds to read and answer each.");
mesq l("If you finish everything, and answer everything right, you may get a reward.");
mesq l("If you take too long you'll be penalized.");
mesq l("Do you want to start?");
next;
if (askyesno() == ASK_NO)
close;
setarray @sortable, 255;
NLib_question();
NLib_question();
NLib_question();
NLib_question();
NLib_question();
mesn;
.@q=getq3(Q_NivalisLibday);
// You cannot go above 100 points.
if (.@q > 100) {
mesq l("...More bugs.");
mesc l("A bug was found. Aborting script."), 1;
close;
} else if (.@q == 100) {
mesq l("Congratulations. You really know about the world lore.");
getitem HastePotion, 2;
getitem StrengthPotion, 2;
getitem Bread, 5;
} else if (.@q > 90) {
mesq l("Outstanding. Congratulations.");
getitem HastePotion, 2;
getitem StrengthPotion, 2;
getitem Bread, 4;
} else if (.@q > 75) {
mesq l("Good, knowing the world lore is important.");
getitem HastePotion, 1;
getitem StrengthPotion, 1;
getitem Bread, 4;
} else if (.@q > 50) {
mesq l("Good job.");
getitem HastePotion, 1;
getitem StrengthPotion, 1;
getitem Bread, 2;
} else if (.@q > 25) {
mesq l("Well, that was bad, but at least you know a bit from story.");
getitem Bread, 2;
} else if (.@q > 0) {
mesq l("Terrible. You know almost nothing from world lore...");
getitem Bread, 1;
} else {
mesq l("You really should read the dialogs.");
}
// If you got a negative value, this will default to 1.
getexp .@q*BaseLevel, .@q*JobLevel;
setq3 Q_NivalisLibday, 9999;
close;
OnTooLong:
.@q=getq3(Q_NivalisLibday);
setq3 Q_NivalisLibday, .@q-21;
npctalk3 l("You took too long to answer.");
close;
OnInit:
.sex = G_MALE;
.distance = 5;
/* Because I was lazy to calculate array size, it is hard-coded to eight questions numbered from 0 to 7.
setarray $@NLIBqs$;
setarray $@NLIBa1$;
setarray $@NLIBa2$;
setarray $@NLIBa3$;
setarray $@NLIBa4$;
setarray $@NLIBmr1;
setarray $@NLIBmr2;
setarray $@NLIBmr3;
setarray $@NLIBmr4;
*/
if ($FIRESOFSTEAM >= 10)
disablenpc .name$;
end;
}