summaryrefslogtreecommitdiff
path: root/npc/functions
diff options
context:
space:
mode:
Diffstat (limited to 'npc/functions')
-rw-r--r--npc/functions/event.txt253
1 files changed, 253 insertions, 0 deletions
diff --git a/npc/functions/event.txt b/npc/functions/event.txt
new file mode 100644
index 000000000..2ed0a60c8
--- /dev/null
+++ b/npc/functions/event.txt
@@ -0,0 +1,253 @@
+// 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:
+OnClock1800:
+ .@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;
+}
+
+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;
+
+ .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) {
+ channelmes("#world", "Valentine Day will start tomorrow!");
+ announce l("Valentine Day will start tomorrow!"), bc_all|bc_npc;
+ }
+ // Last Day: Send out an announcement
+ if (.@d == .valentine_endday - 1) {
+ channelmes("#world", "It's the last day for Valentine Event! Hurry up!");
+ announce l("t's the last day for Valentine Event! Hurry up!"), bc_all|bc_npc;
+ }
+ // Begin the event
+ if (.@d == .valentine_stday) {
+ channelmes("#world", "Valentine Day begun!");
+ announce l("Valentine Day begun!"), bc_all|bc_npc;
+ $EVENT$="Valentine";
+ $@VALENTINE_LOVELETTER = htnew();
+ $@VALENTINE_GIFTSTACKS = htnew();
+ }
+ // End the event the day after
+ if (.@d == .valentine_endday+1) {
+ channelmes("#world", "Valentine Day ended!");
+ announce l("Valentine Day ended!"), bc_all|bc_npc;
+ 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) {
+ channelmes("#world", "St. Patrick Day will start tomorrow!");
+ announce l("St. Patrick Day will start tomorrow!"), bc_all|bc_npc;
+ }
+ // Last Day: Send out an announcement
+ if (.@d == .patrick_endday - 1) {
+ channelmes("#world", "It's the last day for St. Patrick Event! Hurry up!");
+ announce l("t's the last day for St. Patrick Event! Hurry up!"), bc_all|bc_npc;
+ }
+ // Begin the event
+ if (.@d == .patrick_stday) {
+ channelmes("#world", "St. Patrick Day begun!");
+ announce l("St. Patrick Day begun!"), bc_all|bc_npc;
+ $EVENT$="St. Patrick";
+ $@PATRICK_DAYMAX=.patrick_endday;
+ enablenpc "sPatrick";
+ }
+ // End the event the day after
+ if (.@d == .patrick_endday+1) {
+ channelmes("#world", "St. Patrick Day ended!");
+ announce l("St. Patrick Day ended!"), bc_all|bc_npc;
+ sClear();
+ $EVENT$="";
+ donpcevent "sPatrick::OnCleanUp";
+ }
+ }
+
+ // Handle Easter
+ if (.@m >=.easter_stmon && .@m <= .easter_endmon) {
+ // It's tomorrow: Send out an announcement
+ if (.@d == .easter_stday - 1) {
+ channelmes("#world", "Easter will start tomorrow!");
+ announce l("Easter will start tomorrow!"), bc_all|bc_npc;
+ }
+ // Last Day: Send out an announcement
+ if (.@d == .easter_endday - 1) {
+ channelmes("#world", "It's the last day for Easter Event! Hurry up!");
+ announce l("t's the last day for Easter Event! Hurry up!"), bc_all|bc_npc;
+ }
+ // Begin the event
+ if (.@d == .easter_stday) {
+ channelmes("#world", "Easter begun!");
+ announce l("Easter begun!"), bc_all|bc_npc;
+ $EVENT$="Easter";
+ }
+ // End the event the day after
+ if (.@d == .easter_endday+1) {
+ channelmes("#world", "Easter ended!");
+ announce l("Easter ended!"), bc_all|bc_npc;
+ sClear();
+ $EVENT$="";
+ }
+ }
+
+ // Handle Worker Day
+ if (.@m >=.worker_stmon && .@m <= .worker_endmon) {
+ // It's tomorrow: Send out an announcement
+ if (.@d == .worker_stday - 1) {
+ channelmes("#world", "Worker Day will start tomorrow!");
+ announce l("Worker Day will start tomorrow!"), bc_all|bc_npc;
+ }
+ // Last Day: Send out an announcement
+ if (.@d == .worker_endday - 1) {
+ channelmes("#world", "It's the last day for Worker Day Event! Hurry up!");
+ announce l("t's the last day for Worker Day Event! Hurry up!"), bc_all|bc_npc;
+ }
+ // Begin the event
+ if (.@d == .worker_stday) {
+ channelmes("#world", "Worker Day begun!");
+ announce l("Worker Day begun!"), bc_all|bc_npc;
+ $EVENT$="Worker Day";
+ }
+ // End the event the day after
+ if (.@d == .worker_endday+1) {
+ channelmes("#world", "Worker Day ended!");
+ announce l("Worker Day ended!"), bc_all|bc_npc;
+ sClear();
+ $EVENT$="";
+ }
+ }
+
+
+ // Handle Christmas
+ if (.@m >=.xmas_stmon && .@m <= .xmas_endmon) {
+ // It's tomorrow: Send out an announcement
+ if (.@d == .xmas_stday - 1) {
+ channelmes("#world", "Christmas will start tomorrow!");
+ announce l("Christmas will start tomorrow!"), bc_all|bc_npc;
+ }
+ // Last Day: Send out an announcement
+ if (.@d == .xmas_endday - 1) {
+ channelmes("#world", "It's the last day for Christmas Event! Hurry up!");
+ announce l("t's the last day for Christmas Event! Hurry up!"), bc_all|bc_npc;
+ }
+ // Begin the event
+ if (.@d == .xmas_stday) {
+ channelmes("#world", "Christmas begun!");
+ announce l("Christmas begun!"), bc_all|bc_npc;
+ $EVENT$="Christmas";
+ query_sql("DELETE FROM `quest` WHERE `quest_id` = '"+SQuest_Christmas+"'");
+ sChristmas();
+ }
+ // End the event the day after
+ if (.@d == .xmas_endday+1) {
+ channelmes("#world", "Christmas ended!");
+ announce l("Christmas ended!"), bc_all|bc_npc;
+ sClear();
+ $EVENT$="";
+ }
+ }
+ end;
+}
+