// TMW2 scripts. // Author: // Jesusalva // Description: // Lilica is TMW-BR Scary Scary Easter Bunny and will help your trading stuff. // Data layout: // SQuest_Easter // (year of eggshell hat, strange coin limit, limited shop purchases) // Strage Coin Limit: 500, or last year + 100, the smaller of both 001-4,139,151,0 script Lilica#easter NPC_EASTER,{ mesn; mesq lg("Ah, traveller! I am Lilica the Scary Bunny! I exchange many @@ and @@ for neat rewards!","Ah, traveller! I am Lilica the Scary Bunny! I exchange many @@ and @@ for neat rewards!", getitemlink(SilverEasteregg), getitemlink(GoldenEasteregg)); next; mesn; mesq l("Golden Eggs are used for the grand collector prize. Ah, I love Easter! I loooooooove it!"); mesc l("Note: Golden and Silver Eggs are deleted after the next event end."); menu l("Scary..........."), -, l("Trade Silver Eggs"), L_Silver, l("Trade Golden Eggs"), L_Golden, rif(getq(SQuest_Easter) == gettime(7), l("Limited Shop")), L_Limited, rif(getq(SQuest_Easter) != gettime(7), l("I want an Eggshell Hat!")), L_Quest, l("View LeaderBoard"), L_Leader; close; L_Silver: openshop "#eastershop1"; closedialog; close; L_Golden: mes l("You can still purchase %d %s.", getq2(SQuest_Easter), getitemlink(StrangeCoin)); next; openshop "#eastershop2"; closedialog; close; L_Leader: mesc l("Leaderboard is refresh daily at 1 AM!"); mes("1."+$@easter_name$[0]+" ("+$@easter_value[0]+")"); mes("2."+$@easter_name$[1]+" ("+$@easter_value[1]+")"); mes("3."+$@easter_name$[2]+" ("+$@easter_value[2]+")"); mes("4."+$@easter_name$[3]+" ("+$@easter_value[3]+")"); mes("5."+$@easter_name$[4]+" ("+$@easter_value[4]+")"); mes("6."+$@easter_name$[5]+" ("+$@easter_value[5]+")"); mes("7."+$@easter_name$[6]+" ("+$@easter_value[6]+")"); mes("8."+$@easter_name$[7]+" ("+$@easter_value[7]+")"); mes("9."+$@easter_name$[8]+" ("+$@easter_value[8]+")"); mes("10."+$@easter_name$[9]+" ("+$@easter_value[9]+")"); close; L_Quest: setarray .@Seasonal, EggshellHat, EggshellHat, GreenEggshellHat, OrangeEggshellHat, BlueEggshellHat, EggshellHat; .@Hat=.@Seasonal[gettime(7)%6]; // Magically choose the hat from the array mesn; mesq l("Good choice! This year we're having a @@!", getitemlink(.@Hat)); next; mesn; mesq l("As usual, you can get only one hat yearly, for the symbolic amount of 40 @@ and 10 @@!", getitemlink(GoldenEasteregg), getitemlink(SilverEasteregg)); next; menu l("Maybe later."), -, rif(countitem(GoldenEasteregg) >= 40 && countitem(SilverEasteregg) >= 10, l("Deal.")), L_QuestDone; close; L_QuestDone: inventoryplace .@Hat, 1; delitem GoldenEasteregg, 40; delitem SilverEasteregg, 10; if (rand2(10000) < 100) goto L_Unlucky; setq SQuest_Easter, gettime(7), min(500, getq2(SQuest_Easter)+100), 0; npctalk3 l("Strange Coins stock on shops was restored!"); getnameditem(.@Hat, strcharinfo(0)); mesn; mesq l("Here you go! Happy easter! Bhop bhop!"); close; L_Unlucky: getitem GoldenGift, 1; mesn; mes l("\"Oh... Sorry, @@.", strcharinfo(0)); mes l("But in accordance to an old %s, you were unlucky.", b(l("Community Decision"))); mes l("This means ##BAll items were lost##b, and you need to collect EVERYTHING, again, to get the hat."); mes l("But, hm hm hm! I have a %s for you! It won't have what you wanted, but maybe you're lucky, after all?", getitemlink(GoldenGift)); mes l("Better luck next time!\""); close; // Leaderboard functions, and initialization OnClock0100: OnClock1300: if ($EVENT$ == "Easter") .@nb = query_sql("SELECT c.name, i.amount FROM `inventory` AS i, `char` AS c WHERE i.nameid=834 AND i.char_id=c.char_id ORDER BY i.amount DESC LIMIT 10", $@easter_name$, $@easter_value); end; OnInit: .sex = G_OTHER; .distance = 5; if ($EVENT$ == "Easter") sEaster(); end; // Special shop functions function EEX_check { .@tier = getarg(0); // Minimum reward level .@clas = getarg(1); // EEX code .@preq = getarg(2, 0); // Pre-requisite purchase if (!.@clas || .@clas == .@preq) return false; // Fail-safe .@s = getq3(SQuest_Easter); .@lv = (TOP3AVERAGELVL() / 25) + $GAME_STORYLINE; if (.@preq) return (!(.@s & .@clas) && .@lv >= .@tier && (.@s & .@preq)); else return (!(.@s & .@clas) && .@lv >= .@tier); } function EEX_trade { .@clas = getarg(2); // Easter EXchange code (EEX) .@item = getarg(1); // Item ID .@pric = getarg(0); // Price in Golden Eggs if (!.@item || !.@clas) return; // Fail-safe if (countitem(GoldenEasteregg) < .@pric) { mesc l("You only have %d/%d %s, so the transaction was cancelled.", countitem(GoldenEasteregg), .@pric, getitemlink(GoldenEasteregg)), 1; close; // TERMINATE the script } inventoryplace .@item, 1; // may TERMINATE the script delitem GoldenEasteregg, .@pric; setq3 SQuest_Easter, getq3(SQuest_Easter) | .@clas; getitem .@item, 1; return; } L_Limited: mes l("You can only make each purchase only. Some purchases unlock other purchases."); mesc l("The limited shop will not be available once event ends."), 1; mesc l("Trade here will lower your ranking on Easter event. Be careful."), 1; mes l("Current golden eggs: %s", fnum(countitem(GoldenEasteregg))); menuint l("Nothing, thanks."), -1, rif(EEX_check(1, EEX_bronze), l("Bronze Gift (%d eggs)", 50)), EEX_bronze, rif(EEX_check(3, EEX_silver, EEX_bronze), l("Silver Gift (%d eggs)", 100)), EEX_silver, rif(EEX_check(5, EEX_golden, EEX_silver), l("Golden Gift (%d eggs)", 150)), EEX_golden, rif(EEX_check(7, EEX_prism, EEX_golden), l("Prism Gift (%d eggs)", 250)), EEX_prism, rif(EEX_check(9, EEX_supreme, EEX_prism), l("Supreme Gift (%d eggs)", 500)), EEX_supreme, rif(EEX_check(2, EEX_gapple), l("Golden Apple (%d eggs)", 35)), EEX_gapple, rif(EEX_check(4, EEX_napple, EEX_gapple), l("Manapple (%d eggs)", 75)), EEX_napple, rif(EEX_check(6, EEX_elixir, EEX_napple), l("Elixir of Life (%d eggs)", 150)), EEX_elixir, rif(EEX_check(8, EEX_dapple, EEX_elixir), l("Divine Apple (%d eggs)", 300)), EEX_dapple, rif(EEX_check(10, EEX_mapple, EEX_dapple), l("Magic Apple (%d eggs)", 300)), EEX_mapple, rif(EEX_check(0, EEX_merc1), l("★ Mercenary (%d eggs)", 20)), EEX_merc1, rif(EEX_check(3, EEX_merc2, EEX_merc1), l("★★ Mercenary (%d eggs)", 40)), EEX_merc2, rif(EEX_check(6, EEX_merc3, EEX_merc2), l("★★★ Mercenary (%d eggs)", 60)), EEX_merc3, rif(EEX_check(9, EEX_merc4, EEX_merc3), l("★★★★ Mercenary (%d eggs)", 80)), EEX_merc4, rif(EEX_check(11, EEX_merc5, EEX_merc4), l("★★★★★ Mercenary (%d eggs)", 100)), EEX_merc5, l("I have to go."), -1; mes ""; switch (@menuret) { case EEX_bronze: EEX_trade( 50, BronzeGift, EEX_bronze); break; case EEX_silver: EEX_trade( 100, SilverGift, EEX_silver); break; case EEX_golden: EEX_trade( 150, GoldenGift, EEX_golden); break; case EEX_prism: EEX_trade( 250, PrismGift, EEX_prism); break; case EEX_supreme: EEX_trade( 500, SupremeGift, EEX_supreme); break; case EEX_gapple: EEX_trade( 35, GoldenApple, EEX_gapple); break; case EEX_napple: EEX_trade( 75, Manapple, EEX_napple); break; case EEX_elixir: EEX_trade( 150, ElixirOfLife, EEX_elixir); break; case EEX_dapple: EEX_trade( 300, DivineApple, EEX_dapple); break; case EEX_mapple: EEX_trade( 300, MagicApple, EEX_mapple); break; case EEX_merc1: EEX_trade( 20, MercBoxAA, EEX_merc1); break; case EEX_merc2: EEX_trade( 40, MercBoxBB, EEX_merc2); break; case EEX_merc3: EEX_trade( 60, MercBoxCC, EEX_merc3); break; case EEX_merc4: EEX_trade( 80, MercBoxDD, EEX_merc4); break; case EEX_merc5: EEX_trade( 100, MercBoxEE, EEX_merc5); break; default: closeclientdialog; close; } mesc l("Enjoy your purchase!"), 3; next; goto L_Limited; } function script EasterCoinCheck { for (.@i=0;.@i < getarraysize(@bought_nameid); .@i++) { if (debug || $@GM_OVERRIDE) debugmes("%dx %s", @bought_quantity[.@i], getitemname(@bought_nameid[.@i])); if (@bought_nameid[.@i] == StrangeCoin) { .@q2=getq2(SQuest_Easter)-@bought_quantity[.@i]; if (.@q2 < 0) { dispbottom l("Attempted to buy %d/%d %s, operation cancelled.", @bought_quantity[.@i], getq2(SQuest_Easter), getitemlink(StrangeCoin)); if (TUTORIAL) dispbottom l("This quota is reset yearly, by completing %s's quest.", b("Lilica")); end; } setq2 SQuest_Easter, .@q2; } } return; } // Silver Easter Egg exchange. 001-4,139,151,0 trader #eastershop1 NPC_HIDDEN,{ end; OnInit: tradertype(NST_CUSTOM); sellitem ChocolateMouboo,100; sellitem StrangeCoin,50; sellitem GoldenEasteregg,25; sellitem EasterEgg,5; end; OnCountFunds: setcurrency(countitem(SilverEasteregg)); end; OnPayFunds: if( countitem(SilverEasteregg) < @price ) end; // Strange Coins are different EasterCoinCheck(); // Complete purchase delitem SilverEasteregg, @price; purchaseok(); end; } // Golden Easter Egg exchange. 001-4,139,151,0 trader #eastershop2 NPC_HIDDEN,{ end; OnInit: tradertype(NST_CUSTOM); setarray .@Seasonal, EggshellHat, EggshellHat, GreenEggshellHat, OrangeEggshellHat, BlueEggshellHat, EggshellHat; .Hat=.@Seasonal[(gettime(7)+1)%6]; // Magically choose the hat from the array .PrevHat=.@Seasonal[(gettime(7)-1)%6]; // Magically choose the hat from the array // Seasonal item sellitem .Hat,200; sellitem .PrevHat,500; // Determine the current game shift // Range: 0 ~ 12 (Roughly) .@lv = (TOP3AVERAGELVL() / 25) + $GAME_STORYLINE; .@ol = max(1, 12-.@lv); // The opposite from the above function // Rare and not-so-rare Items if (.@lv >= 4) sellitem MercBoxE,125*.@ol; if (.@lv >= 3) sellitem MercBoxD,80*.@ol; if (.@lv >= 2) sellitem MercBoxC,40*.@ol; if (.@lv >= 1) sellitem Boots,37*.@ol; // These are better limited to a max amount of purchases sellitem BronzeGift,100; sellitem BunnyEars,50; sellitem StrangeCoin,10; sellitem SilverEasteregg,1; end; OnCountFunds: setcurrency(countitem(GoldenEasteregg)); end; OnPayFunds: if( countitem(GoldenEasteregg) < @price ) end; // Strange Coins are different EasterCoinCheck(); // Complete purchase delitem GoldenEasteregg, @price; purchaseok(); end; }