diff options
author | Jesusalva Jesusalva <jesusalva@themanaworld.org> | 2023-07-17 01:48:54 +0000 |
---|---|---|
committer | Jesusalva Jesusalva <jesusalva@themanaworld.org> | 2023-07-17 01:48:54 +0000 |
commit | 5b0a9c8ffdbac30c4ff3981167c7206ca75425c7 (patch) | |
tree | 5a82418c9f0b725fed8d5e5cf0c1fa1a6fe861bc /npc/033-1 | |
parent | cac5c770e7bbb169e9516909dfc0d44afceb1446 (diff) | |
download | serverdata-5b0a9c8ffdbac30c4ff3981167c7206ca75425c7.tar.gz serverdata-5b0a9c8ffdbac30c4ff3981167c7206ca75425c7.tar.bz2 serverdata-5b0a9c8ffdbac30c4ff3981167c7206ca75425c7.tar.xz serverdata-5b0a9c8ffdbac30c4ff3981167c7206ca75425c7.zip |
Jesusalva/00610
Diffstat (limited to 'npc/033-1')
-rw-r--r-- | npc/033-1/_import.txt | 2 | ||||
-rw-r--r-- | npc/033-1/misc.txt | 111 | ||||
-rw-r--r-- | npc/033-1/nico.txt | 472 | ||||
-rw-r--r-- | npc/033-1/trainer.txt | 184 |
4 files changed, 755 insertions, 14 deletions
diff --git a/npc/033-1/_import.txt b/npc/033-1/_import.txt index 90c62d6..bd2a012 100644 --- a/npc/033-1/_import.txt +++ b/npc/033-1/_import.txt @@ -2,3 +2,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/033-1/_warps.txt", "npc/033-1/misc.txt", +"npc/033-1/nico.txt", +"npc/033-1/trainer.txt", diff --git a/npc/033-1/misc.txt b/npc/033-1/misc.txt index f57cc03..608cc1f 100644 --- a/npc/033-1/misc.txt +++ b/npc/033-1/misc.txt @@ -44,21 +44,69 @@ OnTouch: function script SetPorthosPortal { .@id = getarg(0); mesn l("Portal %02d", .@id); - mes l("Do you want to activate an event?"); + switch (.@id) { + case 6: + mesc l("Event: Moubootaur Showdown"), 1; break; + case 7: + mesc l("Warp: TMW Classic"), 1; close; + case 8: + mesc l("Event: Blanc's Showdown"), 1; break; + case 9: + mesc l("Warp: TMW ML"), 1; close; + default: + mesc l("This portal has not been coded yet."); close; + } next; - select - l("Cancel"), - l("Moubootaur Showdown"); - mes ""; - switch (@menu) { - case 2: + mes l("Do you want to activate the event?"); + if (askyesno() == ASK_NO) close; + switch (.@id) { + case 6: setd(sprintf("$@EVENT_%02d", .@id), PORTHOS_ACTIVE); setd(sprintf("$@EVENT_%02d_M$", .@id), "001-13-2"); setd(sprintf("$@EVENT_%02d_X", .@id), 47); setd(sprintf("$@EVENT_%02d_Y", .@id), 52); break; + case 8: + // Clean-up 001-3 in case there are already mobs there + killmonsterall("001-3"); + // Environment Monsters, they do not respawn + .@m$="001-3"; + // Thematic mobs + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, Thug), Thug, 150); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, Swashbuckler), Swashbuckler, 150); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, Grenadier), Grenadier, 140); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, OceanPirate), OceanPirate, 100); + // There's `Marley` but they're listed as boss + // We'll likely use them in the mazes, as your target? + // Environment runt + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, DeathCat), DeathCat, 100); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, BlackSlime), BlackSlime, 90); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, SmallFrog), SmallFrog, 80); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, BigFrog), BigFrog, 80); + // The lower tier + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, WickedMushroom), WickedMushroom, 50); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, Forain), Forain, 50); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, Assassin), Assassin, 50); + // The mid tier + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, HoodedNinja), HoodedNinja, 30); + // The high tier + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, BlackSlimeMother), BlackSlimeMother, 10); + // The boss level spawns + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, Reaper), Reaper, 2); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, NightmareDragon), NightmareDragon, 2); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, Mandragora), Mandragora, 1); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, SiegeTower), SiegeTower, 1); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, Golem), Golem, 2); + areamonster(.@m$, 20, 20, getmapinfo(MAPINFO_SIZE_X, .@m$), getmapinfo(MAPINFO_SIZE_Y, .@m$), strmobinfo(1, ShadowTortuga), ShadowTortuga, 1); + // Set everything up + setd(sprintf("$@EVENT_%02d", .@id), PORTHOS_ACTIVE); + setd(sprintf("$@EVENT_%02d_M$", .@id), "001-3"); + setd(sprintf("$@EVENT_%02d_X", .@id), 164); + setd(sprintf("$@EVENT_%02d_Y", .@id), 33); + kamibroadcast("Blanc's Showdown was enabled."); + break; default: - mes l("Ok."); + mes l("Error."); break; } close; @@ -66,25 +114,40 @@ function script SetPorthosPortal { } -033-1,72,190,0 script #Porthos01 NPC_NO_SPRITE,0,0,{ +// Shortcut to TMW Classic? +033-1,85,227,0 script #Porthos07 NPC_NO_SPRITE,0,0,{ + end; +OnTouch: + slide 85, 228; + mes l("Do you want to visit The Mana World: Classic?"); + next; + if (askyesno() == ASK_YES) + MirrorLakeSendTo(MLP_TMW, 0); + closeclientdialog; + end; +} + +// Event: Blanc's Manhunt +033-1,72,190,0 script #Porthos08 NPC_NO_SPRITE,0,0,{ end; OnTouch: - if ($@EVENT_01 == PORTHOS_BUSY) { + if ($@EVENT_06 == PORTHOS_BUSY) { dispbottom l("This portal is currently busy - an event must be in progress."); end; } - if ($@EVENT_01 == PORTHOS_UNUSED) { + // 001-3 portals + if ($@EVENT_08 == PORTHOS_UNUSED) { if (is_admin() || is_master()) - SetPorthosPortal(1); + SetPorthosPortal(8); dispbottom l("This portal is not currently active."); end; } - warp $@EVENT_01_M$, $@EVENT_01_X, $@EVENT_01_Y; + warp $@EVENT_08_M$, $@EVENT_08_X, $@EVENT_08_Y; end; } // Shortcut to Moubootaur Legends? -033-1,31,155,0 script #Porthos02 NPC_NO_SPRITE,0,0,{ +033-1,31,155,0 script #Porthos09 NPC_NO_SPRITE,0,0,{ end; OnTouch: slide 31, 156; @@ -96,3 +159,23 @@ OnTouch: end; } +// TODO: Event: Zax De'Kagen Showdown +// Event: Moubootaur Showdown +// This is a draft in npc/config/events.txt +033-1,154,238,0 script #Porthos06 NPC_NO_SPRITE,0,0,{ + end; +OnTouch: + if ($@EVENT_06 == PORTHOS_BUSY) { + dispbottom l("This portal is currently busy - an event must be in progress."); + end; + } + if ($@EVENT_06 == PORTHOS_UNUSED) { + if (is_admin() || is_master()) + SetPorthosPortal(6); + dispbottom l("This portal is not currently active."); + end; + } + warp $@EVENT_06_M$, $@EVENT_06_X, $@EVENT_06_Y; + end; +} + diff --git a/npc/033-1/nico.txt b/npc/033-1/nico.txt new file mode 100644 index 0000000..e656f4b --- /dev/null +++ b/npc/033-1/nico.txt @@ -0,0 +1,472 @@ +// TMW2 scripts. +// Authors: +// Jesusalva +// Description: +// Arcmage Cards Enhancer + +033-1,157,89,0 script Nico Goethe NPC_PLAYER,{ + function colorname; + function gameinfo; + mesn; + mesq l("My name is Nico Goethe, an %s card player.", "[@@https://arcmage.org|Arcmage@@]"); + next; + mesn; + mesq l("Would love to invite you to a card minigame... But alas, Kenton told me that minigames are a waste of time, and that I should not bother adventurers with it."); + next; + mesn; + mesq l("However, I am still up for trading cards, if you wish."); + mesc l("%s discreetly point out that cards only works well in Moubootaur Legends weapons, but this depends on your origin server.", .name$); + next; + goto L_Main; + +L_Main: + select + l("Trade a card"), + l("Evolve a card"), + l("Remove a card"), + l("Lets play!"), + l("Bye."); + mes ""; + switch (@menu) { + // Trade Card + case 1: + mesn; + mesq l("Give me a card and select another card of same class. I charge %d GP for simple exchanges.", 5000); + next; + if (Zeny < 5000) + break; + + mes "##B" + l("Drag and drop an item from your inventory.") + "##b"; + .@card = requestitem(); + if (.@card <= 1) break; + + @menuret = 0; + switch (.@card) { + case HeroCard: + case KnightCard: + case ClericCard: + case DruidCard: + case MageCard: + case NinjaCard: + case NatureCard: + case NecromancerCard: + menuint + "Sorry, I don't want to trade it.", 0, + getitemname(HeroCard), HeroCard, + getitemname(KnightCard), KnightCard, + getitemname(ClericCard), ClericCard, + getitemname(DruidCard), DruidCard, + getitemname(MageCard), MageCard, + getitemname(NinjaCard), NinjaCard, + getitemname(NatureCard), NatureCard, + getitemname(NecromancerCard), NecromancerCard; + mes ""; + break; + case SpeedCard: + case ReflectCard: + case PowerCard: + case WallCard: + menuint + "Sorry, I don't want to trade it.", 0, + getitemname(SpeedCard), SpeedCard, + getitemname(ReflectCard), ReflectCard, + getitemname(PowerCard), PowerCard, + getitemname(WallCard), WallCard; + mes ""; + break; + case HeroCardS: + case KnightCardS: + case ClericCardS: + case DruidCardS: + case MageCardS: + case NinjaCardS: + case NatureCardS: + case NecromancerCardS: + menuint + "Sorry, I don't want to trade it.", 0, + getitemname(HeroCardS), HeroCardS, + getitemname(KnightCardS), KnightCardS, + getitemname(ClericCardS), ClericCardS, + getitemname(DruidCardS), DruidCardS, + getitemname(MageCardS), MageCardS, + getitemname(NinjaCardS), NinjaCardS, + getitemname(NatureCardS), NatureCardS, + getitemname(NecromancerCardS), NecromancerCardS; + mes ""; + break; + case SpeedCardS: + case ReflectCardS: + case PowerCardS: + case WallCardS: + menuint + "Sorry, I don't want to trade it.", 0, + getitemname(SpeedCardS), SpeedCardS, + getitemname(ReflectCardS), ReflectCardS, + getitemname(PowerCardS), PowerCardS, + getitemname(WallCardS), WallCardS; + mes ""; + break; + case HeroCardX: + case KnightCardX: + case ClericCardX: + case DruidCardX: + case MageCardX: + case NinjaCardX: + case NatureCardX: + case NecromancerCardX: + menuint + "Sorry, I don't want to trade it.", 0, + getitemname(HeroCardX), HeroCardX, + getitemname(KnightCardX), KnightCardX, + getitemname(ClericCardX), ClericCardX, + getitemname(DruidCardX), DruidCardX, + getitemname(MageCardX), MageCardX, + getitemname(NinjaCardX), NinjaCardX, + getitemname(NatureCardX), NatureCardX, + getitemname(NecromancerCardX), NecromancerCardX; + mes ""; + break; + case SpeedCardX: + case ReflectCardX: + case PowerCardX: + case WallCardX: + menuint + "Sorry, I don't want to trade it.", 0, + getitemname(SpeedCardX), SpeedCardX, + getitemname(ReflectCardX), ReflectCardX, + getitemname(PowerCardX), PowerCardX, + getitemname(WallCardX), WallCardX; + mes ""; + break; + default: + mesn; + mesq l("Sorry, I only deal with Arcmage cards."); + break; + } + if (@menuret < 1) + break; + Zeny -= 5000; + delitem .@card, 1; + getitem @menuret, 1; + break; + // Evolve Card + case 2: + mesn; + mesq l("Give me %s copies of the same card and %s GP, and I'll improve its tier.", b(l("three")), fnum(25000)); + mesc l("Normal Cards can be upgraded to S-Tier, and S Cards can be upgraded to X-Tier. X-Tier cards cannot be upgraded."); + next; + if (Zeny < 25000) + break; + + mes "##B" + l("Drag and drop an item from your inventory.") + "##b"; + .@card = requestitem(); + if (.@card <= 1) break; + if (countitem(.@card) < 3) { + mesn; + mesq l("You don't have enough cards of this type to upgrade."); + next; + break; + } + switch (.@card) { + case HeroCard: + delitem .@card, 3; Zeny -= 25000; + getitem HeroCardS, 1; + break; + case KnightCard: + delitem .@card, 3; Zeny -= 25000; + getitem KnightCardS, 1; + break; + case ClericCard: + delitem .@card, 3; Zeny -= 25000; + getitem ClericCardS, 1; + break; + case DruidCard: + delitem .@card, 3; Zeny -= 25000; + getitem DruidCardS, 1; + break; + case MageCard: + delitem .@card, 3; Zeny -= 25000; + getitem MageCardS, 1; + break; + case NinjaCard: + delitem .@card, 3; Zeny -= 25000; + getitem NinjaCardS, 1; + break; + case NatureCard: + delitem .@card, 3; Zeny -= 25000; + getitem NatureCardS, 1; + break; + case NecromancerCard: + delitem .@card, 3; Zeny -= 25000; + getitem NecromancerCardS, 1; + break; + case SpeedCard: + delitem .@card, 3; Zeny -= 25000; + getitem SpeedCardS, 1; + break; + case ReflectCard: + delitem .@card, 3; Zeny -= 25000; + getitem ReflectCardS, 1; + break; + case PowerCard: + delitem .@card, 3; Zeny -= 25000; + getitem PowerCardS, 1; + break; + case WallCard: + delitem .@card, 3; Zeny -= 25000; + getitem WallCardS, 1; + break; + + + case HeroCardS: + delitem .@card, 3; Zeny -= 25000; + getitem HeroCardX, 1; + break; + case KnightCardS: + delitem .@card, 3; Zeny -= 25000; + getitem KnightCardX, 1; + break; + case ClericCardS: + delitem .@card, 3; Zeny -= 25000; + getitem ClericCardX, 1; + break; + case DruidCardS: + delitem .@card, 3; Zeny -= 25000; + getitem DruidCardX, 1; + break; + case MageCardS: + delitem .@card, 3; Zeny -= 25000; + getitem MageCardX, 1; + break; + case NinjaCardS: + delitem .@card, 3; Zeny -= 25000; + getitem NinjaCardX, 1; + break; + case NatureCardS: + delitem .@card, 3; Zeny -= 25000; + getitem NatureCardX, 1; + break; + case NecromancerCardS: + delitem .@card, 3; Zeny -= 25000; + getitem NecromancerCardX, 1; + break; + case SpeedCardS: + delitem .@card, 3; Zeny -= 25000; + getitem SpeedCardX, 1; + break; + case ReflectCardS: + delitem .@card, 3; Zeny -= 25000; + getitem ReflectCardX, 1; + break; + case PowerCardS: + delitem .@card, 3; Zeny -= 25000; + getitem PowerCardX, 1; + break; + case WallCardS: + delitem .@card, 3; Zeny -= 25000; + getitem WallCardX, 1; + break; + + default: + mesn; + mesq l("Sorry, I only deal with Arcmage cards."); + break; + } + break; + // Remove a card + case 3: + mesc l("You can drag and drop an item to the NPC window or select an item through your inventory."); + + delinventorylist(); + getinventorylist(); + .@item_index = requestitemindex(); + .@item_id = @inventorylist_id[.@item_index]; + + mesn; + mesq l("Your mind is set? You will probably lose all the dyes and/or cards during on the item during this process. You're bleaching a %s by the way, and THERE ARE NO REFUNDS even if the item go ablaze.", getitemlink(.@item_id)); + + if (askyesno() == ASK_YES) { + mesn; + mesq l("Sure, I'll be done in a jiff."); + next; + successremovecardsindex(.@item_index); // *should* return the card + mesn; + mesq l("Here it is, clean like a whistle!"); + } else { + mesn; + mesq l("Is it truly a hard choice to make?"); + } + next; + break; + // Play minigame + case 4: + mesn; + mesq l("...Are you trying to troll me?"); + next; + mesn; + mesq l("Well, I can't offer you an %s match, but do you want to play something else? I would charge %d GP for a match.", "[@@https://arcmage.org|Arcmage@@]", .price); + next; + if (askyesno() == ASK_NO) { + mesn; + mesq l("Suit yourself."); + next; + break; + } + gameinfo(); + mesn; + mesq l("Ready to begin?"); + if (askyesno() == ASK_YES) goto L_Start; + break; + // Leave + default: + closeclientdialog; + goodbye; + close; + break; + } + goto L_Main; + +function colorname { + switch (getarg(0)) { + case 1: + return "Green"; break; + case 2: + return "Blue"; break; + case 3: + return "Red"; break; + case 4: + return "Yellow"; break; + case 5: + return "Exit"; break; + default: + return l("ERROR: %d", getarg(0)); + } +} + +function gameinfo { + showavatar NPC_FLOPPED_NOBLEMAN; + mes ""; + mesc l("Rules:"); + mesc l("A color sequence will be displayed on the avatar frame."); + mesc l("You must then repeat the sequence at the board which will show."); + next; + mesc l("Prizes:"); + mesc l("You'll get %d GP every time you finish the sequence.", .prize); + mesc l("If you finish %d sequences, you'll get a(n) %s!", 10, getitemlink(ArcmageBoxset)); + next; + return; +} + +L_Start: + showavatar AVATAR_SEQBOARD; + mesc l("Pay attention to the sequence!"); + next; + Zeny -= .price; + deletearray(@sequence); + @streak=0; + +L_Sequence: + // Configure + setnpcdialogtitle l("Memorize the sequence!"); + array_push(@sequence, 1+rand2(4)); + sleep2(1000); + + // Display + freeloop(true); + for (.@i=0;.@i < getarraysize(@sequence);.@i++) { + showavatar 1200+@sequence[.@i]; + sleep2(1200-(@streak*20)); + } + freeloop(false); + + // Request + setnpcdialogtitle l("What was the sequence?"); + showavatar AVATAR_SEQBOARD; + sleep2(500); + + for (.@i=0;.@i < getarraysize(@sequence);.@i++) { + setskin "seqboard"; + select + l("Green"), + l("Blue"), + l("Red"), + l("Yellow"), + l("Exit"); + .@ans=@menu; + setskin ""; + mes ""; + mes l("%s", colorname(.@ans)); + //next; + setnpcdialogtitle strnpcinfo(1); + + // Exit + if (.@ans == 5) + goto L_Close; + + // Wrong reply + if (.@ans != @sequence[.@i]) + goto L_Wrong; + // Correct! + } + mes ""; + showavatar AVATAR_SEQBOARD_WELL; + + // Seems like everything is/was correct + mesn; + mesq l("Congratulations! Everything was correct!"); + Zeny+=.prize; + @streak+=1; + + // Winning Streak + if (@streak % 10 == 0) + getitem ArcmageBoxset, 1; + mesc l("Your current win streak is @@!", @streak); + next; + // Game over + if (@streak == 50) + goto L_Close; + // Otherwise, go ahead + mesn; + mesc l("Continue?"), 1; + next; + if (askyesno() == ASK_YES) + goto L_Sequence; + goto L_Close; + +L_Wrong: + showavatar AVATAR_SEQBOARD_FAIL; + mesn; + mesq l("Oh no... That is wrong! %%3"); + next; + mesn; + mesq l("Better luck next time!"); + next; + showavatar; + goto L_Main; + +L_Close: + showavatar; + mesn; + mesq l("Thanks for the match, it was fun!"); + next; + goto L_Main; + + +OnInit: + .@npcId = getnpcid(.name$); + setunitdata(.@npcId, UDT_HEADTOP, TopHat); + setunitdata(.@npcId, UDT_HEADMIDDLE, GoldenLightPlatemail); + setunitdata(.@npcId, UDT_HEADBOTTOM, LeatherTrousers); + setunitdata(.@npcId, UDT_WEAPON, ManaGloves); + setunitdata(.@npcId, UDT_HAIRSTYLE, 24); + setunitdata(.@npcId, UDT_HAIRCOLOR, 4); + npcsit; + + .sex = G_MALE; + .distance = 4; + .price = 100; + .prize = 25; + end; + +} + diff --git a/npc/033-1/trainer.txt b/npc/033-1/trainer.txt new file mode 100644 index 0000000..c4be75b --- /dev/null +++ b/npc/033-1/trainer.txt @@ -0,0 +1,184 @@ +// TMW2 scripts. +// Authors: +// Jesusalva +// Description: +// Mercenary Trainer + +033-1,180,100,0 script Mercenary Trainer NPC_REDY_MALE_SWORD,{ + mesn; + mesq l("Hello, I am a sword to hire, a Mercenary Trainer and Chief."); + next; + mesn; + mesq l("Do you want to hire a mercenary? Or perhaps get a card so you can invoke them later? I can even make them stronger if you wish."); + mesc l("With a discrete motion, you notice they also sell scrolls."); + next; + goto L_Main; + +L_Main: + select + l("Hire a mercenary"), + l("Buy a mercenary card"), + l("Evolve mercenaries"), + l("Bye."); + mes ""; + switch (@menu) { + // Hire Card + case 1: + menuint + l("[%d GP] [Lv 1~25] Hire for one hour", 1000), 1, + l("[%d GP] [Lv 26~40] Hire for one hour", 3000), 2, + l("[%d GP] [Lv 41~60] Hire for one hour", 7500), 3, + l("[%d GP] [Lv 61~79] Hire for one hour", 15000), 4, + l("[%d GP] [Lv 80~100] Hire for one hour", 25000), 5, + l("I've changed my mind"), 0; + switch (@menuret) { + case 1: + .@gp=1000; + if (Zeny < .@gp) { + mesc l("You cannot pay."), 1; + next; + } else { + .@mid=merc_randid(0, 0, 0, 0, 1000); + mercenary_create(.@mid, 3600000); + POL_PlayerMoney(.@gp); + } + break; + case 2: + .@gp=3000; + if (Zeny < .@gp) { + mesc l("You cannot pay."), 1; + next; + } else { + .@mid=merc_randid(0, 0, 0, 1000, 0); + mercenary_create(.@mid, 3600000); + POL_PlayerMoney(.@gp); + } + break; + case 3: + .@gp=7500; + if (Zeny < .@gp) { + mesc l("You cannot pay."), 1; + next; + } else { + mercenary_create merc_randid(0, 0, 1000, 0, 0), 3600000; + POL_PlayerMoney(.@gp); + } + break; + case 4: + .@gp=15000; + if (Zeny < .@gp) { + mesc l("You cannot pay."), 1; + next; + } else { + mercenary_create merc_randid(0, 1000, 0, 0, 0), 3600000; + POL_PlayerMoney(.@gp); + } + break; + case 5: + .@gp=25000; + if (Zeny < .@gp) { + mesc l("You cannot pay."), 1; + next; + } else { + mercenary_create merc_randid(1000, 0, 0, 0, 0), 3600000; + POL_PlayerMoney(.@gp); + } + break; + default: + break; + } + break; + // Buy Card + case 2: + npcshopattach(.name$); + openshop; + closedialog; + close; + break; + // Evolve Card + case 3: + mesn; + mesq l("Give me %s cards of the same type, and I'll give you one card of a higher rarity. There is no cost, but the card is random.", b(l("three"))); + next; + mes "##B" + l("Drag and drop an item from your inventory.") + "##b"; + + .@card = requestitem(); + if (.@card <= 1) break; + if (countitem(.@card) < 3) { + mesc l("You need at least %d cards of same kind.", 3), 1; + break; + } + .@st = merc_getstar(.@card); + if (.@st < 1 || .@st >= 5) { + mesc l("This cannot be evolved."), 1; + break; + } + delitem .@card, 3; + merc_boxset( + (.@st == 4 ? 1000 : 0), + (.@st == 3 ? 1000 : 0), + (.@st == 2 ? 1000 : 0), + (.@st == 1 ? 1000 : 0), + 0); + mesn; + mesq l("Here you go! Wasn't this a sweet deal?"); + break; + // Leave + default: + closeclientdialog; + goodbye; + close; + break; + } + goto L_Main; + +OnInit: + tradertype(NST_ZENY); + sellitem MercBoxEE, 25000; + sellitem MercBoxDD, 15000; + sellitem MercBoxCC, 7500; + sellitem MercBoxBB, 3750; + sellitem MercBoxAA, 1250; + + sellitem ScrollSMaggot, 1000; + sellitem ScrollSCave, 1500; + sellitem ScrollSWolvern, 2000; + sellitem ScrollSYeti, 2500; + sellitem ScrollSTerranite, 3000; + sellitem ScrollSDragon, 3500; + + sellitem SacredImmortalityPotion, 25000; + + sellitem ScrollMagnusHealA, 500; + sellitem ScrollMagnusHealB,1000; + sellitem ScrollMagnusHealC,2000; + + sellitem ScrollBattlePlansA, 400; + sellitem ScrollBattlePlansB,1000; + //sellitem ScrollBattlePlansC,1500; + + sellitem ScrollDefenseBlessA, 400; + sellitem ScrollDefenseBlessB,1000; + //sellitem ScrollDefenseBlessC,1500; + + sellitem ScrollCriticalFortuneA, 400; + sellitem ScrollCriticalFortuneB,1000; + //sellitem ScrollCriticalFortuneC,1500; + + .distance=5; + .sex=G_MALE; + end; + +// Pay your taxes! +OnBuyItem: + debugmes("Purchase confirmed"); + PurchaseTaxes("Nival"); + end; + +OnSellItem: + debugmes("Sale confirmed"); + PurchaseTaxes("Nival"); + end; + +} + |