// TMW2 scripts. // Authors: // Jesusalva // Description: // Controls world events so Saulc and I can take vacations. // The event specifics are more often scattered accross seasons.txt, command/event.txt // 003-1/events.txt, soulmenhir.txt and, of course, the event maps (if any). // Schedule, if needed to change, can be found in the OnInit loop. // An event, obviously, cannot last more than 7... 15 days at WORST. // Therefore, month checks aren't included in day checks. - script sPatrick NPC_HIDDEN,{ OnInit: setarray .maps$, "005-1", "013-1", "014-1", "014-2", "014-3", "014-4", "014-5", "017-1", "018-2", "018-4", "018-5", "soren"; end; OnMyMobDeath: end; OnClock0000: OnClock6000: OnClock1200: OnClock1500: OnClock1800: OnClock2100: .@d=gettime(GETTIME_DAYOFMONTH); // Patrick Day should work only in 2 luck days according to Saulc // If this is required use $PATRICK_DAYCTRL so the days before $@PATRICK_DAYMAX // act with 100% chances (determinism). // As it is being spawn 4 times at a day (like TMW-BR events), because it is // flatly and outright IMPOSSIBLE to add a permanent spawn, that is not required. if ($EVENT$ == "St. Patrick" && .@d <= $@PATRICK_DAYMAX) { for (.@i=0; .@i < getarraysize(.maps$); .@i++) { .@m$=.maps$[.@i]; .@x=getmapinfo(MAPINFO_SIZE_X, .@m$)-20; .@y=getmapinfo(MAPINFO_SIZE_Y, .@m$)-20; // Remove previously spawned clovers killmonster(.@m$, "sPatrick::OnMyMobDeath"); // It is one clover for each 225 tiles (about a 25x25 square) .@maparea=(.@x-20)*(.@y-20); .@mobs=max(1, .@maparea/225); areamonster .@m$, 20, 20, .@x, .@y, strmobinfo(1, StPatricksClover), StPatricksClover, .@mobs, "sPatrick::OnMyMobDeath"; } } end; // Remove previously spawned clovers for event end // And then disables the NPC OnCleanUp: for (.@i=0; .@i < getarraysize(.maps$); .@i++) { .@m$=.maps$[.@i]; killmonster(.@m$, "sPatrick::OnMyMobDeath"); } disablenpc "sPatrick"; end; } function script sThanksgiving { // Variables: // #THANKS_DAY // #THANKS_STREAK // @thanks_card // Already spinned if (#THANKS_DAY == gettime(5) || $EVENT$ != "Thanksgiving") return; // Not spinned yet showavatar 1102; mes l(".:: Thanksgiving ::."); mesc l("Spin daily the card to get prizes!"); select l("SPIN!"), l("Later"); mes ""; if (@menu == 2) { setskin ""; closeclientdialog; return; } // Spin it // Your prize is saved in .@luck. Rigged against fruits .@luck=rand2(0,11); .@luck=(.@luck == 10 ? rand2(0,11) : .@luck); // A fruit before 7 days: rig to Arcmage or to blueprint if (.@luck == 10 && #THANKS_STREAK < 7) .@luck+=any(-1,1); // Extra spins .@extra=rand2(1,3); .@spins=.@extra*11+.@luck; //.@extra=0; // Show the spins for (.@i=0;.@i<=.@spins;.@i++) { .@cur=(.@i%11); showavatar 1103+.@cur; sleep2(60); } mes l(".:: Congratulations ::."); //#THANKS_DAY = gettime(5) mes l("You got a %d", .@luck); mesf "Spins: %d/%d (cur %d extra %d)", .@i, .@spins, .@cur, .@extra; next; // Close setskin ""; closeclientdialog; return; } 000-0,0,0,0 script #EventCore NPC_HIDDEN,{ end; // Event Schedule (all dates are inclusive) OnInit: .valentine_stday=12; .valentine_stmon=FEBRUARY; .valentine_endday=15; .valentine_endmon=FEBRUARY; .patrick_stday=15; .patrick_stmon=MARCH; .patrick_endday=19; .patrick_endmon=MARCH; .easter_stday=17; .easter_stmon=APRIL; .easter_endday=24; .easter_endmon=APRIL; .worker_stday=27; .worker_stmon=APRIL; .worker_endday=3; .worker_endmon=MAY; .thanks_stday=1; .thanks_stmon=NOVEMBER; .thanks_endday=30; .thanks_endmon=NOVEMBER; .xmas_stday=19; .xmas_stmon=DECEMBER; .xmas_endday=2; .xmas_endmon=JANUARY; // Some setup disablenpc "sPatrick"; // Check for events every midnight OnClock0000: .@d=gettime(GETTIME_DAYOFMONTH); .@m=gettime(GETTIME_MONTH); // Handle Valentine Day if (.@m >=.valentine_stmon && .@m <= .valentine_endmon) { // It's tomorrow: Send out an announcement if (.@d == .valentine_stday - 1) { kamibroadcast("Valentine Day will start tomorrow!"); } // Last Day: Send out an announcement if (.@d == .valentine_endday) { kamibroadcast("It's the last day for Valentine Event! Hurry up!"); } // Begin the event if (.@d == .valentine_stday) { kamibroadcast("Valentine Day begun!"); $EVENT$="Valentine"; $@VALENTINE_LOVELETTER = htnew(); $@VALENTINE_GIFTSTACKS = htnew(); } // End the event the day after if (.@d == .valentine_endday+1) { kamibroadcast("Valentine Day ended!"); sClear(); $EVENT$=""; } } // Handle St. Patrick Day // During this day, a special four leaf clover is spawned daily, at 4 times in the day // in all forests: 6:00, 12:00, 18:00 and 00:00. // $PATRICK_DAYMAX if (.@m >=.patrick_stmon && .@m <= .patrick_endmon) { // It's tomorrow: Send out an announcement if (.@d == .patrick_stday - 1) { kamibroadcast("St. Patrick Day will start tomorrow!"); } // Last Day: Send out an announcement if (.@d == .patrick_endday) { kamibroadcast("It's the last day for St. Patrick Event! Hurry up!"); } // Begin the event if (.@d == .patrick_stday) { kamibroadcast("St. Patrick Day begun!"); $EVENT$="St. Patrick"; $@PATRICK_DAYMAX=.patrick_endday; enablenpc "sPatrick"; enablenpc "Patrick Saulc"; enablenpc "St. Patrick Gold Pot"; donpcevent "St. Patrick Gold Pot::OnForcedMove"; } // End the event the day after if (.@d == .patrick_endday+1) { kamibroadcast("St. Patrick Day ended!"); sClear(); $EVENT$=""; donpcevent "sPatrick::OnCleanUp"; disablenpc "Patrick Saulc"; } } // Handle Easter if (.@m >=.easter_stmon && .@m <= .easter_endmon) { // It's tomorrow: Send out an announcement if (.@d == .easter_stday - 1 && .@m == .easter_stmon) { kamibroadcast("Easter will start tomorrow!"); } // Last Day: Send out an announcement if (.@d == .easter_endday && .@m == .easter_endmon) { kamibroadcast("It's the last day for Easter Event! Hurry up!"); } // Begin the event if (.@d == .easter_stday && .@m == .easter_stmon) { kamibroadcast("Easter begun!"); $EVENT$="Easter"; } // End the event the day after if (.@d == .easter_endday+1 && .@m == .easter_endmon) { kamibroadcast("Easter ended!"); sClear(); $EVENT$=""; } } // Handle Worker Day if (.@m >=.worker_stmon && .@m <= .worker_endmon) { // It's tomorrow: Send out an announcement if (.@d == .worker_stday - 1 && .@m == .worker_stmon) { kamibroadcast("Worker Day will start tomorrow!"); } // Last Day: Send out an announcement if (.@d == .worker_endday && .@m == .worker_endmon) { kamibroadcast("It's the last day for Worker Day Event! Hurry up!"); } // Begin the event if (.@d == .worker_stday && .@m == .worker_stmon) { kamibroadcast("Worker Day begun!"); $EVENT$="Worker Day"; } // End the event the day after if (.@d == .worker_endday+1 && .@m == .worker_endmon) { kamibroadcast("Worker Day ended!"); sClear(); $EVENT$=""; } } // Handle Thanksgiving Day if (.@m >=.thanks_stmon && .@m <= .thanks_endmon) { // It's tomorrow: Send out an announcement if (.@d == .thanks_stday - 1 && .@m == .thanks_stmon) { kamibroadcast("Thanksgiving will start tomorrow!"); } // Last Day: Send out an announcement if (.@d == .thanks_endday && .@m == .thanks_endmon) { kamibroadcast("It's the last day for Thanksgiving Event! Hurry up!"); } // Begin the event if (.@d == .thanks_stday && .@m == .thanks_stmon) { kamibroadcast("Thanksgiving begun!"); $EVENT$="Thanksgiving"; } // End the event the day after if (.@d == .thanks_endday+1 && .@m == .thanks_endmon) { kamibroadcast("Thanksgiving ended!"); sClear(); $EVENT$=""; } } // Handle Christmas if (.@m >=.xmas_stmon && .@m <= .xmas_endmon) { // It's tomorrow: Send out an announcement if (.@d == .xmas_stday - 1 && .@m == .xmas_stmon) { kamibroadcast("Christmas will start tomorrow!"); } // Last Day: Send out an announcement if (.@d == .xmas_endday && .@m == .xmas_endmon) { kamibroadcast("It's the last day for Christmas Event! Hurry up!"); } // Begin the event if (.@d == .xmas_stday && .@m == .xmas_stmon) { kamibroadcast("Christmas begun!"); $EVENT$="Christmas"; query_sql("DELETE FROM `quest` WHERE `quest_id` = '"+SQuest_Christmas+"'"); sChristmas(); } // End the event the day after if (.@d == .xmas_endday+1 && .@m == .xmas_endmon) { kamibroadcast("Christmas ended!"); sClear(); $EVENT$=""; } } end; }