summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db/constants.conf11
-rw-r--r--npc/003-1/lieutenantdausen.txt16
-rw-r--r--npc/005-1/ayasha.txt4
-rw-r--r--npc/009-1/guards.txt8
-rw-r--r--npc/012-1/guards.txt16
-rw-r--r--npc/functions/weather.txt169
-rw-r--r--npc/scripts.conf1
7 files changed, 203 insertions, 22 deletions
diff --git a/db/constants.conf b/db/constants.conf
index 2eb6e969d..6839210cd 100644
--- a/db/constants.conf
+++ b/db/constants.conf
@@ -3847,6 +3847,17 @@ constants_db: {
SUMMER: 2
AUTUMN: 3
+ comment__: "map masks"
+ MASK_NONE: 1
+ MASK_MATTACK: 2
+ MASK_EVILSANCTUM: 4
+ MASK_NIGHT: 8
+ MASK_RAIN: 16
+ MASK_SANDSTORM: 32
+ MASK_SNOW: 64
+ MASK_RESERVED1: 128
+ MASK_RESERVED2: 256
+
comment__: "speechflags"
S_FIRST_BLANK_LINE: 1
S_LAST_BLANK_LINE: 2
diff --git a/npc/003-1/lieutenantdausen.txt b/npc/003-1/lieutenantdausen.txt
index 5fb801f10..3246d12fd 100644
--- a/npc/003-1/lieutenantdausen.txt
+++ b/npc/003-1/lieutenantdausen.txt
@@ -120,8 +120,8 @@ L_MKControl:
close;
L_MKSmall:
- addmapmask "003-1", 2;
- addmapmask "004-1", 2;
+ addmapmask "003-1", MASK_MATTACK;
+ addmapmask "004-1", MASK_MATTACK;
changemusic "003-1", "mythica.ogg";
disablenpc("Mana Stone");
$@SIEGE_TULIM=0; // factor zero
@@ -133,8 +133,8 @@ L_MKSmall:
close;
L_MKMedium:
- addmapmask "003-1", 2;
- addmapmask "004-1", 2;
+ addmapmask "003-1", MASK_MATTACK;
+ addmapmask "004-1", MASK_MATTACK;
changemusic "003-1", "eric_matyas_ghouls.ogg";
disablenpc("Mana Stone");
$@SIEGE_TULIM=1; // factor one
@@ -146,8 +146,8 @@ L_MKMedium:
close;
L_MKHuge:
- addmapmask "003-1", 2;
- addmapmask "004-1", 2;
+ addmapmask "003-1", MASK_MATTACK;
+ addmapmask "004-1", MASK_MATTACK;
changemusic "003-1", "misuse.ogg";
disablenpc("Mana Stone");
$@SIEGE_TULIM=5; // factor five
@@ -302,8 +302,8 @@ OnTimer600000:
end;
OnTimer630000:
- removemapmask "003-1", 2;
- removemapmask "004-1", 2;
+ removemapmask "003-1", MASK_MATTACK;
+ removemapmask "004-1", MASK_MATTACK;
changemusic "003-1", "bartk_adventure.ogg"; // Restore to default
enablenpc("Mana Stone");
$@SIEGE_TULIM$=0;
diff --git a/npc/005-1/ayasha.txt b/npc/005-1/ayasha.txt
index 5697de032..100d533ef 100644
--- a/npc/005-1/ayasha.txt
+++ b/npc/005-1/ayasha.txt
@@ -131,7 +131,7 @@ L_MKControl:
close;
L_MKSmall:
- addmapmask "005-1", 2;
+ addmapmask "005-1", MASK_MATTACK;
changemusic "005-1", "mythica.ogg";
disablenpc("Mana Stone");
pvpon("005-1");
@@ -223,7 +223,7 @@ OnTimer600000:
end;
OnTimer630000:
- removemapmask "005-1", 2;
+ removemapmask "005-1", MASK_MATTACK;
changemusic "005-1", "bartk_adventure.ogg";
enablenpc("Mana Stone");
killmonsterall("005-1", 0);
diff --git a/npc/009-1/guards.txt b/npc/009-1/guards.txt
index 9598d4d58..52092d2d7 100644
--- a/npc/009-1/guards.txt
+++ b/npc/009-1/guards.txt
@@ -30,7 +30,7 @@ L_MKControl:
close;
L_MKSmall:
- addmapmask "009-1", 2;
+ addmapmask "009-1", MASK_MATTACK;
changemusic "009-1", "mythica.ogg";
disablenpc("Mana Stone");
$@SIEGE_HALI=0; // factor zero
@@ -42,7 +42,7 @@ L_MKSmall:
close;
L_MKMedium:
- addmapmask "009-1", 2;
+ addmapmask "009-1", MASK_MATTACK;
changemusic "009-1", "eric matyas - ghoulish fun.ogg";
disablenpc("Mana Stone");
$@SIEGE_HALI=1; // factor one
@@ -54,7 +54,7 @@ L_MKMedium:
close;
L_MKHuge:
- addmapmask "009-1", 2;
+ addmapmask "009-1", MASK_MATTACK;
changemusic "009-1", "misuse.ogg";
disablenpc("Mana Stone");
$@SIEGE_HALI=5; // factor five
@@ -178,7 +178,7 @@ OnTimer600000:
end;
OnTimer630000:
- removemapmask "009-1", 2;
+ removemapmask "009-1", MASK_MATTACK;
changemusic "009-1", "dragon_and_toast.ogg"; // Restore to default
enablenpc("Mana Stone");
$@SIEGE_HALI$=0;
diff --git a/npc/012-1/guards.txt b/npc/012-1/guards.txt
index 556e82150..97e3f531e 100644
--- a/npc/012-1/guards.txt
+++ b/npc/012-1/guards.txt
@@ -32,8 +32,8 @@ L_Admus:
enablenpc "Hurnsguard";
donpcevent "Hurnsguard::OnSet";
donpcevent "Lieutenant Paul::OnSet";
- addmapmask "012-1", 2;
- addmapmask "012-1", 8;
+ addmapmask "012-1", MASK_MATTACK;
+ addmapmask "012-1", MASK_EVILSANCTUM;
pvpon("012-1");
disablenpc "#012-1_22_62";
disablenpc "#012-1_79_17";
@@ -73,7 +73,7 @@ L_MKControl:
close;
L_MKSmall:
- addmapmask "012-1", 2;
+ addmapmask "012-1", MASK_MATTACK;
changemusic "012-1", "mythica.ogg";
disablenpc("Mana Stone");
$@SIEGE_HURNS=0; // factor zero
@@ -85,7 +85,7 @@ L_MKSmall:
close;
L_MKMedium:
- addmapmask "012-1", 2;
+ addmapmask "012-1", MASK_MATTACK;
changemusic "012-1", "eric_matyas_ghouls.ogg";
disablenpc("Mana Stone");
$@SIEGE_HURNS=1; // factor one
@@ -97,7 +97,7 @@ L_MKMedium:
close;
L_MKHuge:
- addmapmask "012-1", 2;
+ addmapmask "012-1", MASK_MATTACK;
changemusic "012-1", "misuse.ogg";
disablenpc("Mana Stone");
$@SIEGE_HURNS=5; // factor five
@@ -221,7 +221,7 @@ OnTimer600000:
end;
OnTimer630000:
- removemapmask "012-1", 2;
+ removemapmask "012-1", MASK_MATTACK;
changemusic "012-1", "dragon_and_toast.ogg"; // Restore to default
enablenpc("Mana Stone");
$@SIEGE_HURNS$=0;
@@ -455,8 +455,8 @@ OnVictory:
removemapflag("012-1", mf_nosave);
disablenpc "Hurnsguard";
pvpoff("012-1");
- removemapmask "012-1", 2;
- removemapmask "012-1", 8;
+ removemapmask "012-1", MASK_MATTACK;
+ removemapmask "012-1", MASK_EVILSANCTUM;
//removemapflag("012-1", mf_nocommand);
removemapflag("012-1", mf_battleground);
enablenpc "#012-1_22_62";
diff --git a/npc/functions/weather.txt b/npc/functions/weather.txt
new file mode 100644
index 000000000..cc7285721
--- /dev/null
+++ b/npc/functions/weather.txt
@@ -0,0 +1,169 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Controls world seasons. RESPECT MASK_* VARS ON CONSTANTS DB
+
+000-0,0,0,0 script #WeatherCore NPC_HIDDEN,{
+ end;
+
+/*
+ * removemapflag("<map name>", <flag>)
+ * setmapflag("<map name>", <flag>{, <val>})
+ * getmapflag("<map name>", <flag>)
+
+ mf_snow: 16
+
+ mf_jexp: 39
+ mf_bexp: 40
+
+ setmapflag(.@key$, mf_nightenabled);
+ removemapflag(.@key$, mf_nightenabled);
+
+*/
+
+OnInit:
+ // Bind commands
+ bindatcmd "wsnow", "#WeatherCore::OnSnow", 80, 80, 1;
+ bindatcmd "wrain", "#WeatherCore::OnRain", 80, 80, 1;
+ bindatcmd "wsand", "#WeatherCore::OnSand", 80, 80, 1;
+ bindatcmd "wevil", "#WeatherCore::OnEvil", 80, 80, 1;
+ bindatcmd "wnight", "#WeatherCore::OnNight", 80, 80, 1;
+ bindatcmd "wclear", "#WeatherCore::OnClear", 80, 80, 1;
+
+
+ // Determine which maps are subject to weather, and how weather works:
+ // eg. it will never snow on a desert, or a sandstorm on icelands.
+ .wcore = htnew;
+
+ // Deserts
+ htput(.wcore, "003-1", "desert");
+ htput(.wcore, "004-1", "desert");
+ htput(.wcore, "004-2", "desert");
+ htput(.wcore, "009-1", "desert");
+ htput(.wcore, "010-1", "desert");
+ htput(.wcore, "010-2", "desert");
+
+ // Woodlands
+ htput(.wcore, "005-1", "woodland");
+ htput(.wcore, "012-1", "woodland");
+ htput(.wcore, "014-1", "woodland");
+ htput(.wcore, "014-2", "woodland");
+ htput(.wcore, "014-3", "woodland");
+
+ // Icelands
+ htput(.wcore, "001-7", "iceland");
+
+ // No "end" here, so server starts with weather
+OnMinute00:
+OnMinute15:
+OnMinute30:
+OnMinute45:
+
+ debugmes "[Weather.sys] Total Maps = " + htsize(.wcore);
+ .@hti = htiterator(.wcore);
+ for(.@key$ = htinextkey(.@hti); hticheck(.@hti); .@key$ = htinextkey(.@hti)) {
+
+ // PvP Maps are immune to weather changes (eg. during sieges)
+ // I could use getmapmask, but this is simpler.
+ if (getmapflag(.@key$, mf_pvp))
+ continue;
+
+ // Local variables: .@key$ .@type .@r
+ .@type$=htget(.wcore, .@key$);
+ .@r=rand(0,10000);
+
+ // Remove all current masks, and add rain/snow/sand
+ if (.@type$ == "desert") {
+ if (.@r < 10)
+ setmapmask .@key$, MASK_RAIN;
+ else if (.@r < 100)
+ setmapmask .@key$, MASK_SANDSTORM;
+ else
+ setmapmask .@key$, MASK_NONE;
+
+ } else if (.@type$ == "woodland") {
+ if (.@r < 100)
+ setmapmask .@key$, MASK_RAIN;
+ else if (.@r < 120)
+ setmapmask .@key$, MASK_SANDSTORM;
+ else if (.@r < 140)
+ setmapmask .@key$, MASK_SNOW;
+ else
+ setmapmask .@key$, MASK_NONE;
+
+ } else if (.@type$ == "iceland") {
+ if (.@r < 10)
+ setmapmask .@key$, MASK_RAIN;
+ else if (.@r < 100)
+ setmapmask .@key$, MASK_SNOW;
+ else
+ setmapmask .@key$, MASK_NONE;
+
+ } else {
+ debugmes "Warning warning, blame Saulc! Weather system error on map "+.@key$;
+ announce("ERROR BLAME SAULC! WEATHER SYSTEM CORRUPTED. KILLING MAP SERVERS.", bc_all);
+ atcommand "@mapexit";
+ }
+
+ // Is it night time?
+ // For convenience, night time is from 00:15 to 00:45, every hour.
+ // 2 = GETTIME_MINUTE
+ if (gettime(2) >= 15 && gettime(2) < 45) {
+ setmapflag(.@key$, mf_nightenabled);
+ addmapmask .@key$, MASK_NIGHT;
+ } else if (getmapmask(.@key$) & MASK_NIGHT) {
+ removemapflag(.@key$, mf_nightenabled);
+ removemapmask .@key$, MASK_NIGHT;
+ }
+
+ }
+ htidelete(.@hti);
+ debugmes "[Weather.sys] Weather reloaded";
+ end;
+
+ // Function to check stuff
+ // WeatherSwitch ( MASK )
+ function WeatherSwitch {
+ // Get map
+ getmapxy(.@key$,.@a,.@b,0);
+
+ // Sanitize
+ .@m$ = htget(.wcore, .@key$, "Not found");
+
+ // Change Weather or abort
+ if (.@m$ == "Not found")
+ dispbottom l("Command not permitted on this map! Check npc/functions/weather.conf");
+ else
+ addmapmask(.@key$, MASK_RAIN);
+ return;
+ }
+
+// Some commands, for GMs manually override weather
+OnRain:
+ WeatherSwitch(MASK_RAIN);
+ end;
+
+OnSand:
+ WeatherSwitch(MASK_SANDSTORM);
+ end;
+
+OnSnow:
+ WeatherSwitch(MASK_SNOW);
+ end;
+
+OnNight:
+ WeatherSwitch(MASK_NIGHT);
+ end;
+
+OnEvil:
+ WeatherSwitch(MASK_EVILSANCTUM);
+ end;
+
+// Clear works on any map
+OnClear:
+ getmapxy(.@key$,.@a,.@b,0);
+ setmapmask(.@key$, MASK_NONE);
+ end;
+
+}
diff --git a/npc/scripts.conf b/npc/scripts.conf
index e3190f0ed..7b9bfd237 100644
--- a/npc/scripts.conf
+++ b/npc/scripts.conf
@@ -15,6 +15,7 @@
"npc/functions/string.txt",
"npc/functions/time.txt",
"npc/functions/timer.txt",
+"npc/functions/weather.txt",
// These functions need to be loaded before everything else
"npc/functions/goodbye.txt",