diff options
Diffstat (limited to 'npc/027-2/werewolf.txt')
-rw-r--r-- | npc/027-2/werewolf.txt | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/npc/027-2/werewolf.txt b/npc/027-2/werewolf.txt new file mode 100644 index 00000000..87d93173 --- /dev/null +++ b/npc/027-2/werewolf.txt @@ -0,0 +1,158 @@ +027-2.gat,118,23,0 script Wolfgang 305,{ + set @Graveyard_Inn_MASK, NIBBLE_5_MASK; + set @Graveyard_Inn_SHIFT, NIBBLE_5_SHIFT; + + set @state, ((QUEST_Graveyard_Inn & @Graveyard_Inn_MASK) >> @Graveyard_Inn_SHIFT); + + set @ANIMALBONES_AMOUNT, 30; + set @ANIMALBONES_EXP, 40000; + set @money, 1000; + + if (@state > 1) goto L_Happy; + if (@state == 1) goto L_Bones; + + mes "[Wolfgang]"; + mes "\"What a nice place here, isn't it?\""; + next; + mes "\"Just the stuff they call 'food' in here is awful, bah.\""; + if (baselevel < 80) goto L_Close; + next; + mes "\"I like bones from big animals, the best would be with some raw flesh on it. But just the bones are fine too.\""; + next; + mes "\"Can you bring me " + @ANIMALBONES_AMOUNT + " of them?\""; + set @state, 1; + callsub S_Update_Mask; + close; + +L_Bones: + mes "[Wolfgang]"; + mes "\"Do you have " + @ANIMALBONES_AMOUNT + " bones of an animal for me?\""; + next; + if ((countitem("Bone") > 0) && (countitem("AnimalBones") >= @ANIMALBONES_AMOUNT)) + menu + "Yes, here they are.",L_Bring, + "What about this normal bone?",L_Human, + "Not yet.",L_Close; + if (countitem("Bone") > 0) + menu + "What about this normal bone?",L_Human, + "Not yet.",L_Close; + if (countitem("AnimalBones") >= @ANIMALBONES_AMOUNT) + menu + "Yes, here they are.",L_Bring, + "Not yet.",L_Close; + menu + "Not yet.",-; + close; + +L_Bring: + if (countitem("AnimalBones") < @ANIMALBONES_AMOUNT) + goto L_Not_Enough; + delitem "AnimalBones", @ANIMALBONES_AMOUNT; + getexp @ANIMALBONES_EXP, 0; + mes "[Wolfgang]"; + mes "\"Ah! Wonderful! Thank you.\""; + set @state, 2; + callsub S_Update_Mask; + close; + +L_Human: + mes "[Wolfgang]"; + mes "\"What?! That's a humans bone! I don't eat humans. That brings only trouble.\""; + next; + mes "\"Besides, from that I heard, they taste bad.\""; + close; + +L_Not_Enough: + mes "[Wolfgang]"; + mes "\"Are you trying to kid me? I can count.\""; + close; + +L_Happy: + mes "You see the werewolf happily crunching the bones you brought him."; + mes "[Wolfgang]"; + mes "\"Delicious. Thanks again.\""; + next; + mes "\"By the way... would you be interested in a little round of blackjack?\""; + mes "He pulls a deck of cards out of his pocket."; + next; + mes "[Wolfgang]"; + mes "\"You will need " + @money + " GP.\""; + menu + "Sure, why not?",L_Game, + "No, thanks.",-; + close; + +//The game mechanics is copied from casino.txt +L_Game: + if(zeny < @money) goto L_No_Money; + mes "[Wolfgang]"; + mes "\"Very nice. Let's start.\""; + mes "He shuffles the cards."; + next; + set zeny, zeny - @money; + set @croupier, rand(0, 4); + set @croupier, @croupier + 17; + set @player, rand(4, 21); + mes "\"You got " + @player + " with your cards."; + if(@player == 21) goto L_End; + mes "Do you want another card?\""; + next; + + menu + "Yes.", L_Another, + "No.", L_End; + +L_Another: + set @tempace, rand(2, 11); + if (@tempace == 11) goto L_Ace; + set @player, @player + @tempace; + if (@player > 21) goto L_Lost; + if (@player == 21) goto L_End; + mes "\"You got " + @player + " with your cards."; + mes "Do you want another card?\""; + next; + + menu + "Yes", L_Another, + "No", L_End; +L_End: + if (@player <= @croupier) goto L_Lost; + mes "\"You won! Hrm, here is your money.\""; + set zeny, zeny + (3 * @money); + close; + +L_No_Money: + mes "\"You need at least " + @money + " GP.\""; + close; + +L_Lost: + mes "[Wolfgang]"; + mes "\"Fine! I won!"; + mes "You got " + @player + " with your cards."; + mes "I had " + @croupier + ".\""; + close; + +L_Ace: + set @player, @player + 11; + if (@player > 21) set @player, @player - 10; + if (@player > 21) goto L_Lost; + if (@player == 21) goto L_End; + mes "You got " + @player + " with your cards."; + mes "Do you want another card?"; + next; + + menu + "Yes", L_Another, + "No", L_End; + close; + +L_Close: + close; + +S_Update_Mask: + set QUEST_Graveyard_Inn, + (QUEST_Graveyard_Inn & ~(@Graveyard_Inn_MASK)) + | (@state << @Graveyard_Inn_SHIFT); + return; +} |