// TMW2 script need total rewrite.
// Evol scripts.
// Authors:
// 4144
// Ablu
// Alastrim
// Qwerty Dragon
// Reid
// Vasily_Makarov
// Description:
// Rat hunter.
// 4+2 bits array:
// ShipQuests
// Variable:
// ShipQuests_Peter
// Values:
// 0 Doesn't know the quest.
// 1 Task given.
// 2 Task given and reward expected.
// 3 Task completed without reward.
// 4 Asked for reward after completion of the task.
// 5 Task done and reward given.
// 6 Did not start the quest.
// Others:
// .@peter = Peter variable.
// "002-2" - map with mobs.
// "$@RAT_SAILOR_HELPER$" - Name of the participant.
// "$@RAT_SAILOR_DEATHS - Number of deaths when the participant starts the fight.
// "$@RAT_SAILOR_CONTROL" - Explanation of each index of the array.
// "$@RAT_SAILOR_OLD_HELPER$" - Name of the participant.
// "$@RAT_SAILOR_COUNTDOWN" - Seconds since the epoch of when the player done the quest.
// [1] = Shows status of ratto number 1 (1 is dead and 0 is alive).
// [2] = Shows status of ratto number 2 (1 is dead and 0 is alive).
// [3] = Shows status of ratto number 3 (1 is dead and 0 is alive).
// [4] = Shows status of ratto number 4 (1 is dead and 0 is alive).
// [5] = Shows how many seconds passed since ratto number 1 died.
// [6] = Shows how many seconds passed since ratto number 2 died.
// [7] = Shows how many seconds passed since ratto number 3 died.
// [8] = Shows how many seconds passed since ratto number 4 died.
// [9] = Shows how many seconds passed since the player started the quest.
// [10] = Shows how many seconds passed since the player done the quest.
// Translation
// FR Translated
002-1,35,24,0 script AreaNPC NPC_HIDDEN,0,1,{
OnTouch:
if (BaseLevel < 8) goto L_Stop;
if ($@RAT_SAILOR_COUNTDOWN == 0) goto L_NoCountDown;
if ((gettimetick(2) - $@RAT_SAILOR_COUNTDOWN) < 10) goto L_NoGoodTick;
if (($@RAT_SAILOR_OLD_HELPER$ == strcharinfo(0)) && ((gettimetick(2) - $@RAT_SAILOR_COUNTDOWN) < 60)) goto L_NoGoodTick;
$@RAT_SAILOR_COUNTDOWN = 0;
L_NoCountDown:
if ($@RAT_SAILOR_HELPER$ != "") goto L_Occupied;
.@peter = getq(ShipQuests_Peter);
if (.@peter < 1 || .@peter > 5) goto L_Task;
if (.@peter == 1 || .@peter == 2) goto L_Rfail;
if (.@peter == 3 || .@peter == 4) goto L_Rwin;
if (.@peter > 5) goto L_SecondTime;
doevent "Peter::OnReturnWin";
close;
L_Stop:
doevent "Peter::OnStop";
close;
L_Occupied:
doevent "Peter::OnDontneedHelp";
close;
L_Task:
doevent "Peter::OnGiveTask";
close;
L_Rfail:
doevent "Peter::OnReturnFail";
close;
L_Rwin:
doevent "Peter::OnReturnWin";
close;
L_NoGoodTick:
doevent "Peter::OnNoGoodTick";
close;
}
002-1,33,25,0 script Peter NPC_RATTO_SAILOR,{
if (BaseLevel < 8) goto OnTooWeak;
if ($@RAT_SAILOR_COUNTDOWN == 0) goto L_NoCountDown;
if ((gettimetick(2) - $@RAT_SAILOR_COUNTDOWN) < 10) goto OnNoGoodTick;
if (($@RAT_SAILOR_OLD_HELPER$ == strcharinfo(0)) && ((gettimetick(2) - $@RAT_SAILOR_COUNTDOWN) < 60)) goto OnNoGoodTick;
$@RAT_SAILOR_COUNTDOWN = 0;
L_NoCountDown:
.@peter = getq(ShipQuests_Peter);
if (.@peter == 1 || .@peter == 2) goto OnReturnFail;
if (.@peter == 3 || .@peter == 4 || .@peter == 5) goto OnReturnWin;
OnGiveTask:
setq ShipQuests_Peter, 6;
.@peter = getq(ShipQuests_Peter);
mesn;
mesq lg("Hey, girl!", "Hey, man!");
next;
mesq l("I need somebody who can rid the hold of the ship of these rattos. Can you help me?");
next;
menu
l("Yeah, but what reward will I get?"), L_BonusTask,
l("Why not, I need to train anyway."), L_Task,
l("No, they are way too dangerous for me!"), -;
mes "";
mesn;
mesq l("Hehe, hehe. Well, come back if you change your mind.");
goto L_Quit;
OnLowTime:
if (getmap() == "002-2")
dispbottom l("Time is running out... Hurry up!");
end;
OnTooWeak:
mesn;
mesq lg("I need someone to help me clean the edge of the ship, but you aren't strong enough for now.");
goto L_Quit;
OnStop:
slide 35, 26;
mesn;
mesq l("You can't go there!");
close;
OnReturnFail:
mesn;
mesq l("I see it's not so easy to get rid of these rattos. Do you want to try again?");
next;
menu
l("Yeah, but I would like to make sure I get a reward."), L_BonusTask,
l("Why not, I need to train anyway."), L_Task,
l("No, they are way too dangerous for me!"), -;
mes "";
mesn;
mesq l("Hehe, hehe. Well, come back if you change your mind.");
goto L_Quit;
OnReturnWin:
.@peter = getq(ShipQuests_Peter);
mesn;
mesq l("Thanks again for helping me. Drats these rattos for infesting our fair vessal!");
next;
mesq l("They are a permanent problem so I will always need your help to exterminate them in order to keep their number under control.");
next;
mesq l("Your help is very welcome indeed. Unfortunately, I can give you a reward for the first extermination only.");
next;
if (.@peter == 3 || .@peter == 4)
menu
l("Did you say reward? I want it!"), L_BonusTask,
l("I am not worried about rewards. I just want to help."), L_Task,
l("Sorry, I am not in the mood for another fight with these rattos."), -;
if (.@peter == 5)
menu
l("No problem, I can help you anyway."), L_Task,
l("Sorry, I am not in the mood for another fight with these rattos."), -;
mes "";
mesn;
mesq l("Hehe, hehe. Well, come back if you change your mind.");
close;
L_BonusTask:
mes "";
mesn;
mesq l("What if I give you 850 GP for that job, is it ok?");
next;
menu
lg("Okay, I'm ready to work!"), -,
l("What? This reward is too small!"), L_Quit;
.@peter = getq(ShipQuests_Peter);
if ($@RAT_SAILOR_HELPER$ != "") goto OnDontneedHelp;
if (.@peter == 6) setq ShipQuests_Peter, 2;
if (.@peter == 3) setq ShipQuests_Peter, 4;
.@peter = getq(ShipQuests_Peter);
goto L_Start;
L_Task:
.@peter = getq(ShipQuests_Peter);
if ($@RAT_SAILOR_HELPER$ != "") goto OnDontneedHelp;
if (.@peter == 6) setq ShipQuests_Peter, 1;
.@peter = getq(ShipQuests_Peter);
L_Start:
mes "";
mesc l("Rattos are pretty strong. Do you need an explanation about hit'n'run?");
if (askyesno() == ASK_YES) {
mes "";
mesc l(".:: Hit'n'Run Tactic ::.");
mesc l("Sometimes, you just cannot afford to be hit. But even with a melee weapon, you don't need to be hit.");
next;
mesc l("The strategy is simple. When you hit the enemy, walk one or two tiles backwards.");
mesc l("If you miss, walk two or three tiles backwards. This way, you avoid being hit.");
next;
}
mes "";
mesn;
mesq l("Okay, you can start!");
OnStartOutside:
if ($@RAT_SAILOR_HELPER$ != "") goto OnDontneedHelp;
$@RAT_SAILOR_HELPER$ = strcharinfo(0);
$@RAT_SAILOR_DEATHS = PC_DIE_COUNTER;
initnpctimer;
warp "002-2", 33, 24;
addtimer(100000, "Peter::OnLowTime");
doevent "RattosControl::OnSpawn";
goto L_Quit;
OnTimer2000:
if (attachrid(getcharid(3, $@RAT_SAILOR_HELPER$)) == 0) goto L_Logoff;
$@RAT_SAILOR_CONTROL[9] = $@RAT_SAILOR_CONTROL[9] + 2;
if ($@RAT_SAILOR_CONTROL[9] > 120) goto L_Timeout;
if (PC_DIE_COUNTER > $@RAT_SAILOR_DEATHS) goto L_Dead;
if ($@RAT_SAILOR_CONTROL[1] && $@RAT_SAILOR_CONTROL[2] && $@RAT_SAILOR_CONTROL[3] && $@RAT_SAILOR_CONTROL[4]) goto L_Done;
if (getmapusers("002-2") == 0) goto L_CleaningEnd;
goto L_CheckRattos;
end;
L_CheckRattos:
if ($@RAT_SAILOR_CONTROL[1]) $@RAT_SAILOR_CONTROL[5] = $@RAT_SAILOR_CONTROL[5] + 2;
if ($@RAT_SAILOR_CONTROL[2]) $@RAT_SAILOR_CONTROL[6] = $@RAT_SAILOR_CONTROL[6] + 2;
if ($@RAT_SAILOR_CONTROL[3]) $@RAT_SAILOR_CONTROL[7] = $@RAT_SAILOR_CONTROL[7] + 2;
if ($@RAT_SAILOR_CONTROL[4]) $@RAT_SAILOR_CONTROL[8] = $@RAT_SAILOR_CONTROL[8] + 2;
if ($@RAT_SAILOR_CONTROL[5] > 45) doevent "RattosControl::OnRatto1Respawn";
if ($@RAT_SAILOR_CONTROL[6] > 45) doevent "RattosControl::OnRatto2Respawn";
if ($@RAT_SAILOR_CONTROL[7] > 45) doevent "RattosControl::OnRatto3Respawn";
if ($@RAT_SAILOR_CONTROL[8] > 45) doevent "RattosControl::OnRatto4Respawn";
L_NotYet:
setnpctimer 0;
end;
OnDontneedHelp:
mesn;
mesq l("I don't need your help right now, come back later.");
next;
mesq l("@@ is helping me.", $@RAT_SAILOR_HELPER$);
goto L_Quit;
L_Timeout:
mesn;
mesq l("Hey! Be careful. You can't stay in this basement for so long, you're going to get sick. Come outside and take a break, maybe you can try again later.");
warp "002-1", 35, 26;
goto L_CleaningClose;
L_Logoff:
goto L_CleaningEnd;
L_Dead:
// Warps the dead body outside, so it does not interfere with the getmapusers check.
if (getmapusers("002-2") > 0) warp "002-1", 35, 26;
goto L_CleaningEnd;
L_Done:
$@RAT_SAILOR_CONTROL[10] = $@RAT_SAILOR_CONTROL[10] + 2;
if($@RAT_SAILOR_CONTROL[10] < 5) goto L_NotYet;
.@peter = getq(ShipQuests_Peter);
if (.@peter == 2 || .@peter == 4) goto L_Reward;
warp "002-1", 35, 26;
goto L_Thanks;
L_CleaningEnd:
stopnpctimer;
$@RAT_SAILOR_HELPER$ = "";
$@RAT_SAILOR_DEATHS = 0;
cleararray $@RAT_SAILOR_CONTROL, 0, 11;
killmonster "002-2", "RattosControl::OnRatto1Death";
killmonster "002-2", "RattosControl::OnRatto2Death";
killmonster "002-2", "RattosControl::OnRatto3Death";
killmonster "002-2", "RattosControl::OnRatto4Death";
end;
L_CleaningClose:
stopnpctimer;
$@RAT_SAILOR_OLD_HELPER$ = $@RAT_SAILOR_HELPER$;
$@RAT_SAILOR_HELPER$ = "";
$@RAT_SAILOR_DEATHS = 0;
cleararray $@RAT_SAILOR_CONTROL, 0, 11;
killmonster "002-2", "RattosControl::OnRatto1Death";
killmonster "002-2", "RattosControl::OnRatto2Death";
killmonster "002-2", "RattosControl::OnRatto3Death";
killmonster "002-2", "RattosControl::OnRatto4Death";
$@RAT_SAILOR_COUNTDOWN = gettimetick(2);
close;
L_Reward:
warp "002-1", 35, 26;
setq ShipQuests_Peter, 5;
.@peter = getq(ShipQuests_Peter);
mesn;
mesq l("Good job!") + " " + l("Here's your reward!");
getexp 105, 0;
Zeny = Zeny + 850;
message strcharinfo(0), l("You receive @@ GP!", 850);
goto L_CleaningClose;
L_Thanks:
mesn;
mesq l("Thanks for helping me!");
.@peter = getq(ShipQuests_Peter);
if (.@peter == 1) setq ShipQuests_Peter, 3;
.@peter = getq(ShipQuests_Peter);
goto L_CleaningClose;
L_Quit:
.@peter = 0;
close;
OnNoGoodTick:
mesn;
mesq l("I don't need your help right now, come back later.");
close;
OnInit:
.sex = G_MALE;
.distance = 5;
end;
}