summaryrefslogtreecommitdiff
path: root/npc/002-1
diff options
context:
space:
mode:
Diffstat (limited to 'npc/002-1')
-rw-r--r--npc/002-1/peter.txt376
1 files changed, 133 insertions, 243 deletions
diff --git a/npc/002-1/peter.txt b/npc/002-1/peter.txt
index c129b7388..22c6cc797 100644
--- a/npc/002-1/peter.txt
+++ b/npc/002-1/peter.txt
@@ -1,12 +1,7 @@
-// TMW2 script need total rewrite.
-// Evol scripts.
-// Authors:
-// 4144
-// Ablu
-// Alastrim
-// Qwerty Dragon
-// Reid
-// Vasily_Makarov
+// TMW2 script
+// Author:
+// Jesusalva
+// Original evol script authors: 4144, Ablu, Alastrim, Qwerty Dragon, Reid, Vasily_Makarov
// Description:
// Rat hunter.
// 4+2 bits array:
@@ -15,113 +10,74 @@
// 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.
+// & 1 Task given.
+// & 2 Task completed (easy level).
+// & 4 Task completed (medium level).
+// & 8 Task completed (hard level).
+// Setq2:
+// Number of killed Rattos:
+// & 1 - Ratto 1
+// & 2 - Ratto 2
+// & 4 - Ratto 3
+// & 8 - Ratto 4
+// = 15: All rattos killed
+// Setq3:
+// Instance ID (so we can destroy it later)
+//
// 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,{
+// .@q = Peter variable.
+
+002-1,35,24,0 script AreaNPC#Peter NPC_HIDDEN,0,1,{
OnTouch:
+ .@q = getq(ShipQuests_Peter);
+ .@q2 = getq2(ShipQuests_Peter);
+ .@q3 = getq3(ShipQuests_Peter);
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";
+
+ if (.@q && isinstance(.@q3)) goto L_Rfail;
+ doevent "Peter::OnGiveTask";
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,{
+ .@q = getq(ShipQuests_Peter);
+ .@q2 = getq2(ShipQuests_Peter);
+ .@q3 = getq3(ShipQuests_Peter);
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;
+ if (!.@q || !isinstance(.@q3)) goto L_Task;
+ if (.@q2 < 4) goto L_ReturnFail;
+ dispbottom l("I am broken?! Please report! Debug data: @@ (@@)", .@q, .@q2);
+ close;
OnGiveTask:
- setq ShipQuests_Peter, 6;
- .@peter = getq(ShipQuests_Peter);
+L_Task:
+ if (!.@q)
+ setq ShipQuests_Peter, 1, 0, -1;
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?");
+ mesq l("I need somebody who can rid the hold of the ship of these creatures. 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;
+ close;
OnLowTime:
if (getmap() == "002-2")
@@ -131,8 +87,7 @@ OnLowTime:
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;
+ close;
OnStop:
slide 35, 26;
@@ -143,74 +98,62 @@ OnStop:
close;
OnReturnFail:
+L_ReturnFail:
+ instance_destroy(.@q3);
mesn;
- mesq l("I see it's not so easy to get rid of these rattos. Do you want to try again?");
+ mesq l("I see it's not so easy to get rid of the monsters. 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?");
+ mesq l("There are three kind of monsters which frequently attacks our fair vessel.");
+ next;
+ mesn;
+ .@q = getq(ShipQuests_Peter);
+ if (!(.@q & 2)) {
+ mes l("- I currently need your help with @@.", getmonsterlink(Piousse)); // 400 HP, 80 DMG, 1872 dps, 150 ms, ASS
+ mes l("I'll give you @@ GP for this job.", 350);
+ }
+ if (!(.@q & 4)) {
+ mes l("- I currently need your help with @@.", getmonsterlink(Ratto)); // 500 HP, 80 DMG, 1572 dps, 120 ms
+ mes l("I'll give you @@ GP for this job.", 550);
+ }
+ if (!(.@q & 8)) {
+ mes l("- I currently need your help with @@.", getmonsterlink(Croc)); // 1900 HP, 145 DMG, 1872 dps, 600 ms
+ mes l("I'll give you @@ GP for this job.", 1000);
+ }
+ if (.@q == 15) {
+ mes l("- I currently need your help with @@, but there's no reward.", getmonsterlink(Ratto));
+ }
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);
+ select
+ l("I'm not feeling like it today... Sorry."),
+ rif(!(.@q & 2), l("I will take the @@ Bounty.", "Piousse")),
+ rif(!(.@q & 4), l("I will take the @@ Bounty.", "Ratto")),
+ rif(!(.@q & 8), l("I will take the @@ Bounty.", "Croc")),
+ rif(.@q == 15, l("Why not, I need to train anyway."));
+
+ if (@menu == 1)
+ close;
+
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?");
+ mesc l("Some of them are pretty strong. Do you need an explanation about hit'n'run and the monster you're about to face?");
if (askyesno() == ASK_YES) {
mes "";
mesc l(".:: Hit'n'Run Tactic ::.");
@@ -219,136 +162,83 @@ L_Start:
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;
+ if (@menu == 2)
+ mesc l("Piousse are not healthy, but they aid one each other. Take utmost care.");
+ else if (@menu == 4)
+ mesc l("Crocs are dangerous and very healthy, but very slow. Use that on your advantage.");
+ else
+ mesc l("Rattos are very fast. They walk fast and attack fast. I advise bringing some healing items!");
+ next;
}
mes "";
mesn;
mesq l("Okay, you can start!");
+// Init Instance
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;
+ .@ID=getcharid(0);
+ @MAP_NAME$="nard@"+str(.@ID); // Max 4 chars for map name
+ .@INSTID = instance_create("002-2@a"+(.@ID), getcharid(3), IOT_CHAR);
+ .@instanceMapName$ = instance_attachmap("002-2", .@INSTID, 0, @MAP_NAME$);
+ setq2 ShipQuests_Peter, 0;
+ setq3 ShipQuests_Peter, .@INSTID;
+
+ // It'll be self-destroyed when time runs out (2 minutes)
+ instance_set_timeout(120, 120, .@INSTID);
+ instance_init(.@INSTID);
+
+ // Save in a less reliable way the challenge you took
+ if (@menu == 2) {
+ @peter=2;
+ @pt_mob=Piousse;
+ } else if (@menu == 3) {
+ @peter=4;
+ @pt_mob=Ratto;
+ } else if (@menu == 4) {
+ @peter=8;
+ @pt_mob=Croc;
+ } else {
+ @peter=0;
+ @pt_mob=Ratto;
+ }
- end;
+ warp @MAP_NAME$, 33, 24;
+ addtimer(100000, "Peter::OnLowTime");
+ addtimer(120000, "Peter::OnTimeout");
-OnDontneedHelp:
- mesn;
- mesq l("I don't need your help right now, come back later.");
- next;
- mesq l("@@ is helping me.", $@RAT_SAILOR_HELPER$);
+ // Spawn the Monsters
+ areamonster @MAP_NAME$, 23, 19, 57, 40, strmobinfo(1, @pt_mob), @pt_mob, 1, "RattosControl::OnRatto1Death";
+ areamonster @MAP_NAME$, 23, 19, 57, 40, strmobinfo(1, @pt_mob), @pt_mob, 1, "RattosControl::OnRatto2Death";
+ areamonster @MAP_NAME$, 23, 19, 57, 40, strmobinfo(1, @pt_mob), @pt_mob, 1, "RattosControl::OnRatto3Death";
+ areamonster @MAP_NAME$, 23, 19, 57, 40, strmobinfo(1, @pt_mob), @pt_mob, 1, "RattosControl::OnRatto4Death";
- goto L_Quit;
+ close;
-L_Timeout:
+OnTimeout:
+ .@q3 = getq3(ShipQuests_Peter);
+ instance_destroy(.@q3);
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);
-
+ warp "002-1@"+LOCATION$, 35, 26;
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;
+OnDone:
+ if (@peter)
+ setq ShipQuests_Peter, getq(ShipQuests_Peter)|@peter, 0, -1;
-L_Thanks:
+ warp "002-1@"+LOCATION$, 35, 26;
+ .@q = getq(ShipQuests_Peter);
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;
+ mesq l("Good job!") + " " + l("Here's your reward!");
+ getexp @peter*52, @peter;
+ switch (@peter) {
+ case 2: @peter=350; break;
+ case 4: @peter=550; break;
+ case 8: @peter=1000; break;
+ }
-OnNoGoodTick:
- mesn;
- mesq l("I don't need your help right now, come back later.");
+ Zeny = Zeny + @peter;
+ message strcharinfo(0), l("You receive @@ GP!", @peter);
close;
OnInit: