summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/map/battle/pet.conf5
-rw-r--r--conf/messages.conf6
-rw-r--r--db/constants.conf1
-rw-r--r--npc/mapflag/nopet.txt78
-rw-r--r--npc/scripts_mapflags.conf1
-rw-r--r--src/map/atcommand.c2
-rw-r--r--src/map/battle.c1
-rw-r--r--src/map/battle.h1
-rw-r--r--src/map/clif.c8
-rw-r--r--src/map/map.c13
-rw-r--r--src/map/map.h1
-rw-r--r--src/map/npc.c2
-rw-r--r--src/map/script.c3
-rw-r--r--src/map/script.h3
14 files changed, 111 insertions, 14 deletions
diff --git a/conf/map/battle/pet.conf b/conf/map/battle/pet.conf
index 3060b6e64..6d013b0ef 100644
--- a/conf/map/battle/pet.conf
+++ b/conf/map/battle/pet.conf
@@ -95,11 +95,6 @@ pet_max_stats: 99
pet_max_atk1: 500
pet_max_atk2: 1000
-// Are pets disabled during Guild Wars?
-// If set to true, pets are automatically returned to egg when entering castles during WoE times
-// and hatching is forbidden within as well.
-pet_disable_in_gvg: false
-
// Should the pet immediately be removed when its intimacy drops to 0? (Note 1)
// If set to false the pet will randomly walk around the map before being removed.
pet_remove_immediately: true
diff --git a/conf/messages.conf b/conf/messages.conf
index 98b0e0a9d..d8338968e 100644
--- a/conf/messages.conf
+++ b/conf/messages.conf
@@ -646,8 +646,10 @@
668: Shadow Chaser T
669: Summoner
-//670-853 FREE (please start using from the top if you need, leave the 670+ range for new jobs)
+//670-852 FREE (please start using from the top if you need, leave the 670+ range for new jobs)
+
+853: NoPet |
// Mapflag to disable Autoloot Commands
854: Auto loot item are disabled on this map.
@@ -667,7 +669,7 @@
863: Duel: Can't use this item in duel.
864: You cannot use this command when dead.
865: Can't create chat rooms in this area.
-866: Pets are not allowed in Guild Wars.
+866: Pets are disabled in this map.
867: You're not dead.
868: Your current memo positions are:
869: You broke the target's weapon.
diff --git a/db/constants.conf b/db/constants.conf
index 70f5569b4..700207c80 100644
--- a/db/constants.conf
+++ b/db/constants.conf
@@ -438,6 +438,7 @@ constants_db: {
mf_pairship_endable: 58
mf_nostorage: 59
mf_nogstorage: 60
+ mf_nopet: 61
comment__: "Cell Properties"
cell_walkable: 0
diff --git a/npc/mapflag/nopet.txt b/npc/mapflag/nopet.txt
new file mode 100644
index 000000000..82f9e36eb
--- /dev/null
+++ b/npc/mapflag/nopet.txt
@@ -0,0 +1,78 @@
+//================= Hercules Script =======================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2012-2020 Hercules Dev Team
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+//= Mapflag: Disable pet in map.
+//================= Current Version =======================================
+//= 1.0
+//================= Description ===========================================
+//= Players can't hatch pet in the map, existing pet will return to egg.
+//=========================================================================
+
+// GvG Arenas =============
+// guild_vs1 mapflag nopet
+// guild_vs2 mapflag nopet
+// guild_vs3 mapflag nopet
+// guild_vs4 mapflag nopet
+// guild_vs5 mapflag nopet
+
+// Guild Castles ==========
+// aldeg_cas01 mapflag nopet
+// aldeg_cas02 mapflag nopet
+// aldeg_cas03 mapflag nopet
+// aldeg_cas04 mapflag nopet
+// aldeg_cas05 mapflag nopet
+// gefg_cas01 mapflag nopet
+// gefg_cas02 mapflag nopet
+// gefg_cas03 mapflag nopet
+// gefg_cas04 mapflag nopet
+// gefg_cas05 mapflag nopet
+// payg_cas01 mapflag nopet
+// payg_cas02 mapflag nopet
+// payg_cas03 mapflag nopet
+// payg_cas04 mapflag nopet
+// payg_cas05 mapflag nopet
+// prtg_cas01 mapflag nopet
+// prtg_cas02 mapflag nopet
+// prtg_cas03 mapflag nopet
+// prtg_cas04 mapflag nopet
+// prtg_cas05 mapflag nopet
+// schg_cas01 mapflag nopet
+// schg_cas02 mapflag nopet
+// schg_cas03 mapflag nopet
+// schg_cas04 mapflag nopet
+// schg_cas05 mapflag nopet
+// arug_cas01 mapflag nopet
+// arug_cas02 mapflag nopet
+// arug_cas03 mapflag nopet
+// arug_cas04 mapflag nopet
+// arug_cas05 mapflag nopet
+
+// Novice Guild Castles ===
+// n_castle mapflag nopet
+// nguild_alde mapflag nopet
+// nguild_gef mapflag nopet
+// nguild_pay mapflag nopet
+// nguild_prt mapflag nopet
diff --git a/npc/scripts_mapflags.conf b/npc/scripts_mapflags.conf
index 084004244..74fb40610 100644
--- a/npc/scripts_mapflags.conf
+++ b/npc/scripts_mapflags.conf
@@ -58,3 +58,4 @@
"npc/mapflag/skillduration.txt",
"npc/mapflag/notomb.txt",
"npc/mapflag/private_airship.txt",
+"npc/mapflag/nopet.txt",
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 9d5c601bf..c1a717439 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -4101,6 +4101,8 @@ ACMD(mapinfo)
strcat(atcmd_output, msg_fd(fd, 1292)); // PrivateAirshipStartable |
if (map->list[m_id].flag.pairship_endable)
strcat(atcmd_output, msg_fd(fd, 1293)); // PrivateAirshipEndable |
+ if (map->list[m_id].flag.nopet != 0)
+ strcat(atcmd_output, msg_fd(fd, 853)); // NoPet |
clif->message(fd, atcmd_output);
switch (list) {
diff --git a/src/map/battle.c b/src/map/battle.c
index 689622cf4..a571a555d 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -7100,7 +7100,6 @@ static const struct battle_data {
{ "pet_max_stats", &battle_config.pet_max_stats, 99, 0, INT_MAX, },
{ "pet_max_atk1", &battle_config.pet_max_atk1, 750, 0, INT_MAX, },
{ "pet_max_atk2", &battle_config.pet_max_atk2, 1000, 0, INT_MAX, },
- { "pet_disable_in_gvg", &battle_config.pet_no_gvg, 0, 0, 1, },
{ "pet_remove_immediately", &battle_config.pet_remove_immediately, 1, 0, 1, },
{ "skill_min_damage", &battle_config.skill_min_damage, 2|4, 0, 1|2|4, },
{ "finger_offensive_type", &battle_config.finger_offensive_type, 0, 0, 1, },
diff --git a/src/map/battle.h b/src/map/battle.h
index f4ad9c556..abf4c0f68 100644
--- a/src/map/battle.h
+++ b/src/map/battle.h
@@ -228,7 +228,6 @@ struct Battle_Config {
int pet_max_stats; //[Skotlex]
int pet_max_atk1; //[Skotlex]
int pet_max_atk2; //[Skotlex]
- int pet_no_gvg; //Disables pets in gvg. [Skotlex]
int pet_equip_required;
int pet_remove_immediately;
diff --git a/src/map/clif.c b/src/map/clif.c
index fd84961d9..f44d9a716 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -7661,8 +7661,8 @@ static void clif_sendegg(struct map_session_data *sd)
nullpo_retv(sd);
fd = sd->fd;
- if (battle_config.pet_no_gvg && map_flag_gvg2(sd->bl.m)) { //Disable pet hatching in GvG grounds during Guild Wars [Skotlex]
- clif->message(fd, msg_sd(sd, 866)); // "Pets are not allowed in Guild Wars."
+ if (map->list[sd->bl.m].flag.nopet != 0) {
+ clif->message(fd, msg_sd(sd, 866)); // "Pets are disabled in this map."
return;
}
@@ -10982,8 +10982,8 @@ static void clif_parse_LoadEndAck(int fd, struct map_session_data *sd)
// Spawn pet.
if (sd->pd != NULL) {
- if (battle_config.pet_no_gvg != 0 && map_flag_gvg2(sd->bl.m)) { // Return the pet to egg. [Skotlex]
- clif->message(sd->fd, msg_sd(sd, 866)); // "Pets are not allowed in Guild Wars."
+ if (map->list[sd->bl.m].flag.nopet != 0) { // Return the pet to egg. [Skotlex]
+ clif->message(sd->fd, msg_sd(sd, 866)); // Pets are not allowed in Guild Wars.
pet->menu(sd, 3); // Option 3 is return to egg.
} else {
pet->spawn(sd, false);
diff --git a/src/map/map.c b/src/map/map.c
index 221d60fa4..c88118b43 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -5469,6 +5469,19 @@ static bool map_zone_mf_cache(int m, char *flag, char *params)
map_zone_mf_cache_add(m, rflag);
}
}
+ } else if (strcmpi(flag, "nopet") == 0) {
+ if (state == 0) {
+ if (map->list[m].flag.nopet != 0) {
+ sprintf(rflag, "nopet\t%d", map->list[m].flag.nopet);
+ map_zone_mf_cache_add(m, rflag);
+ }
+ }
+ if (sscanf(params, "%d", &state) == 1) {
+ if (state != map->list[m].flag.nopet) {
+ sprintf(rflag, "nopet\t%d", state);
+ map_zone_mf_cache_add(m, rflag);
+ }
+ }
}
return false;
diff --git a/src/map/map.h b/src/map/map.h
index 17f210bc3..e7c0cb50d 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -799,6 +799,7 @@ struct map_data {
unsigned pairship_endable : 1;
unsigned nostorage : 2;
unsigned nogstorage : 2;
+ unsigned nopet : 1;
uint32 noviewid; ///< noviewid (bitmask - @see enum equip_pos)
} flag;
struct point save;
diff --git a/src/map/npc.c b/src/map/npc.c
index 1331414b6..7a3fa9c3f 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -5242,6 +5242,8 @@ static const char *npc_parse_mapflag(const char *w1, const char *w2, const char
map->list[m].flag.nostorage = (state) ? cap_value(atoi(w4), 1, 3) : 0;
} else if (!strcmpi(w3, "nogstorage")) {
map->list[m].flag.nogstorage = (state) ? cap_value(atoi(w4), 1, 3) : 0;
+ } else if (strcmpi(w3, "nopet") == 0) {
+ map->list[m].flag.nopet = (state != 0) ? 1 : 0;
} else {
npc->parse_unknown_mapflag(mapname, w3, w4, start, buffer, filepath, retval);
}
diff --git a/src/map/script.c b/src/map/script.c
index 75582d72f..9372299bb 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -14046,6 +14046,7 @@ static BUILDIN(getmapflag)
case MF_PAIRSHIP_ENDABLE: script_pushint(st, map->list[m].flag.pairship_endable); break;
case MF_NOSTORAGE: script_pushint(st, map->list[m].flag.nostorage); break;
case MF_NOGSTORAGE: script_pushint(st, map->list[m].flag.nogstorage); break;
+ case MF_NOPET: script_pushint(st, map->list[m].flag.nopet); break;
}
}
@@ -14178,6 +14179,7 @@ static BUILDIN(setmapflag)
case MF_PAIRSHIP_ENDABLE: map->list[m].flag.pairship_endable = 1; break;
case MF_NOSTORAGE: map->list[m].flag.nostorage = cap_value(val, 0, 3); break;
case MF_NOGSTORAGE: map->list[m].flag.nogstorage = cap_value(val, 0, 3); break;
+ case MF_NOPET: map->list[m].flag.nopet = 1; break;
}
}
@@ -14271,6 +14273,7 @@ static BUILDIN(removemapflag)
case MF_NOVIEWID: map->list[m].flag.noviewid = EQP_NONE; break;
case MF_NOSTORAGE: map->list[m].flag.nostorage = 0; break;
case MF_NOGSTORAGE: map->list[m].flag.nogstorage = 0; break;
+ case MF_NOPET: map->list[m].flag.nopet = 0; break;
}
}
diff --git a/src/map/script.h b/src/map/script.h
index 4bf8c436b..60f403d2d 100644
--- a/src/map/script.h
+++ b/src/map/script.h
@@ -345,7 +345,8 @@ enum {
MF_PAIRSHIP_STARTABLE,
MF_PAIRSHIP_ENDABLE,
MF_NOSTORAGE,
- MF_NOGSTORAGE
+ MF_NOGSTORAGE,
+ MF_NOPET,
};
enum navigation_service {