diff options
Diffstat (limited to 'npc/quests/quests_geffen.txt')
-rw-r--r-- | npc/quests/quests_geffen.txt | 282 |
1 files changed, 273 insertions, 9 deletions
diff --git a/npc/quests/quests_geffen.txt b/npc/quests/quests_geffen.txt index b7f4550d7..a220fd654 100644 --- a/npc/quests/quests_geffen.txt +++ b/npc/quests/quests_geffen.txt @@ -1,20 +1,19 @@ -//===== rAthena Script ======================================= +//===== Hercules Script ====================================== //= Quest NPCs related to Geffen -//===== By: ================================================== +//===== By: ================================================== //= kobra_k88 & Samuray22 -//===== Current Version: ===================================== -//= 1.4 -//===== Compatible With: ===================================== -//= rAthena 7.15 + -//===== Description: ========================================= +//===== Current Version: ===================================== +//= 1.5 +//===== Description: ========================================= //= Welding Mask and Headset Quests. -//===== Additional Comments: ================================= +//===== Additional Comments: ================================= //= 1.1 Fixed exploits [Lupus] //= 1.2 Removed Duplicates [Silent] //= 1.3 Updated "Welding Mask" Quest to the Official one. [Samuray22] //= 1.3a replaced item "names" with item id. Added missing [Lupus] //= 1.4 Updated welding mask and headset quests. [L0ne_W0lf] -//============================================================ +//= 1.5 Added Number Match Game. [Euphy] +//============================================================ // Blacksmith: 'Welding Mask' Quest //============================================================ @@ -162,3 +161,268 @@ geffen_in,30,71,4 script Eric 83,{ close; } } + +// Number Match Game :: gef_yagu +//============================================================ +geffen,122,77,4 script Nia#yagu 700,{ + mes "[Nia]"; + mes "Hello, I'm Nia, the fifth"; + mes "disciple of Mawong, the"; + mes "gaming mastermind. Now,"; + mes "how would you like to play a"; + mes "Number Match game with me?"; + next; + switch(select("Number Match Game?:Practice Number Match:Play Number Match:Record Holder:Cancel")) { + case 1: + mes "[Nia]"; + mes "Ah, well, the objective of"; + mes "the Number Match game is to"; + mes "guess the number I'm thinking"; + mes "of. Of course, there are a few"; + mes "rules that limit the numbers"; + mes "that I can choose from."; + next; + mes "[Nia]"; + mes "All the numbers that I make"; + mes "up must be 3 digits, I can't"; + mes "use 0 for any of the digits,"; + mes "and I can't use the same"; + mes "number for any of the digits"; + mes "more than once."; + next; + mes "[Nia]"; + mes "So, for example, I can't"; + mes "use the numbers 103, 112,"; + mes "252, or 701. Those numbers"; + mes "either have a 0, or they use"; + mes "the same number in the digits"; + mes "more than once. Got it now?"; + next; + mes "[Nia]"; + mes "Now, you only get 5 guesses,"; + mes "and after each guess, I'll tell"; + mes "you how many digits you guessed"; + mes "correctly, followed by the number of correctly guessed digits in"; + mes "the correct digit place."; + next; + mes "[Nia]"; + mes "For example, let's say the"; + mes "number I come up with is 168."; + mes "If your first guess is 678, then you guessed two of the digits,"; + mes "6 and 8, correctly. However,"; + mes "only 8 is in the correct place."; + next; + mes "[Nia]"; + mes "You know, it'd be a good idea"; + mes "if you try the Practice Mode"; + mes "first. Then, when you're more"; + mes "comfortable, play the actual"; + mes "Number Match game. Don't forget that speed counts for your score!"; + next; + mes "[Nia]"; + mes "Ah, if you happen to"; + mes "make a new record in the"; + mes "Number Match game, you'll"; + mes "have your name recorded,"; + mes "so don't miss this chance for"; + mes "fame and maybe even fortune~"; + close; + case 2: + mes "[Nia]"; + mes "Great, let's do a practice"; + mes "Number Match game. Please"; + mes "try to guess my number, okay?"; + mes "If you want to cancel, then please enter a number greater than 1,000."; + set .@practice,1; + break; + case 3: + mes "[Nia]"; + mes "Great, let's play Number Match!"; + mes "You will have 5 chances to guess the number that I'm thinking of."; + mes "If you want to cancel, then please enter a number greater than 1,000."; + set .@practice,0; + break; + case 4: + set .@name_record$, $050908_minus1_yagu$; + if (.@name_record$ == "") //custom + set .@name_record$,"(null)"; + set .@score_record, $050908_minus1_yagu; + set .@score_min, .@score_record / 60; + set .@score_sec, .@score_record % 60; + mes "[Nia]"; + mes "^ff0000" + .@name_record$ + "^000000 is the"; + mes "record holder for the Number"; + mes "Match game with a time of"; + mes "^ff0000" + .@score_min + " minutes, " + .@score_sec + " seconds^000000."; + close; + case 5: + mes "[Nia]"; + mes "Take care of yourself,"; + mes "adventurer. If you ever"; + mes "feel like playing a Number"; + mes "Match game, come and talk"; + mes "to me, alright? See you~"; + close; + } + next; + + // Generate 3 digits of a number. + while(1) { + set .@yagu100, rand(1,9); + set .@yagu10, rand(1,9); + set .@yagu1, rand(1,9); + if ((.@yagu100 != .@yagu10) && (.@yagu100 != .@yagu1) && (.@yagu10 != .@yagu1)) { + // Store the actual number (unofficial). + set .@yagu, (100*.@yagu100) + (10*.@yagu10) + .@yagu1; + break; + } + } + + // The official time calculation is based on ServerTime, + // an int HHMMSS equivalent to atoi(gettimestr("%H%M%S",7)). + // UNIX time is really a better way to do this. + set .@start_time, gettimetick(2); + + while(1) { + + // Guess a number that meets all conditions. + while(1) { + if (input(.@input,100,999) != 0) { + mes "[Nia]"; + mes "You've canceled the"; + mes "Number Match game."; + close; + } + set .@input100, .@input / 100; + set .@input10, (.@input % 100) / 10; + set .@input1, .@input % 10; + if ((.@input100 > 0) && (.@input10 > 0) && (.@input1 > 0)) { + if ((.@input100 != .@input10) && (.@input100 != .@input1) && (.@input10 != .@input1)) + break; + } + mes "[Nia]"; + mes "You entered one of the"; + mes "digits as 0, or input the"; + mes "same numerical value in"; + mes "the digits more than once."; + mes "Please enter another guess."; + next; + } + + set .@retry, .@retry+1; + mes "[Nia]"; + mes "^ff0000"+strcharinfo(0)+"^000000,"; + mes "your guess is ^0000ff"+.@input+"^000000."; + mes "Give me a moment to"; + mes "come up with your results."; + next; + + // Correct digits in correct locations. + set .@strike,0; + if (.@yagu100 == .@input100) + set .@strike, .@strike+1; + if (.@yagu10 == .@input10) + set .@strike, .@strike+1; + if (.@yagu1 == .@input1) + set .@strike, .@strike+1; + + // Correct digits in incorrect locations. + set .@ball,0; + if ((.@yagu100 == .@input10) || (.@yagu100 == .@input1)) + set .@ball, .@ball+1; + if ((.@yagu10 == .@input100) || (.@yagu10 == .@input1)) + set .@ball, .@ball+1; + if ((.@yagu1 == .@input100) || (.@yagu1 == .@input10)) + set .@ball, .@ball+1; + + if (.@strike == 3) { + if (.@practice) { + mes "[Nia]"; + mes "Yes, the number that"; + mes "I guessed was ^ff0000"+.@yagu+"^000000!"; + mes "Congratulations, you"; + mes "just won this practice"; + mes "game! Now you should be"; + mes "ready for the real thing~"; + close; + } else { + + // Calculate final time and check against the previous record. + set .@end_time, gettimetick(2); + if (.@end_time < .@start_time) + set .@end_time, .@end_time + 3600; + set .@total_time, .@end_time - .@start_time; + set .@total_min, .@total_time / 60; + set .@total_sec, .@total_time % 60; + set .@name_record$, $050908_minus1_yagu$; + if (.@name_record$ == "") //custom + set .@name_record$,"(null)"; + set .@score_record, $050908_minus1_yagu; + set .@score_min, .@score_record / 60; + set .@score_sec, .@score_record % 60; + + if (.@score_record >= .@total_time || !.@score_record) { //custom (second condition) + set $050908_minus1_yagu$, strcharinfo(0); + set $050908_minus1_yagu, .@total_time; + mes "[Nia]"; + mes "Great! You guessed"; + mes "my number, which was"; + mes "^ff0000" + .@yagu + "^000000. You finished in"; + mes "^ff0000" + .@total_min + " minutes, " + .@total_sec + " seconds^000000,"; + mes "breaking the previous record"; + mes "of ^ff0000" + .@score_min + " minutes, " + .@score_sec + " seconds^000000."; + next; + mes "[Nia]"; + mes "^ff0000" + .@name_record$ + "^000000"; + mes "set that old record,"; + mes "but now you are the"; + mes "new person to beat in the"; + mes "Match Game. Congratulations"; + mes "for setting a new record!"; + close; + } + mes "[Nia]"; + mes "Nice work, you guessed"; + mes "my number! The answer, of"; + mes "course, was ^ff0000" + .@yagu + "^000000. You managed"; + mes "to guess this number correctly"; + mes "in ^ff0000" + .@total_min + " minutes, " + .@total_sec + " seconds^000000."; + next; + mes "[Nia]"; + mes "^ff0000" + .@name_record$ + "^000000 is"; + mes "the current Number Match"; + mes "record holder with a time"; + mes "of ^ff0000" + .@score_min + " minutes, " + .@score_sec + " seconds^000000."; + mes "Good luck, and hopefully you"; + mes "can break this record someday~"; + close; + } + } else { + if (.@practice) { + mes "[Nia]"; + mes "Your guess has ^ff0000" + .@ball + "^000000 of the"; + mes "correct numbers. ^ff0000" + .@strike + "^000000 of the"; + mes "digits in your guess have"; + mes "the correct number in the"; + mes "correct digit placement."; + mes "Alright, try it again~"; + next; + } else { + mes "[Nia]"; + mes "Your last guess had ^ff0000" + .@ball + "^000000"; + mes "of the correct numbers,"; + mes "and ^ff0000" + .@strike + "^000000 digits in your guess"; + mes "had the correct number in"; + mes "the correct digit placement."; + switch(.@retry) { + case 1: mes "You have four guesses left."; break; + case 2: mes "You have three guesses left."; break; + case 3: mes "You have two guesses left."; break; + case 4: mes "You only have one guess left..."; break; + case 5: mes "The answer was ^ff0000" + .@yagu + "^000000."; close; + } + next; + } + } + } +} |