ソースを参照

Fixed bugreport:6720 fixed pvp/gvg mapflag handling by setmapflag/removemapflag script commands

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16805 54d463be-8e91-2dee-dedb-b68131a5f0ec
shennetsind 12 年 前
コミット
0998743df9
1 ファイル変更32 行追加5 行削除
  1. 32 5
      src/map/script.c

+ 32 - 5
src/map/script.c

@@ -10515,7 +10515,20 @@ BUILDIN_FUNC(getmapflag)
 
 	return 0;
 }
-
+/* pvp timer handling */
+static int script_mapflag_pvp_sub(struct block_list *bl,va_list ap) {
+	TBL_PC* sd = (TBL_PC*)bl;
+	if (sd->pvp_timer == INVALID_TIMER) {
+		sd->pvp_timer = add_timer(gettick() + 200, pc_calc_pvprank_timer, sd->bl.id, 0);
+		sd->pvp_rank = 0;
+		sd->pvp_lastusers = 0;
+		sd->pvp_point = 5;
+		sd->pvp_won = 0;
+		sd->pvp_lost = 0;
+	}
+	clif_map_property(sd, MAPPROPERTY_FREEPVPZONE);
+	return 0;
+}
 BUILDIN_FUNC(setmapflag)
 {
 	int m,i;
@@ -10536,10 +10549,18 @@ BUILDIN_FUNC(setmapflag)
 			case MF_NOBRANCH:			map[m].flag.nobranch = 1; break;
 			case MF_NOPENALTY:			map[m].flag.noexppenalty = 1; map[m].flag.nozenypenalty = 1; break;
 			case MF_NOZENYPENALTY:		map[m].flag.nozenypenalty = 1; break;
-			case MF_PVP:				map[m].flag.pvp = 1; break;
+			case MF_PVP:
+				map[m].flag.pvp = 1;
+				if( !battle_config.pk_mode ) {
+					map_foreachinmap(script_mapflag_pvp_sub,m,BL_PC);
+				}
+				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:				map[m].flag.gvg = 1; break;
+			case MF_GVG:
+				map[m].flag.gvg = 1;
+				clif_map_property_mapall(m, MAPPROPERTY_AGITZONE);
+				break;
 			case MF_GVG_NOPARTY:		map[m].flag.gvg_noparty = 1; break;
 			case MF_NOTRADE:			map[m].flag.notrade = 1; break;
 			case MF_NOSKILL:			map[m].flag.noskill = 1; break;
@@ -10614,10 +10635,16 @@ BUILDIN_FUNC(removemapflag)
 			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:				map[m].flag.pvp = 0; break;
+			case MF_PVP:
+				map[m].flag.pvp = 0;
+				clif_map_property_mapall(m, MAPPROPERTY_NOTHING);
+				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:				map[m].flag.gvg = 0; break;
+			case MF_GVG:
+				map[m].flag.gvg = 0;
+				clif_map_property_mapall(m, MAPPROPERTY_NOTHING);
+				break;
 			case MF_GVG_NOPARTY:		map[m].flag.gvg_noparty = 0; break;
 			case MF_NOTRADE:			map[m].flag.notrade = 0; break;
 			case MF_NOSKILL:			map[m].flag.noskill = 0; break;