// 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; }