summaryrefslogtreecommitdiff
path: root/npc/001-2-22/peter.txt
diff options
context:
space:
mode:
Diffstat (limited to 'npc/001-2-22/peter.txt')
-rw-r--r--npc/001-2-22/peter.txt335
1 files changed, 335 insertions, 0 deletions
diff --git a/npc/001-2-22/peter.txt b/npc/001-2-22/peter.txt
new file mode 100644
index 000000000..0365392af
--- /dev/null
+++ b/npc/001-2-22/peter.txt
@@ -0,0 +1,335 @@
+// 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#001-2-22 variable.
+// "001-2-23" - map with mobs.
+// "$@ARTIS_RAT1_HELPER$" - Name of the participant.
+// "$@ARTIS_RAT1_DEATHS - Number of deaths when the participant starts the fight.
+// "$@ARTIS_RAT1_CONTROL" - Explanation of each index of the array.
+// "$@ARTIS_RAT1_OLD_HELPER$" - Name of the participant.
+// "$@ARTIS_RAT1_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.
+
+001-2-22,72,34,0 script AreaNPC#001-2-22 NPC_HIDDEN,0,1,{
+
+OnTouch:
+ if (BaseLevel < 5) goto L_Stop;
+ if ($@ARTIS_RAT1_COUNTDOWN == 0) goto L_NoCountDown;
+ if ((gettimetick(2) - $@ARTIS_RAT1_COUNTDOWN) < 10) goto L_NoGoodTick;
+ if (($@ARTIS_RAT1_OLD_HELPER$ == strcharinfo(0)) && ((gettimetick(2) - $@ARTIS_RAT1_COUNTDOWN) < 60)) goto L_NoGoodTick;
+ $@ARTIS_RAT1_COUNTDOWN = 0;
+
+L_NoCountDown:
+ if ($@ARTIS_RAT1_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#001-2-22::OnReturnWin";
+ close;
+
+L_Stop:
+ doevent "Peter#001-2-22::OnStop";
+
+ close;
+
+L_Occupied:
+ doevent "Peter#001-2-22::OnDontneedHelp";
+
+ close;
+
+L_Task:
+ doevent "Peter#001-2-22::OnGiveTask";
+
+ close;
+
+L_Rfail:
+ doevent "Peter#001-2-22::OnReturnFail";
+
+ close;
+
+L_Rwin:
+ doevent "Peter#001-2-22::OnReturnWin";
+
+ close;
+
+L_NoGoodTick:
+ doevent "Peter#001-2-22::OnNoGoodTick";
+
+ close;
+}
+
+001-2-22,70,35,0 script Peter#001-2-22 NPC_RATTO_SAILOR,{
+ if (BaseLevel < 5) goto OnTooWeak;
+ if ($@ARTIS_RAT1_COUNTDOWN == 0) goto L_NoCountDown;
+ if ((gettimetick(2) - $@ARTIS_RAT1_COUNTDOWN) < 10) goto OnNoGoodTick;
+ if (($@ARTIS_RAT1_OLD_HELPER$ == strcharinfo(0)) && ((gettimetick(2) - $@ARTIS_RAT1_COUNTDOWN) < 60)) goto OnNoGoodTick;
+ $@ARTIS_RAT1_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;
+
+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:
+ warp "001-2-22", 72, 36;
+
+ 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! They are a permanent problem so I will always need your help to exterminate them in order to keep their number under control. Your help is very welcome indeed. Unfortunately, I can give you a reward only for the first extermination.");
+ 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 1000 Esperin 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 ($@ARTIS_RAT1_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 ($@ARTIS_RAT1_HELPER$ != "") goto OnDontneedHelp;
+ if (.@peter == 6) setq ShipQuests_Peter, 1;
+ .@peter = getq(ShipQuests_Peter);
+
+L_Start:
+ mes "";
+ mesn;
+ mesq l("Okay, you can start!");
+
+OnStartOutside:
+ if ($@ARTIS_RAT1_HELPER$ != "") goto OnDontneedHelp;
+ $@ARTIS_RAT1_HELPER$ = strcharinfo(0);
+ $@ARTIS_RAT1_DEATHS = PC_DIE_COUNTER;
+ initnpctimer;
+ warp "001-2-23", 48, 28;
+ doevent "RattosControl#001-2-23::OnSpawn";
+
+ goto L_Quit;
+
+OnTimer2000:
+ if (attachrid(getcharid(3, $@ARTIS_RAT1_HELPER$)) == 0) goto L_Logoff;
+ $@ARTIS_RAT1_CONTROL[9] = $@ARTIS_RAT1_CONTROL[9] + 2;
+ if ($@ARTIS_RAT1_CONTROL[9] > 100) goto L_Timeout;
+ if (PC_DIE_COUNTER > $@ARTIS_RAT1_DEATHS) goto L_Dead;
+ if ($@ARTIS_RAT1_CONTROL[1] && $@ARTIS_RAT1_CONTROL[2] && $@ARTIS_RAT1_CONTROL[3] && $@ARTIS_RAT1_CONTROL[4]) goto L_Done;
+ if (getmapusers("001-2-23") == 0) goto L_CleaningEnd;
+ goto L_CheckRattos;
+
+ end;
+
+L_CheckRattos:
+ if ($@ARTIS_RAT1_CONTROL[1]) $@ARTIS_RAT1_CONTROL[5] = $@ARTIS_RAT1_CONTROL[5] + 2;
+ if ($@ARTIS_RAT1_CONTROL[2]) $@ARTIS_RAT1_CONTROL[6] = $@ARTIS_RAT1_CONTROL[6] + 2;
+ if ($@ARTIS_RAT1_CONTROL[3]) $@ARTIS_RAT1_CONTROL[7] = $@ARTIS_RAT1_CONTROL[7] + 2;
+ if ($@ARTIS_RAT1_CONTROL[4]) $@ARTIS_RAT1_CONTROL[8] = $@ARTIS_RAT1_CONTROL[8] + 2;
+ if ($@ARTIS_RAT1_CONTROL[5] > 45) doevent "RattosControl#001-2-23::OnRatto1Respawn";
+ if ($@ARTIS_RAT1_CONTROL[6] > 45) doevent "RattosControl#001-2-23::OnRatto2Respawn";
+ if ($@ARTIS_RAT1_CONTROL[7] > 45) doevent "RattosControl#001-2-23::OnRatto3Respawn";
+ if ($@ARTIS_RAT1_CONTROL[8] > 45) doevent "RattosControl#001-2-23::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.", $@ARTIS_RAT1_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 "001-2-22", 72, 36;
+
+ 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("001-2-23") > 0) warp "001-2-22", 72, 36;
+
+ goto L_CleaningEnd;
+
+L_Done:
+ $@ARTIS_RAT1_CONTROL[10] = $@ARTIS_RAT1_CONTROL[10] + 2;
+ if($@ARTIS_RAT1_CONTROL[10] < 5) goto L_NotYet;
+ .@peter = getq(ShipQuests_Peter);
+ if (.@peter == 2 || .@peter == 4) goto L_Reward;
+ warp "001-2-22", 72, 36;
+
+ goto L_Thanks;
+
+L_CleaningEnd:
+ stopnpctimer;
+ $@ARTIS_RAT1_HELPER$ = "";
+ $@ARTIS_RAT1_DEATHS = 0;
+ cleararray $@ARTIS_RAT1_CONTROL, 0, 11;
+ killmonster "001-2-23", "RattosControl#001-2-23::OnRatto1Death";
+ killmonster "001-2-23", "RattosControl#001-2-23::OnRatto2Death";
+ killmonster "001-2-23", "RattosControl#001-2-23::OnRatto3Death";
+ killmonster "001-2-23", "RattosControl#001-2-23::OnRatto4Death";
+
+ end;
+
+L_CleaningClose:
+ stopnpctimer;
+ $@ARTIS_RAT1_OLD_HELPER$ = $@ARTIS_RAT1_HELPER$;
+ $@ARTIS_RAT1_HELPER$ = "";
+ $@ARTIS_RAT1_DEATHS = 0;
+ cleararray $@ARTIS_RAT1_CONTROL, 0, 11;
+ killmonster "001-2-23", "RattosControl#001-2-23::OnRatto1Death";
+ killmonster "001-2-23", "RattosControl#001-2-23::OnRatto2Death";
+ killmonster "001-2-23", "RattosControl#001-2-23::OnRatto3Death";
+ killmonster "001-2-23", "RattosControl#001-2-23::OnRatto4Death";
+ $@ARTIS_RAT1_COUNTDOWN = gettimetick(2);
+
+ close;
+
+L_Reward:
+ warp "001-2-22", 72, 36;
+ setq ShipQuests_Peter, 5;
+ .@peter = getq(ShipQuests_Peter);
+ mesn;
+ mesq l("Good job!") + " " + l("Here's your reward!");
+ getexp 100, 0;
+ Zeny = Zeny + 1000;
+ message strcharinfo(0), l("You receive @@ E!", 1000);
+
+ 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 = 3;
+ end;
+}