Index: src/map/clif.c
===================================================================
--- src/map/clif.c (revision 17288)
+++ src/map/clif.c (working copy)
@@ -5568,6 +5589,38 @@
WFIFOSET(fd,packet_len(0x199));
}
+/* [Ind/Hercules] */
+void clif_maptypeproperty2(struct block_list *bl,enum send_target t) {
+#if PACKETVER >= 20130000 /* not entirely sure when this started */
+ unsigned char buf[30];
+
+ WBUFW(buf,0)=0x28;
+ WBUFB(buf,2) = 1; //cart
+ WBUFB(buf,3) = 1; //party
+ WBUFB(buf,4) = 1; //guild
+ if(map_flag_gvg2(bl->m))
+ WBUFB(buf,5) = 1; //siege
+ else
+ WBUFB(buf,5) = 0; //siege
+ WBUFB(buf,6) = 1; //mineffect
+ WBUFB(buf,7) = 0; //nolockon
+ if(map[bl->m].flag.pvp)
+ WBUFB(buf,8) = 1; //countpk
+ else
+ WBUFB(buf,8) = 0; //countpk
+ WBUFB(buf,9) = 0; //nopartyformation
+ WBUFB(buf,10) = 0; //noitemconsumption
+ WBUFB(buf,11) = 0; //summonstarmiracle
+ if(map[bl->m].flag.battleground)
+ WBUFB(buf,12) = 1; //battleground
+ else
+ WBUFB(buf,12) = 0; //battleground
+ WBUFB(buf,13) = 0; //battleground
+ memset((char*)WBUFP(buf,14), 0, 15);
+
+ clif_send(buf,30,bl,t);
+#endif
+}
/// Set the map type (ZC_NOTIFY_MAPPROPERTY2).
/// 01d6 <type>.W
@@ -8246,6 +8299,8 @@
mail_clear(sd);
+ clif_maptypeproperty2(&sd->bl,SELF);
+
if( disguised(&sd->bl) ) {/* refresh-da */
short disguise = sd->disguise;
pc_disguise(sd, 0);
Index: src/map/clif.h
===================================================================
--- src/map/clif.h (revision 17288)
+++ src/map/clif.h (working copy)
@@ -585,6 +586,7 @@
void clif_heal(int fd,int type,int val);
void clif_resurrection(struct block_list *bl,int type);
void clif_map_property(struct map_session_data* sd, enum map_property property);
+void clif_maptypeproperty2(struct block_list *bl,enum send_target t);
void clif_pvpset(struct map_session_data *sd, int pvprank, int pvpnum,int type);
void clif_map_property_mapall(int map, enum map_property property);
void clif_refine(int fd, int fail, int index, int val);
Index: src/map/duel.c
===================================================================
--- src/map/duel.c (revision 17288)
+++ src/map/duel.c (working copy)
@@ -95,6 +95,7 @@
clif_disp_onlyself(sd, output, strlen(output));
clif_map_property(sd, MAPPROPERTY_FREEPVPZONE);
+ clif_maptypeproperty2(&sd->bl,SELF);
//clif_misceffect2(&sd->bl, 159);
return i;
}
@@ -141,6 +142,7 @@
sd->duel_group = 0;
duel_savetime(sd);
clif_map_property(sd, MAPPROPERTY_NOTHING);
+ clif_maptypeproperty2(&sd->bl,SELF);
}
void duel_accept(const unsigned int did, struct map_session_data* sd)
@@ -157,6 +159,7 @@
clif_disp_message(&sd->bl, output, strlen(output), DUEL_WOS);
clif_map_property(sd, MAPPROPERTY_FREEPVPZONE);
+ clif_maptypeproperty2(&sd->bl,SELF);
//clif_misceffect2(&sd->bl, 159);
}
Index: src/map/script.c
===================================================================
--- src/map/script.c (revision 17288)
+++ src/map/script.c (working copy)
@@ -10854,6 +10854,7 @@
sd->pvp_lost = 0;
}
clif_map_property(sd, MAPPROPERTY_FREEPVPZONE);
+ clif_maptypeproperty2(&sd->bl,SELF);
return 0;
}
BUILDIN_FUNC(setmapflag)
@@ -10884,9 +10886,14 @@
break;
case MF_PVP_NOPARTY: map[m].flag.pvp_noparty = 1; break;
case MF_PVP_NOGUILD: map[m].flag.pvp_noguild = 1; break;
- case MF_GVG:
+ case MF_GVG: {
+ struct block_list bl;
map[m].flag.gvg = 1;
clif_map_property_mapall(m, MAPPROPERTY_AGITZONE);
+ bl.type = BL_NUL;
+ bl.m = m;
+ clif_maptypeproperty2(&bl,ALL_SAMEMAP);
+ }
break;
case MF_GVG_NOPARTY: map[m].flag.gvg_noparty = 1; break;
case MF_NOTRADE: map[m].flag.notrade = 1; break;
@@ -10958,15 +10966,25 @@
case MF_NOBRANCH: map[m].flag.nobranch = 0; break;
case MF_NOPENALTY: map[m].flag.noexppenalty = 0; map[m].flag.nozenypenalty = 0; break;
case MF_NOZENYPENALTY: map[m].flag.nozenypenalty = 0; break;
- case MF_PVP:
+ case MF_PVP: {
+ struct block_list bl;
+ bl.type = BL_NUL;
+ bl.m = m;
map[m].flag.pvp = 0;
clif_map_property_mapall(m, MAPPROPERTY_NOTHING);
+ clif_maptypeproperty2(&bl,ALL_SAMEMAP);
+ }
break;
case MF_PVP_NOPARTY: map[m].flag.pvp_noparty = 0; break;
case MF_PVP_NOGUILD: map[m].flag.pvp_noguild = 0; break;
- case MF_GVG:
+ case MF_GVG: {
+ struct block_list bl;
+ bl.type = BL_NUL;
+ bl.m = m;
map[m].flag.gvg = 0;
clif_map_property_mapall(m, MAPPROPERTY_NOTHING);
+ clif_maptypeproperty2(&bl,ALL_SAMEMAP);
+ }
break;
case MF_GVG_NOPARTY: map[m].flag.gvg_noparty = 0; break;
case MF_NOTRADE: map[m].flag.notrade = 0; break;
@@ -11026,6 +11044,7 @@
const char *str;
TBL_PC* sd = NULL;
struct s_mapiterator* iter;
+ struct block_list bl;
str = script_getstr(st,2);
m = map_mapname2mapid(str);
@@ -11034,6 +11053,9 @@
map[m].flag.pvp = 1;
clif_map_property_mapall(m, MAPPROPERTY_FREEPVPZONE);
+ bl.type = BL_NUL;
+ bl.m = m;
+ clif_maptypeproperty2(&bl,ALL_SAMEMAP);
if(battle_config.pk_mode) // disable ranking functions if pk_mode is on [Valaris]
return 0;
@@ -11071,6 +11093,7 @@
{
int16 m;
const char *str;
+ struct block_list bl;
str=script_getstr(st,2);
m = map_mapname2mapid(str);
@@ -11079,6 +11102,9 @@
map[m].flag.pvp = 0;
clif_map_property_mapall(m, MAPPROPERTY_NOTHING);
+ bl.type = BL_NUL;
+ bl.m = m;
+ clif_maptypeproperty2(&bl,ALL_SAMEMAP);
if(battle_config.pk_mode) // disable ranking options if pk_mode is on [Valaris]
return 0;
@@ -11091,12 +11117,16 @@
{
int16 m;
const char *str;
+ struct block_list bl;
str=script_getstr(st,2);
m = map_mapname2mapid(str);
if(m >= 0 && !map[m].flag.gvg) {
map[m].flag.gvg = 1;
clif_map_property_mapall(m, MAPPROPERTY_AGITZONE);
+ bl.type = BL_NUL;
+ bl.m = m;
+ clif_maptypeproperty2(&bl,ALL_SAMEMAP);
}
return 0;
@@ -11109,8 +11139,12 @@
str=script_getstr(st,2);
m = map_mapname2mapid(str);
if(m >= 0 && map[m].flag.gvg) {
+ struct block_list bl;
map[m].flag.gvg = 0;
clif_map_property_mapall(m, MAPPROPERTY_NOTHING);
+ bl.type = BL_NUL;
+ bl.m = m;
+ clif_maptypeproperty2(&bl,ALL_SAMEMAP);
}
return 0;