// 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;
}
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 ("Valentine Day will start tomorrow!"), bc_all|bc_npc;
}
// Last Day: Send out an announcement
if (.@d == .valentine_endday) {
channelmes("#world", "It's the last day for Valentine Event! Hurry up!");
announce ("It'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 ("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 ("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 ("St. Patrick Day will start tomorrow!"), bc_all|bc_npc;
}
// Last Day: Send out an announcement
if (.@d == .patrick_endday) {
channelmes("#world", "It's the last day for St. Patrick Event! Hurry up!");
announce ("It'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 ("St. Patrick Day begun!"), bc_all|bc_npc;
$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) {
channelmes("#world", "St. Patrick Day ended!");
announce ("St. Patrick Day ended!"), bc_all|bc_npc;
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) {
channelmes("#world", "Easter will start tomorrow!");
announce ("Easter will start tomorrow!"), bc_all|bc_npc;
}
// Last Day: Send out an announcement
if (.@d == .easter_endday && .@m == .easter_endmon) {
channelmes("#world", "It's the last day for Easter Event! Hurry up!");
announce ("It's the last day for Easter Event! Hurry up!"), bc_all|bc_npc;
}
// Begin the event
if (.@d == .easter_stday && .@m == .easter_stmon) {
channelmes("#world", "Easter begun!");
announce ("Easter begun!"), bc_all|bc_npc;
$EVENT$="Easter";
}
// End the event the day after
if (.@d == .easter_endday+1 && .@m == .easter_endmon) {
channelmes("#world", "Easter ended!");
announce ("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 && .@m == .worker_stmon) {
channelmes("#world", "Worker Day will start tomorrow!");
announce ("Worker Day will start tomorrow!"), bc_all|bc_npc;
}
// Last Day: Send out an announcement
if (.@d == .worker_endday && .@m == .worker_endmon) {
channelmes("#world", "It's the last day for Worker Day Event! Hurry up!");
announce ("It's the last day for Worker Day Event! Hurry up!"), bc_all|bc_npc;
}
// Begin the event
if (.@d == .worker_stday && .@m == .worker_stmon) {
channelmes("#world", "Worker Day begun!");
announce ("Worker Day begun!"), bc_all|bc_npc;
$EVENT$="Worker Day";
}
// End the event the day after
if (.@d == .worker_endday+1 && .@m == .worker_endmon) {
channelmes("#world", "Worker Day ended!");
announce ("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 && .@m == .xmas_stmon) {
channelmes("#world", "Christmas will start tomorrow!");
announce ("Christmas will start tomorrow!"), bc_all|bc_npc;
}
// Last Day: Send out an announcement
if (.@d == .xmas_endday && .@m == .xmas_endmon) {
channelmes("#world", "It's the last day for Christmas Event! Hurry up!");
announce ("It's the last day for Christmas Event! Hurry up!"), bc_all|bc_npc;
}
// Begin the event
if (.@d == .xmas_stday && .@m == .xmas_stmon) {
channelmes("#world", "Christmas begun!");
announce ("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 && .@m == .xmas_endmon) {
channelmes("#world", "Christmas ended!");
announce ("Christmas ended!"), bc_all|bc_npc;
sClear();
$EVENT$="";
}
}
end;
}