From dc0977ed37c40ea3ab1a7cd5e485a6f2d85931df Mon Sep 17 00:00:00 2001
From: L0ne_W0lf <L0ne_W0lf@54d463be-8e91-2dee-dedb-b68131a5f0ec>
Date: Sat, 14 Aug 2010 16:06:23 +0000
Subject: [PATCH] * Quest log kill count now updated properly. (Added from
 topic 253813) * More battleground editing, and some bug fixes. - * ALL
 BATTLEGROUNDS ARE NOW ACTIVE BY DEFAULT. PLEASE CONTINUE TESTING * - Rewrote
 the Badge Exchange NPC in bg_common.txt, is official now. - Other changes to
 the bg_common folder, including disabled GM NPC. - Completely rewrote Flavius
 for the most part, from ground up. - Moved old Flavius battlegrounds to
 /custom/battleground folder. - Restored original bg_common, and KVM to
 /custom/battleground - Fixed wall bugs in Tierra Gorge, and added an oninit
 to the timers. - Other minor tweaks to both Tierra Gorge and KVM scripts. -
 Fixed the pseudo-cooldown on KVM not working properly, I hope. - Added global
 time2str function which will be used later in Endless tower. * Applied
 Epoque's mapflag clean up, which removes flags from scripts.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14374 54d463be-8e91-2dee-dedb-b68131a5f0ec
---
 Changelog-Trunk.txt                           |    2 +
 conf/mapflag/battleground.txt                 |   19 +
 conf/mapflag/fireworks.txt                    |   13 +
 conf/mapflag/night.txt                        |   14 +-
 conf/mapflag/nobranch.txt                     |   32 +-
 conf/mapflag/noloot.txt                       |   18 +-
 conf/mapflag/nomemo.txt                       |   13 +
 conf/mapflag/nopenalty.txt                    |   12 +
 conf/mapflag/nopvp.txt                        |    3 +-
 conf/mapflag/noreturn.txt                     |   11 +
 conf/mapflag/nosave.txt                       |   11 +
 conf/mapflag/noskill.txt                      |   14 +-
 conf/mapflag/noteleport.txt                   |   12 +
 conf/mapflag/novending.txt                    |   14 +
 conf/mapflag/nowarp.txt                       |    8 +
 conf/mapflag/nowarpto.txt                     |   10 +
 conf/mapflag/town.txt                         |   33 +
 doc/script_commands.txt                       |    3 +-
 npc/Changelog.txt                             |   15 +-
 npc/battleground/bg_common.txt                |  690 +++++++--
 npc/battleground/flavius/flavius01.txt        |  759 ++++++++++
 npc/battleground/flavius/flavius02.txt        |  759 ++++++++++
 npc/battleground/kvm/kvm01.txt                |   49 +-
 npc/battleground/kvm/kvm02.txt                |   49 +-
 npc/battleground/kvm/kvm03.txt                |   49 +-
 npc/battleground/kvm/kvm_enter.txt            |   20 +-
 npc/battleground/tierra/tierra01.txt          |    7 +-
 npc/battleground/tierra/tierra02.txt          |    7 +-
 npc/custom/battleground/bg_common.txt         | 1327 +++++++++++++++++
 .../battleground/bg_flavius_01.txt            |   13 -
 .../battleground/bg_flavius_02.txt            |   13 -
 npc/custom/battleground/bg_kvm01.txt          |  378 +++++
 npc/custom/battleground/bg_kvm02.txt          |  378 +++++
 npc/custom/battleground/bg_kvm03.txt          |  378 +++++
 npc/custom/battleground/bg_tierra_01.txt      |   13 -
 npc/custom/battleground/bg_tierra_02.txt      |   13 -
 npc/events/halloween_2008.txt                 |    9 -
 npc/events/idul_fitri.txt                     |    1 -
 npc/jobs/1-1/swordman.txt                     |   13 +-
 npc/jobs/1-1/thief.txt                        |    5 -
 npc/jobs/2-2/crusader.txt                     |    7 -
 npc/jobs/2-2/monk.txt                         |    7 -
 npc/jobs/2-2/rogue.txt                        |    5 -
 npc/jobs/2-2/sage.txt                         |    5 -
 npc/other/Global_Functions.txt                |   36 +
 npc/other/mail.txt                            |   21 -
 npc/scripts_athena.conf                       |    4 +-
 npc/scripts_custom.conf                       |    4 +
 npc/scripts_mapflags.conf                     |    4 +
 src/map/clif.c                                |   24 +-
 50 files changed, 4893 insertions(+), 411 deletions(-)
 create mode 100644 conf/mapflag/battleground.txt
 create mode 100644 conf/mapflag/fireworks.txt
 create mode 100644 conf/mapflag/novending.txt
 create mode 100644 conf/mapflag/town.txt
 create mode 100644 npc/battleground/flavius/flavius01.txt
 create mode 100644 npc/battleground/flavius/flavius02.txt
 create mode 100644 npc/custom/battleground/bg_common.txt
 rename npc/{ => custom}/battleground/bg_flavius_01.txt (97%)
 rename npc/{ => custom}/battleground/bg_flavius_02.txt (97%)
 create mode 100644 npc/custom/battleground/bg_kvm01.txt
 create mode 100644 npc/custom/battleground/bg_kvm02.txt
 create mode 100644 npc/custom/battleground/bg_kvm03.txt

diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 61c944bcae..dbb6872e1e 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -3,6 +3,8 @@ Date	Added
 AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
+2010/08/14
+	* Rev. 14373 Quest log kill count now updated properly. (Added from topic 253813) [L0ne_W0lf]
 2010/08/11
 	* Documented Battleground commands with as much information as I've got. [L0ne_W0lf]
 2010/08/03
diff --git a/conf/mapflag/battleground.txt b/conf/mapflag/battleground.txt
new file mode 100644
index 0000000000..4a1ff0f66b
--- /dev/null
+++ b/conf/mapflag/battleground.txt
@@ -0,0 +1,19 @@
+//===== eAthena Script =======================================
+//= Battleground map setting. '2' shows scoreboard.
+//===== By: ==================================================
+//= Epoque
+//===== Current Version: =====================================
+//= 1.0a [Epoque]
+//===== Compatible With: =====================================
+//=
+//===== Description: =========================================
+//=
+//============================================================
+
+bat_c01	mapflag	battleground	2
+bat_c02	mapflag	battleground	2
+bat_c03	mapflag	battleground	2
+bat_b01	mapflag	battleground	2
+bat_b02	mapflag	battleground
+bat_a01	mapflag	battleground
+bat_a02	mapflag	battleground
diff --git a/conf/mapflag/fireworks.txt b/conf/mapflag/fireworks.txt
new file mode 100644
index 0000000000..90d89eb1b5
--- /dev/null
+++ b/conf/mapflag/fireworks.txt
@@ -0,0 +1,13 @@
+//===== eAthena Script =======================================
+//= Displays Fireworks effect (Depreciated)
+//===== By: ==================================================
+//= Epoque
+//===== Current Version: =====================================
+//= 1.0a [Epoque]
+//===== Compatible With: =====================================
+//=
+//===== Description: =========================================
+//=
+//============================================================
+
+//prontera	mapflag	fireworks
diff --git a/conf/mapflag/night.txt b/conf/mapflag/night.txt
index 70cd1431f2..6daaa1b2a1 100644
--- a/conf/mapflag/night.txt
+++ b/conf/mapflag/night.txt
@@ -271,6 +271,14 @@ que_qaru03	mapflag	nightenabled
 que_qaru04	mapflag	nightenabled
 que_qaru05	mapflag	nightenabled
 
+// Battle Grounds ==============
+bat_c01	mapflag	nightenabled
+bat_c02	mapflag	nightenabled
+bat_c03	mapflag	nightenabled
+
+//Endless Tower ==================
+e_tower	mapflag	nightenabled
+
 // Episode 13 ====================
 mid_camp	mapflag	nightenabled
 man_fild01	mapflag	nightenabled
@@ -287,9 +295,5 @@ manuk	mapflag	nightenabled
 man_fild02	mapflag	nightenabled
 splendide	mapflag	nightenabled
 spl_fild01	mapflag	nightenabled
-bat_c01	mapflag	nightenabled
-bat_c02	mapflag	nightenabled
-bat_c03	mapflag	nightenabled
 
-//Endless Tower ==================
-e_tower	mapflag	nightenabled
+//evt_zombie	mapflag	nightenabled
diff --git a/conf/mapflag/nobranch.txt b/conf/mapflag/nobranch.txt
index 70018fe2ee..014fa01691 100644
--- a/conf/mapflag/nobranch.txt
+++ b/conf/mapflag/nobranch.txt
@@ -9,7 +9,7 @@
 //= 1.8 Removed restriction on PVP maps. [L0ne_W0lf]
 //===== Current Version: =====================================
 
-// Cities ================>\\
+// Cities ======================
 ayo_in01	mapflag	nobranch
 ayo_in02	mapflag	nobranch
 alb_ship	mapflag	nobranch
@@ -95,7 +95,7 @@ ve_in	mapflag	nobranch
 ve_in02	mapflag	nobranch
 thor_camp	mapflag	nobranch
 
-// Job Quests ====================
+// Job Quests ==================
 job_sword1	mapflag	nobranch
 job_thief1	mapflag	nobranch
 // 2-1
@@ -118,7 +118,7 @@ que_ng	mapflag	nobranch
 job_soul	mapflag	nobranch
 job_star	mapflag	nobranch
 
-// Special Quests Places =========
+// Special Quests Places =======
 que_god01	mapflag	nobranch
 que_god02	mapflag	nobranch
 que_bingo	mapflag	nobranch
@@ -135,7 +135,7 @@ que_rachel	mapflag	nobranch
 que_san04	mapflag	nobranch
 que_thor	mapflag	nobranch
 
-// Guild Castles ==================
+// Guild Castles ===============
 //alde_gld	mapflag	nobranch
 aldeg_cas01	mapflag	nobranch
 aldeg_cas02	mapflag	nobranch
@@ -178,14 +178,14 @@ nguild_gef	mapflag	nobranch
 nguild_pay	mapflag	nobranch
 nguild_prt	mapflag	nobranch
 
-// GvG Arenas =====================
+// GvG Arenas ==================
 guild_vs1	mapflag	nobranch
 guild_vs2	mapflag	nobranch
 guild_vs3	mapflag	nobranch
 guild_vs4	mapflag	nobranch
 guild_vs5	mapflag	nobranch
 
-// Arenas ================>\\
+// Arenas ======================
 arena_room	mapflag	nobranch
 force_1-1	mapflag	nobranch
 force_1-2	mapflag	nobranch
@@ -219,11 +219,11 @@ prt_are01	mapflag	nobranch
 //wizard_2-1	mapflag	nobranch
 //wizard_3-1	mapflag	nobranch
 
-// PvP Arenas =========================
+// PvP Arenas ==================
 pvp_y_room	mapflag	nobranch
 pvp_n_room	mapflag	nobranch
 
-//Main City maps
+// Main City maps ==============
 alberta	mapflag	nobranch
 aldebaran	mapflag	nobranch
 amatsu	mapflag	nobranch
@@ -259,11 +259,11 @@ turbo_e_4	mapflag	nobranch
 turbo_e_8	mapflag	nobranch
 turbo_e_16	mapflag	nobranch
 
-//Monster Races ================
+// Monster Races ===============
 p_track01	mapflag	nobranch
 p_track02	mapflag	nobranch
 
-//Vision of Okolnir ============
+// Vision of Okolnir ===========
 que_qsch01	mapflag	nobranch
 que_qsch02	mapflag	nobranch
 que_qsch03	mapflag	nobranch
@@ -274,3 +274,15 @@ que_qaru02	mapflag	nobranch
 que_qaru03	mapflag	nobranch
 que_qaru04	mapflag	nobranch
 que_qaru05	mapflag	nobranch
+
+// Battle Grounds ==============
+bat_c01	mapflag	nobranch
+bat_c02	mapflag	nobranch
+bat_c03	mapflag	nobranch
+bat_room	mapflag	nobranch
+bat_b01	mapflag	nobranch
+bat_b02	mapflag	nobranch
+bat_a01	mapflag	nobranch
+bat_a02	mapflag	nobranch
+
+//evt_zombie	mapflag	nobranch
diff --git a/conf/mapflag/noloot.txt b/conf/mapflag/noloot.txt
index e488f8f0a5..7c3c0bfa40 100644
--- a/conf/mapflag/noloot.txt
+++ b/conf/mapflag/noloot.txt
@@ -1,16 +1,16 @@
 //===== eAthena Script =======================================
-//= Map flags that disable drop of loot
+//= Mapflag from a script in the NPC folder
 //===== By: ==================================================
-//= eAthena Dev Team
-//= 1.2 [Lupus] 1.3 [massdriller] 1.4 Lupus 1.5 Lorky
-//= 1.6 Added Lighthalzen (due to quests) [Lupus]
-//= 1.7 Commented out entries. (Quests are official) [L0ne_W0lf]
+//= Epoque
+//===== Current Version: =====================================
+//= 1.0a [Epoque]
+//===== Compatible With: =====================================
+//=
+//===== Description: =========================================
+//=
 //============================================================
 
-// Location for Job's Quests
-//job_sword1	mapflag	noloot
-//in_moc_16	mapflag	noloot
-//job_hunte	mapflag	noloot
+//hunte	mapflag	noloot
 //job_knt	mapflag	noloot
 //job_prist	mapflag	noloot
 //job_wiz	mapflag	noloot
diff --git a/conf/mapflag/nomemo.txt b/conf/mapflag/nomemo.txt
index a2ffb46d6a..960b790c4d 100644
--- a/conf/mapflag/nomemo.txt
+++ b/conf/mapflag/nomemo.txt
@@ -1,4 +1,5 @@
 //===== eAthena Script =======================================
+//===== eAthena Script =======================================
 //= Map flags that disable warp portal memory
 //===== By: ==================================================
 //= eAthena Dev Team
@@ -637,6 +638,16 @@ que_qaru05	mapflag	nomemo
 5@tower	mapflag	nomemo
 6@tower	mapflag	nomemo
 
+// Battle Grounds ================
+bat_c01	mapflag	nomemo
+bat_c02	mapflag	nomemo
+bat_c03	mapflag	nomemo
+bat_room	mapflag	nomemo
+bat_b01	mapflag	nomemo
+bat_b02	mapflag	nomemo
+bat_a01	mapflag	nomemo
+bat_a02	mapflag	nomemo
+
 // Episode 13 ====================
 mid_campin	mapflag	nomemo
 man_fild01	mapflag	nomemo
@@ -666,3 +677,5 @@ spl_in01	mapflag	nomemo
 // Nidhoggr's Instance ===========
 1@nyd	mapflag	nomemo
 2@nyd	mapflag	nomemo
+
+//evt_zombie	mapflag	nomemo
diff --git a/conf/mapflag/nopenalty.txt b/conf/mapflag/nopenalty.txt
index ddffc147e7..b34c991919 100644
--- a/conf/mapflag/nopenalty.txt
+++ b/conf/mapflag/nopenalty.txt
@@ -238,3 +238,15 @@ que_qaru02	mapflag	nopenalty
 que_qaru03	mapflag	nopenalty
 que_qaru04	mapflag	nopenalty
 que_qaru05	mapflag	nopenalty
+
+// Battle Grounds ==============
+bat_c01	mapflag	nopenalty
+bat_c02	mapflag	nopenalty
+bat_c03	mapflag	nopenalty
+bat_room	mapflag	nopenalty
+bat_b01	mapflag	nopenalty
+bat_b02	mapflag	nopenalty
+bat_a01	mapflag	nopenalty
+bat_a02	mapflag	nopenalty
+
+//evt_zombie	mapflag	nopenalty
diff --git a/conf/mapflag/nopvp.txt b/conf/mapflag/nopvp.txt
index 379d0eb903..176c3512d0 100644
--- a/conf/mapflag/nopvp.txt
+++ b/conf/mapflag/nopvp.txt
@@ -79,4 +79,5 @@ ein_in01	mapflag	pvp	off
 ayothaya	mapflag	pvp	off
 veins	mapflag	pvp	off
 ve_in	mapflag	pvp	off
-ve_in02	mapflag	pvp	off
\ No newline at end of file
+ve_in02	mapflag	pvp	off
+//evt_zombie	mapflag	pvp	off
diff --git a/conf/mapflag/noreturn.txt b/conf/mapflag/noreturn.txt
index 3f9a201e9c..f6a31b2725 100644
--- a/conf/mapflag/noreturn.txt
+++ b/conf/mapflag/noreturn.txt
@@ -229,3 +229,14 @@ que_hugel	mapflag	noreturn
 //pvp_n_8-4	mapflag	noreturn
 //pvp_n_8-5	mapflag	noreturn
 //pvp_2vs2	mapflag	noreturn
+
+// Battle Grounds ==============
+bat_c01	mapflag	noreturn
+bat_c02	mapflag	noreturn
+bat_c03	mapflag	noreturn
+bat_b01	mapflag	noreturn
+bat_b02	mapflag	noreturn
+bat_a01	mapflag	noreturn
+bat_a02	mapflag	noreturn
+
+//evt_zombie	mapflag	noreturn
diff --git a/conf/mapflag/nosave.txt b/conf/mapflag/nosave.txt
index c02af59473..7c254eee21 100644
--- a/conf/mapflag/nosave.txt
+++ b/conf/mapflag/nosave.txt
@@ -239,6 +239,15 @@ e_tower	mapflag	nosave	SavePoint
 5@tower	mapflag	nosave	SavePoint
 6@tower	mapflag	nosave	SavePoint
 
+// Battle Grounds ==============
+bat_c01	mapflag	nosave	SavePoint
+bat_c02	mapflag	nosave	SavePoint
+bat_c03	mapflag	nosave	SavePoint
+bat_b01	mapflag	nosave	SavePoint
+bat_b02	mapflag	nosave	SavePoint
+bat_a01	mapflag	nosave	SavePoint
+bat_a02	mapflag	nosave	SavePoint
+
 // Episode 13 ====================
 moc_fild22b	mapflag	nosave	SavePoint
 que_dan01	mapflag	nosave	SavePoint
@@ -258,3 +267,5 @@ arug_dun01	mapflag	nosave	SavePoint
 
 arug_dun01	mapflag	nosave	SavePoint
 schg_dun01	mapflag	nosave	SavePoint
+
+//evt_zombie	mapflag	nosave	SavePoint
diff --git a/conf/mapflag/noskill.txt b/conf/mapflag/noskill.txt
index 35af4894c5..28b1b70b79 100644
--- a/conf/mapflag/noskill.txt
+++ b/conf/mapflag/noskill.txt
@@ -13,12 +13,18 @@ prt_are_in	mapflag	noskill
 himinn	mapflag	noskill
 
 // Quiz Maps ===================
-quiz_00	mapflag	noskill

-quiz_01	mapflag	noskill

-quiz_02	mapflag	noskill

-quiz_test	mapflag	noskill

+quiz_00	mapflag	noskill
+
+quiz_01	mapflag	noskill
+
+quiz_02	mapflag	noskill
+
+quiz_test	mapflag	noskill
+
 
 //Hugel Minigames ==============
 que_bingo	mapflag	noskill
 p_track01	mapflag	noskill
 p_track02	mapflag	noskill
+
+//evt_zombie	mapflag	noskill
diff --git a/conf/mapflag/noteleport.txt b/conf/mapflag/noteleport.txt
index b532732b47..b88cb01884 100644
--- a/conf/mapflag/noteleport.txt
+++ b/conf/mapflag/noteleport.txt
@@ -353,6 +353,16 @@ e_tower	mapflag	noteleport
 6@tower	mapflag	noteleport
 6@tower	mapflag	monster_noteleport
 
+// Battle Grounds ==============
+bat_c01	mapflag	noteleport
+bat_c02	mapflag	noteleport
+bat_c03	mapflag	noteleport
+bat_room	mapflag	noteleport
+bat_b01	mapflag	noteleport
+bat_b02	mapflag	noteleport
+bat_a01	mapflag	noteleport
+bat_a02	mapflag	noteleport
+
 // Episode 13 ====================
 mid_campin	mapflag	noteleport
 moc_fild22b	mapflag	noteleport
@@ -377,3 +387,5 @@ nyd_dun02	mapflag	noteleport
 1@nyd	mapflag	monster_noteleport
 2@nyd	mapflag	noteleport
 2@nyd	mapflag	monster_noteleport
+
+//evt_zombie	mapflag	noteleport
diff --git a/conf/mapflag/novending.txt b/conf/mapflag/novending.txt
new file mode 100644
index 0000000000..34eb4549e4
--- /dev/null
+++ b/conf/mapflag/novending.txt
@@ -0,0 +1,14 @@
+//===== eAthena Script =======================================
+//= Mapflag from a script in the NPC folder
+//===== By: ==================================================
+//= Epoque
+//===== Current Version: =====================================
+//= 1.0a [Epoque]
+//===== Compatible With: =====================================
+//=
+//===== Description: =========================================
+//=
+//============================================================
+
+//prontera	mapflag	novending
+//prt_in	mapflag	novending
diff --git a/conf/mapflag/nowarp.txt b/conf/mapflag/nowarp.txt
index e7c9103268..63c9aaaae7 100644
--- a/conf/mapflag/nowarp.txt
+++ b/conf/mapflag/nowarp.txt
@@ -57,3 +57,11 @@ turbo_e_16	mapflag	nowarp
 //Monster Races ================
 p_track01	mapflag	nowarp
 p_track02	mapflag	nowarp
+// Battle Grounds ==============
+bat_c01	mapflag	nowarp
+bat_c02	mapflag	nowarp
+bat_c03	mapflag	nowarp
+bat_b01	mapflag	nowarp
+bat_b02	mapflag	nowarp
+bat_a01	mapflag	nowarp
+bat_a02	mapflag	nowarp
diff --git a/conf/mapflag/nowarpto.txt b/conf/mapflag/nowarpto.txt
index c37d6e1947..01d27eda53 100644
--- a/conf/mapflag/nowarpto.txt
+++ b/conf/mapflag/nowarpto.txt
@@ -99,6 +99,16 @@ e_tower	mapflag	nowarpto
 5@tower	mapflag	nowarpto
 6@tower	mapflag	nowarpto
 
+// Battle Grounds ==============
+bat_c01	mapflag	nowarpto
+bat_c02	mapflag	nowarpto
+bat_c03	mapflag	nowarpto
+bat_room	mapflag	nowarpto
+bat_b01	mapflag	nowarpto
+bat_b02	mapflag	nowarpto
+bat_a01	mapflag	nowarpto
+bat_a02	mapflag	nowarpto
+
 // Episode 13 ====================
 mid_campin	mapflag	nowarpto
 man_fild01	mapflag	nowarpto
diff --git a/conf/mapflag/town.txt b/conf/mapflag/town.txt
new file mode 100644
index 0000000000..13ba10939d
--- /dev/null
+++ b/conf/mapflag/town.txt
@@ -0,0 +1,33 @@
+//===== eAthena Script =======================================
+//= Allows Mailbox access
+//===== By: ==================================================
+//= Epoque
+//===== Current Version: =====================================
+//= 1.0a [Epoque]
+//===== Compatible With: =====================================
+//=
+//===== Description: =========================================
+//=
+//============================================================
+
+prontera	mapflag	town
+izlude	mapflag	town
+moc_ruins	mapflag	town
+geffen	mapflag	town
+payon	mapflag	town
+pay_arche	mapflag	town
+alberta	mapflag	town
+aldebaran	mapflag	town
+yuno	mapflag	town
+lighthalzen	mapflag	town
+einbroch	mapflag	town
+einbech	mapflag	town
+comodo	mapflag	town
+umbala	mapflag	town
+amatsu	mapflag	town
+gonryun	mapflag	town
+ayothaya	mapflag	town
+louyang	mapflag	town
+hugel	mapflag	town
+rachel	mapflag	town
+veins	mapflag	town
diff --git a/doc/script_commands.txt b/doc/script_commands.txt
index 7b043fa2bc..06a5a71210 100644
--- a/doc/script_commands.txt
+++ b/doc/script_commands.txt
@@ -6735,7 +6735,8 @@ color can be:
 <On Quit Event> refers to an NPC label that attaches to the character and is run when they relog.
 <On Death Event> refers to an NPC label that attaches to the character and is run when they die. Can be "" for empty.
 
-Unlike the prior command, the latter will attach a GROUP in a waiting room to the battleground.
+Unlike the prior command, the latter will attach a GROUP in a waiting room to the battleground, and 
+sets the array $@arenamembers[0] where 0 holds the IDs of the first group, and 1 holds the IDs of the second.
 
 Example:
 	// Battle Group will be refered to as $@KvM01BG_id1, and when they die, respawn at bat_c01,52,129.
diff --git a/npc/Changelog.txt b/npc/Changelog.txt
index d6cc8a1eca..8806c17d27 100644
--- a/npc/Changelog.txt
+++ b/npc/Changelog.txt
@@ -1,7 +1,20 @@
 Date		Added
 ======
 2010/08/11
-	* Rev. 14369 Another rather large overhaul of the battlegrounds. [L0ne_W0lf]
+	* Rev. 14374 More battleground editing, and some bug fixes. [L0ne_W0lf]
+	- * ALL BATTLEGROUNDS ARE NOW ACTIVE BY DEFAULT. PLEASE CONTINUE TESTING *
+	- Rewrote the Badge Exchange NPC in bg_common.txt, is official now.
+	- Other changes to the bg_common folder, including disabled GM NPC.
+	- Completely rewrote Flavius for the most part, from ground up.
+	- Moved old Flavius battlegrounds to /custom/battleground folder.
+	- Restored original bg_common, and KVM to /custom/battleground
+	- Fixed wall bugs in Tierra Gorge, and added an oninit to the timers.
+	- Other minor tweaks to both Tierra Gorge and KVM scripts.
+	- Fixed the pseudo-cooldown on KVM not working properly, I hope.
+	- Added global time2str function which will be used later in Endless tower.
+	* Applied Epoque's mapflag clean up, which removes flags from scripts.
+2010/08/11
+	* Rev. 14373 Another rather large overhaul of the battlegrounds. [L0ne_W0lf]
 	- in bg_common.txt, stripped out several more NPCs, split them off.
 	- Most of the NPCs in bg_common.txt are now official Aegis versions.
 	- Completely rewrote Tierra Gorge for the most part, from ground up.
diff --git a/npc/battleground/bg_common.txt b/npc/battleground/bg_common.txt
index df3dbaf417..cf6a85bc13 100644
--- a/npc/battleground/bg_common.txt
+++ b/npc/battleground/bg_common.txt
@@ -1,15 +1,23 @@
-// ==============================================================================
+//===== eAthena Script ======================================= 
 // BattleGround System - Common NPCs
-// ==============================================================================
-
-// MapFlags
-// *********************************************************************
-
-bat_room	mapflag	nomemo
-bat_room	mapflag	nowarpto
-bat_room	mapflag	nobranch
-bat_room	mapflag	nopenalty
-bat_room	mapflag	noteleport
+//===== By: ================================================== 
+//= ????, L0ne_W0lf
+//===== Current Version: ===================================== 
+//= 1.1
+//===== Compatible With: ===================================== 
+//= eAthena 1.0
+//===== Description: ========================================= 
+//= [AEGIS Conversion]
+//= Battleground npcs:
+//= - Generals and Aides
+//= - Battlegroun Warper
+//= - Kafra and Repairman.
+//= - GM Management NPC (Disabled by default)
+//= - Badge Exhanger (Tierra and Flavius.)
+//===== Additional Comments: ================================= 
+//= 1.0 First Version.
+//= 1.1 Updated several NPCs to Official.
+//============================================================
 
 // Generals
 //============================================================
@@ -269,197 +277,551 @@ payon,189,105,3	duplicate(BatRecruit)	Maroll Battle Recruiter::BatRecruit5	728
 lighthalzen,153,86,5	duplicate(BatRecruit)	Maroll Battle Recruiter::BatRecruit6	728
 rachel,149,138,3	duplicate(BatRecruit)	Maroll Battle Recruiter::BatRecruit7	728
 
-// Time calculation Function
-// *********************************************************************
-function	script	Time2Str	{
-	set .@Time_Left, getarg(0) - gettimetick(2);
-	
-	set .@Days, .@Time_Left / 86400;
-	set .@Time_Left, .@Time_Left - (.@Days * 86400);
-	set .@Hours, .@Time_Left / 3600;
-	set .@Time_Left, .@Time_Left - (.@Hours * 3600);
-	set .@Minutes, .@Time_Left / 60;
-	set .@Time_Left, .@Time_Left - (.@Minutes * 60);
-	
-	set .@Time$, "";
-	if( .@Days > 1 )
-		set .@Time$, .@Time$ + .@Days + " days, ";
-	else if( .@Days > 0 )
-		set .@Time$, .@Time$ + .@Days + " day, ";
-
-	if( .@Hours > 1 )
-		set .@Time$, .@Time$ + .@Hours + " hours, ";
-	else if( .@Hours > 0 )
-		set .@Time$, .@Time$ + .@Hours + " hour, ";
-
-	if( .@Minutes > 1 )
-		set .@Time$, .@Time$ + .@Minutes + " minutes, ";
-	else if( .@Minutes > 0 )
-		set .@Time$, .@Time$ + .@Minutes + " minute, ";
-
-	if( .@Time_Left > 1 || .@Time_Left == 0 )
-		set .@Time$, .@Time$ + .@Time_Left + " seconds.";
-	else if( .@Time_Left == 1 )
-		set .@Time$, .@Time$ + .@Time_Left + " second.";
-	
-	return .@Time$;
-}
-
-// Exit from Registration
-// *********************************************************************
--	script	warp2bat_room	-1,{
-	end;
-
-OnTouch:
-	set BG_Delay_Tick, gettimetick(2) + 30;
-	warp "bat_room",154,149;
-	end;
-}
-
-// Flavius bat_b02
-bat_room,57,81,0	duplicate(warp2bat_room)	bat1	45,1,1
-bat_room,57,90,0	duplicate(warp2bat_room)	bat2	45,1,1
+// Additional warps
 // Empty
-bat_room,85,81,0	duplicate(warp2bat_room)	bat5	45,1,1
-bat_room,85,90,0	duplicate(warp2bat_room)	bat6	45,1,1
+bat_room,57,81,0	warp	bat1	1,1,bat_room,154,149
+bat_room,57,90,0	warp	bat2	1,1,bat_room,154,149
 // Empty
-bat_room,85,220,0	duplicate(warp2bat_room)	bat7	45,1,1
-bat_room,85,211,0	duplicate(warp2bat_room)	bat8	45,1,1
+bat_room,85,81,0	warp	bat5	1,1,bat_room,154,149
+bat_room,85,90,0	warp	bat6	1,1,bat_room,154,149
 // Free BG
-bat_room,113,81,0	duplicate(warp2bat_room)	bat9	45,1,1
-bat_room,113,90,0	duplicate(warp2bat_room)	bat10	45,1,1
+bat_room,113,81,0	warp	bat9	1,1,bat_room,154,149
+bat_room,113,90,0	warp	bat10	1,1,bat_room,154,149
 // Free BG
-bat_room,141,81,0	duplicate(warp2bat_room)	bat13	45,1,1
-bat_room,141,90,0	duplicate(warp2bat_room)	bat14	45,1,1
+bat_room,141,81,0	warp	bat13	1,1,bat_room,154,149
+bat_room,141,90,0	warp	bat14	1,1,bat_room,154,149
 // Free BG
-bat_room,141,220,0	duplicate(warp2bat_room)	bat15	45,1,1
-bat_room,141,211,0	duplicate(warp2bat_room)	bat16	45,1,1
+bat_room,169,81,0	warp	bat17	1,1,bat_room,154,149
+bat_room,169,90,0	warp	bat18	1,1,bat_room,154,149
 // Free BG
-bat_room,169,81,0	duplicate(warp2bat_room)	bat17	45,1,1
-bat_room,169,90,0	duplicate(warp2bat_room)	bat18	45,1,1
+bat_room,197,81,0	warp	bat21	1,1,bat_room,154,149
+bat_room,197,90,0	warp	bat22	1,1,bat_room,154,149
 // Free BG
-bat_room,197,81,0	duplicate(warp2bat_room)	bat21	45,1,1
-bat_room,197,90,0	duplicate(warp2bat_room)	bat22	45,1,1
-// Free BG
-bat_room,225,81,0	duplicate(warp2bat_room)	bat25	45,1,1
-bat_room,225,90,0	duplicate(warp2bat_room)	bat26	45,1,1
-// Flavius bat_b01
-bat_room,253,81,0	duplicate(warp2bat_room)	bat29	45,1,1
-bat_room,253,90,0	duplicate(warp2bat_room)	bat30	45,1,1
+bat_room,225,81,0	warp	bat25	1,1,bat_room,154,149
+bat_room,225,90,0	warp	bat26	1,1,bat_room,154,149
 // Empty
-bat_room,253,220,0	duplicate(warp2bat_room)	bat31	45,1,1
-bat_room,253,211,0	duplicate(warp2bat_room)	bat32	45,1,1
+bat_room,253,81,0	warp	bat29	1,1,bat_room,154,149
+bat_room,253,90,0	warp	bat30	1,1,bat_room,154,149
+// Empty
+bat_room,253,220,0	warp	bat31	1,1,bat_room,154,149
+bat_room,253,211,0	warp	bat32	1,1,bat_room,154,149
 
 // Kafra
-// *********************************************************************
+//============================================================
 bat_room,148,147,4	script	Kafra Staff::kaf_bat	861,{
 	cutin "kafra_09",2;
 	callfunc "F_Kafra",0,2,1,150,0;
 }
 
-// Badges Repairman
-// *********************************************************************
-
+// Repairman
+//============================================================
 bat_room,138,144,5	script	Repairman#bg	86,{
 	callfunc "repairmain","Repairman";
 	end;
 }
 
-// Badges Exchange
-// *********************************************************************
+/*
+// GM Management NPC
+//============================================================
+bat_room,1,151,3	script	Switch#batgnd	81,{
+	input .@input,0,2000;
+	if (.@input == 0) {
+		mes "The command has been cancelled.";
+		close;
+	}
+	else if (.@input == 1854) {
+		mes "May I help ypu?";
+		next;
+		switch(select("Close Battlefield:Open Battlefield:Reset a01:Reset b01:Reset a02:Reset b02")) {
+		case 1:
+			disablenpc "Tierra Gorge Officer#01a";
+			disablenpc "Tierra Gorge Officer#02a";
+			disablenpc "Tierra Gorge Officer#01b";
+			disablenpc "Tierra Gorge Officer#02b";
+			disablenpc "Flavius Officer#01a";
+			disablenpc "Flavius Officer#01b";
+			disablenpc "Flavius Officer#02a";
+			disablenpc "Flavius Officer#02b";
+			break;
+		case 2:
+			enablenpc "Tierra Gorge Officer#01a";
+			enablenpc "Tierra Gorge Officer#02a";
+			enablenpc "Tierra Gorge Officer#01b";
+			enablenpc "Tierra Gorge Officer#02b";
+			enablenpc "Flavius Officer#01a";
+			enablenpc "Flavius Officer#01b";
+			enablenpc "Flavius Officer#02a";
+			enablenpc "Flavius Officer#02b";
+			break;
+		case 3:
+			donpcevent "start#bat_a01::OnEnable";
+			break;
+		case 4:
+			donpcevent "start#bat_b01::OnEnable";
+			break;
+		case 5:
+			donpcevent "start#bat_a02::OnEnable";
+			break;
+		case 6:
+			donpcevent "start#bat_b02::OnEnable";
+			break;
+		}
+		mes "Complete";
+		close;
+	}
+}
+*/
 
+// Badges Exchange
+//============================================================
 bat_room,160,150,3	script	Erundek	109,{
+	if (checkweight(1201,1) == 0) {
+		mes "- Wait a minute !! -";
+		mes "- Currently you're carrying -";
+		mes "- too many items with you. -";
+		mes "- Please try again -";
+		mes "- after you loose some weight. -";
+		close;
+	}
 	mes "[Erundek]";
-	mes "Welcome, mighty warrior.";
-	mes "What can I do for you today ?";
+	mes "Do you have the battlefield badges?";
+	mes "I can exchange Bravery Badges and Valor Badges for reward items.";
 	next;
-	switch( select("Check the Catalog","Exchange Bravery Badges","Exchange Valor Badges","Hmm, nothing I guess.") )
-	{
+	switch(select("Exchange Badges:Check the Catalog")) {
+	case 1:
+		mes "[Erundek]";
+		mes "Which type of items would you like to exchange?";
+		mes "To check more information about the reward items, please use our ^3131FFCatalog^000000.";
+		next;
+		switch(select("Weapon:Armor:Accessory:Consumable")) {
 		case 1:
 			mes "[Erundek]";
-			mes "We have many items, so please take a look and purchase deliberately.";
-			close2;
-			Readbook 11010,1;
-			end;
+			mes "You chose ^3131FFWeapon^000000.";
+			mes "The following weapons are available for exchange with the battlefield badges.";
+			mes "Please note that items for ^3131FFBravery Badges are indicated as (BB)^000000, and ^3131FFValor Badges as (VB)^000000.";
+			next;
+			switch(select("Dagger/OneSword/TwoSword/TwoSpear:Staff/Mace/TwoAxe/Shuriken:Bow/Katar/Music/Whip:Book/Knuckle:Revolver/Rifle/Gatling/Shotgun/Launcher")) {
+			case 1:
+				mes "[Erundek]";
+				mes "The following items are available in the ^3131FFDagger, One-Handed Sword, Two-Handed Sword, and Two-Handed Spear^000000 category.";
+				next;
+				switch(select("Brave Assassin's Damascus(BB):Valorous Assassin's Damascus(VB):Brave Gladiator's Blade(BB):Valorous Gladiator's Blade(VB):Brave Assaulter's Katzbalger(BB):Valorous Assaulters's Katzbalger(VB):Assaulter Spear:Assaulter Lance")) {
+				case 1:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],13036,1; //BF_Dagger1
+					break;
+				case 2:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],13037,1; //BF_Dagger2
+					break;
+				case 3:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],13411,1; //BF_Sword2
+					break;
+				case 4:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],13410,1; //BF_Sword1
+					break;
+				case 5:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],1183,1; //BF_Two_Handed_Sword1
+					break;
+				case 6:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],1184,1; //BF_Two_Handed_Sword2
+					break;
+				case 7:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],1425,1; //BF_Spear1
+					break;
+				case 8:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],1482,1; //BF_Lance1
+					break;
+				}
+				break;
+			case 2:
+				mes "[Erundek]";
+				mes "The following items are available in the ^3131FFStaff / Mace / Two-Handed Axe / Huuma Shuriken^000000 category.";
+				next;
+				switch(select("Warlock's Magic Wand(BB):Warlock's Battle Wand(VB):Strong Recovery Wand:Speedy Recovery Wand:Brave Battlefield Morning Star(BB):Valorous Battlefield Morning Star(VB):Insane Battle Axe(BB):Insane Battle Axe(VB):Brave Huuma Front Shuriken(BB):Valorous Huuma Front Shuriken(VB)")) {
+				case 1:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],1632,1; //BF_Staff1
+					break;
+				case 2:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],1633,1; //BF_Staff2
+					break;
+				case 3:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],1634,1; //BF_Staff3
+					break;
+				case 4:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],1635,1; //BF_Staff4
+					break;
+				case 5:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],1543,1; //BF_Morning_Star2
+					break;
+				case 6:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],1542,1; //BF_Morning_Star1
+					break;
+				case 7:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],1380,1; //BF_Two_Handed_Axe2
+					break;
+				case 8:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],1379,1; //BF_Two_Handed_Axe1
+					break;
+				case 9:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],13305,1; //BF_Huuma_Shuriken1
+					break;
+				case 10:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],13306,1; //BF_Huuma_Shuriken2
+					break;
+				}
+				break;
+			case 3:
+				mes "[Erundek]";
+				mes "The following weapons are available in the ^3131FFBow / Katar / Musical Instrument / Whip^000000 category.";
+				next;
+				switch(select("Brave Battle CrossBow(BB):Valorous Battle CrossBow(VB):Brave Carnage Katar(BB):Valorous Carnage Katar(VB):Brave Battlefield Guitar(BB):Valorous Battlefield Guitar(VB):Brave Battle Lariat(BB):Valorous Battle Lariat(VB)")) {
+				case 1:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],1739,1; //BF_Bow2
+					break;
+				case 2:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],1738,1; //BF_Bow1
+					break;
+				case 3:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],1279,1; //BF_Katar1
+					break;
+				case 4:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],1280,1; //BF_Katar2
+					break;
+				case 5:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],1924,1; //BF_Instrument2
+					break;
+				case 6:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],1923,1; //BF_Instrument1
+					break;
+				case 7:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],1978,1; //BF_Whip2
+					break;
+				case 8:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],1977,1; //BF_Whip1
+					break;
+				}
+				break;
+			case 4:
+				mes "[Erundek]";
+				mes "The following weapons are available in the ^3131FFBook / Knuckle^000000 category.";
+				next;
+				switch(select("Brave Battle Strategy Book(BB):Valorous Battle Strategy Book(VB):Brave Battle Fist(BB):Valorous Battle Fist(VB)")) {
+				case 1:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],1574,1; //BF_Book1
+					break;
+				case 2:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],1575,1; //BF_Book2
+					break;
+				case 3:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],1824,1; //BF_Knuckle2
+					break;
+				case 4:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],1823,1; //BF_Knuckle1
+					break;
+				}
+				break;
+			case 5:
+				mes "[Erundek]";
+				mes "The following weapons are available in the ^3131FFRevolver / Rifle / Gatling Gun / Shotgun / Grenade Launcher^000000 category.";
+				next;
+				switch(select("Soldier Revolver:Soldier Rifle:Soldier Gatling Gun:Soldier Shotgun:Soldier Grenade Launcher")) {
+				case 1:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],13108,1; //BF_Pistol1
+					break;
+				case 2:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],13171,1; //BF_Rifle1
+					break;
+				case 3:
+					setarray .@cost[0],7828,100; //BF_Badge1
+					setarray .@item[0],13172,1; //BF_Gatling_Gun1
+					break;
+				case 4:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],13173,1; //BF_Shotgun1
+					break;
+				case 5:
+					setarray .@cost[0],7829,100; //BF_Badge2
+					setarray .@item[0],13174,1; //BF_Launcher1
+					break;
+				}
+				break;
+			}
+			if (.@cost[0] == 7829)
+				set .@type$,"(VB)";
+			else 
+v				set .@type$,"(BB)";
+			mes "[Erundek]";
+			mes "You chose ^3131FF"+getitemname(.@item[0])+""+.@type$+"^000000.";
+			mes "You can exchange for this item with ^FF0000"+.@cost[1]+" "+getitemname(.@cost[0])+"^000000.";
+			mes "Would you like to exchange?";
+			next;
+			switch(select("Do not exchange:Exchange")) {
+			case 1:
+				mes "[Erundek]";
+				mes "Do you need more time to check the items?";
+				break;
+			case 2:
+				mes "[Erundek]";
+				mes "Would you like to spend ^FF0000"+.@cost[1]+" "+getitemname(.@cost[0])+"^000000 and receive an ^3131FF"+getitemname(.@item[0])+""+.@type$+"^000000?";
+				next;
+				mes "[Erundek]";
+				mes "Remember, Battleground Reward Items are ^FF0000Character Bound^000000. Are you sure you want this item?";
+				next;
+				switch(select("Yes:No")) {
+				case 1:
+					if (countitem(.@cost[0]) >= .@cost[1]) {
+						mes "[Erundek]";
+						mes "Thank you for exchanging.";
+						delitem .@cost[0],.@cost[1];
+						getitem .@item[0],.@item[1];
+					}
+					else {
+						mes "[Erundek]";
+						mes "I'm sorry, but you don't have enough badges to exchange.";
+					}
+					break;
+				case 2:
+					mes "[Erundek]";
+					mes "Do you need more time to check out the items?";
+					break;
+				}
+				break;
+			}
+			close;
+		case 2:
+			mes "[Erundek]";
+			mes "You chose ^3131FFArmor^000000.";
+			mes "The following armors are available for exchange with the battlefield badges.";
+			next;
+			switch(select("Garments / Shoes:Armor")) {
+			case 1:
+				switch(select("Captain's Manteau:Commander's Manteau:Sheriff's Manteau:Battle Greave:Combat Boots:Battle Boots")) {
+				case 1:
+					setarray .@cost[0],7828,50,7829,50; //BF_Badge1
+					setarray .@item[0],2538,1; //Commander_Manteau
+					break;
+				case 2:
+					setarray .@cost[0],7828,50,7829,50; //BF_Badge1
+					setarray .@item[0],2539,1; //Commander_Manteau_
+					break;
+				case 3:
+					setarray .@cost[0],7828,50,7829,50; //BF_Badge1
+					setarray .@item[0],2540,1; //Sheriff_Manteau
+					break;
+				case 4:
+					setarray .@cost[0],7828,50,7829,50; //BF_Badge1
+					setarray .@item[0],2435,1; //Battle_Greave
+					break;
+				case 5:
+					setarray .@cost[0],7828,50,7829,50; //BF_Badge1
+					setarray .@item[0],2436,1; //Combat_Boots
+					break;
+				case 6:
+					setarray .@cost[0],7828,50,7829,50; //BF_Badge1
+					setarray .@item[0],2437,1; //Battle_Boots
+					break;
+				}
+				break;
+			case 2:
+				switch(select("Assaulter Plate:Elite Engineer Armor:Assassin Robe:Warlock's Battle Robe:Medic's Robe:Elite Archer Suit:Elite Shooter Suit")) {
+				case 1:
+					setarray .@cost[0],7828,80,7829,80; //BF_Badge1
+					setarray .@item[0],2376,1; //Assaulter_Plate
+					break;
+				case 2:
+					setarray .@cost[0],7828,80,7829,80; //BF_Badge1
+					setarray .@item[0],2377,1; //Elite_Engineer_Armor
+					break;
+				case 3:
+					setarray .@cost[0],7828,80,7829,80; //BF_Badge1
+					setarray .@item[0],2378,1; //Assassin_Robe
+					break;
+				case 4:
+					setarray .@cost[0],7828,80,7829,80; //BF_Badge1
+					setarray .@item[0],2379,1; //Warlock_Battle_Robe
+					break;
+				case 5:
+					setarray .@cost[0],7828,80,7829,80; //BF_Badge1
+					setarray .@item[0],2380,1; //Medic_Robe
+					break;
+				case 6:
+					setarray .@cost[0],7828,80,7829,80; //BF_Badge1
+					setarray .@item[0],2381,1; //Elite_Archer_Suit
+					break;
+				case 7:
+					setarray .@cost[0],7828,80,7829,80; //BF_Badge1
+					setarray .@item[0],2382,1; //Elite_Shooter_Suit
+					break;
+				}
+				break;
+			}
+			break;
+		case 3:
+			mes "[Erundek]";
+			mes "You chose ^3131FFAccessory^000000.";
+			mes "You can exchange the Medal of Honors with your Badges according to the job classes, as follows:";
+			next;
+			switch(select("Gunslinger:Swordman/Taekwon Master:Thief:Acolyte:Magician:Archer:Merchant")) {
+			case 1:
+				setarray .@cost[0],7828,500,7829,500; //BF_Badge1
+				setarray .@item[0],2733,1; //Medal_Gunner
+				break;
+			case 2:
+				setarray .@cost[0],7828,500,7829,500; //BF_Badge1
+				setarray .@item[0],2720,1; //Medal_Swordman
+				break;
+			case 3:
+				setarray .@cost[0],7828,500,7829,500; //BF_Badge1
+				setarray .@item[0],2721,1; //Medal_Thief
+				break;
+			case 4:
+				setarray .@cost[0],7828,500,7829,500; //BF_Badge1
+				setarray .@item[0],2722,1; //Medal_Acolyte
+				break;
+			case 5:
+				setarray .@cost[0],7828,500,7829,500; //BF_Badge1
+				setarray .@item[0],2723,1; //Medal_Mage
+				break;
+			case 6:
+				setarray .@cost[0],7828,500,7829,500; //BF_Badge1
+				setarray .@item[0],2724,1; //Medal_Archer
+				break;
+			case 7:
+				setarray .@cost[0],7828,500,7829,500; //BF_Badge1
+				setarray .@item[0],2725,1; //Medal_Merchant
+				break;
+			}
+			break;
 		case 4:
 			mes "[Erundek]";
-			mes "As you wish.";
-			mes "See you later.";
-			close;
-		case 2: // Bravery Badges
-			mes "[Erundek]";
-			mes "So you want to exchange ^0000FFBravery Badges^000000 from the Battle of Tierra Gorge.";
-			mes "What kind of item do you want to exchange?";
+			mes "You chose ^3131FFConsumable^000000.";
+			mes "The following consumable items are available for exchange with the battlefield badges:";
 			next;
-			deletearray .@Item_DB[0],127;
-			set .@Badge, 7828;
-
-			switch( select("Weapons:Garment:Footgear:Armor:Accessory") )
-			{
-				case 1: setarray .@Item_DB[0],13036,13411,1425,1632,1634,1543,1924,1978,1574,1824,1183,1380,13305,1279,1739,13108,13172; set .@Value, 100; break;
-				case 2: setarray .@Item_DB[0],2538,2539,2540; set .@Value, 50; break;
-				case 3: setarray .@Item_DB[0],2435,2436,2437; set .@Value, 50; break;
-				case 4: setarray .@Item_DB[0],2376,2377,2378,2379,2380,2381,2382; set .@Value, 80; break;
-				case 5: setarray .@Item_DB[0],2720,2721,2722,2723,2724,2725,2733; set .@Value, 500; break;
+			switch(select("Tasty Pink Ration:Tasty White Ration:Military Ration A:Military Ration B:Military Ration C")) {
+			case 1:
+				setarray .@cost[0],7828,10,7829,10; //BF_Badge1
+				setarray .@item[0],12269,1; //Tasty_Colonel
+				break;
+			case 2:
+				setarray .@cost[0],7828,10,7829,10; //BF_Badge1
+				setarray .@item[0],12270,1; //Tasty_Major
+				break;
+			case 3:
+				setarray .@cost[0],7828,5,7829,5; //BF_Badge1
+				setarray .@item[0],12271,1; //Mre_A
+				break;
+			case 4:
+				setarray .@cost[0],7828,10,7829,10; //BF_Badge1
+				setarray .@item[0],12272,1; //Mre_B
+				break;
+			case 5:
+				setarray .@cost[0],7828,10,7829,10; //BF_Badge1
+				setarray .@item[0],12273,1; //Mre_C
+				break;
 			}
-			
-			break;
-		case 3: // Valor Badges
-			mes "[Erundek]";
-			mes "So you want to exchange ^FF0000Valor Badges^000000 from the Battle of Flavius.";
-			mes "What kind of item do you want to exchange?";
-			next;
-			deletearray .@Item_DB[0],127;
-			set .@Badge, 7829;
-
-			switch( select("Weapons:Garment:Footgear:Armor:Accessory") )
-			{
-				case 1: setarray .@Item_DB[0],13037,13410,1633,1635,1542,1923,1977,1575,1823,1184,1482,1379,13306,1280,1738,13171,13173,13174; set .@Value, 100; break;
-				case 2: setarray .@Item_DB[0],2538,2539,2540; set .@Value, 50; break;
-				case 3: setarray .@Item_DB[0],2435,2436,2437; set .@Value, 50; break;
-				case 4: setarray .@Item_DB[0],2376,2377,2378,2379,2380,2381,2382; set .@Value, 80; break;
-				case 5: setarray .@Item_DB[0],2720,2721,2722,2723,2724,2725,2733; set .@Value, 500; break;
-			}
-			
 			break;
+		}
+		break;
+	case 2:
+		mes "[Erundek]";
+		mes "We have many items, so please take a look and purchase deliberately.";
+		close2;
+		ReadBook 11010,1;
+		end;
 	}
 
 	mes "[Erundek]";
-	mes "What item do you want to exchange?";
-	mes "If you are not sure, check the catalog.";
+	mes "You chose ^3131FF"+getitemname(.@item[0])+"^000000.";
+	switch(.@item[0]) {
+	case 2720: mes "This item is for Swordman and Taekwon Master Class only."; break;
+	case 2721: mes "This item is for Thief Class only."; break;
+	case 2722: mes "This item is for Acolyte Class only."; break;
+	case 2723: mes "This item is for Magician Class only."; break;
+	case 2724: mes "This item is for Archer Class only."; break;
+	case 2725: mes "This item is for Merchant Class only."; break;
+	case 2733: mes "This item is for Gunslinger only."; break;
+	default: break;
+	}
+	mes "You can exchange for this item with ^FF0000"+.@cost[1]+" "+getitemname(.@cost[0])+" or "+.@cost[3]+" "+getitemname(.@cost[2])+"^000000.";
+	mes "Would you like to exchange?";
 	next;
-
-	set .@Menu$, "";
-	set .@Count, getarraysize(.@Item_DB);
-	for( set .@i, 0; .@i < .@Count; set .@i, .@i + 1 )
-		set .@Menu$, .@Menu$ + getitemname(.@Item_DB[.@i]) + ":";
-
-	set .@Item_ID, .@Item_DB[select(.@Menu$) - 1];
-
-	mes "[Erundek]";
-	mes "Would you like to exchange ^FF0000" + .@Value + " " + getitemname(.@Badge) + "^000000 for a ^0000FF" + getitemname(.@Item_ID) + "^000000?";
-	next;
-	mes "Remember, Battleground Reward Items are ^FF0000Character Bound^000000.";
-	mes "Are you sure you want this item?";
-	next;
-	
-	if( select("Yes:No") == 2 )
-	{
+	switch(select("Do not exchange:Exchange")) {
+	case 1:
 		mes "[Erundek]";
 		mes "Do you need more time to check the items?";
-		close;
-	}
-	
-	if( countitem(.@Badge) < .@Value )
-	{
+		break;
+	case 2:
 		mes "[Erundek]";
-		mes "I'm sorry, but you don't have enough badges to exchange.";
-		close;
+		mes "Which Badge do you want to exchange?";
+		mes "You need ^3131FF"+.@cost[1]+" Badges^000000 to exchange.";
+		next;
+		if (.@item[0] < 12269 || .@item[0] > 12273 ) {
+			mes "[Erundek]";
+			mes "Remember, Battleground Reward Items are ^FF0000Character Bound^000000. Are you sure you want this item?";
+			next;
+		}
+		switch(select("Bravery Badge:Valor Badge:Cancel")) {
+		case 1:
+			if (countitem(.@cost[0]) >= .@cost[1]) {
+				mes "[Erundek]";
+				mes "Thank you for exchanging.";
+				delitem .@cost[0],.@cost[1];
+				getitem .@item[0],.@item[1];
+			}
+			else {
+				mes "[Erundek]";
+				mes "You do not have enough Bravery Badges.";
+			}
+			break;
+		case 2:
+			if (countitem(.@cost[2]) >= .@cost[3]) {
+				mes "[Erundek]";
+				mes "Thank you for exchanging.";
+				delitem .@cost[2],.@cost[3];
+				getitem .@item[0],.@item[1];
+			}
+			else {
+				mes "[Erundek]";
+				mes "You do not have enough Valor Badges.";
+			}
+			break;
+		case 3:
+			mes "[Erundek]";
+			mes "You cancelled the exchange.";
+			break;
+		}
+		break;
 	}
-	
-	delitem .@Badge,.@Value;
-	getitem .@Item_ID,1;
-	mes "[Erundek]";
-	mes "Thank you for exchanging.";
 	close;
 }
diff --git a/npc/battleground/flavius/flavius01.txt b/npc/battleground/flavius/flavius01.txt
new file mode 100644
index 0000000000..66e6db86d5
--- /dev/null
+++ b/npc/battleground/flavius/flavius01.txt
@@ -0,0 +1,759 @@
+//===== eAthena Script ======================================= 
+// BattleGround System - Flavius
+//===== By: ================================================== 
+//= L0ne_W0lf
+//===== Current Version: ===================================== 
+//= 1.0
+//===== Compatible With: ===================================== 
+//= eAthena 1.0
+//===== Description: ========================================= 
+//= [AEGIS Conversion]
+//= Flavius Battleground.
+//= - Winning Team: 9 badges
+//= - Losing Team: 3 badge
+//===== Additional Comments: ================================= 
+//= 1.0 First Version.
+//============================================================
+
+// Waiting Room NPCs
+//============================================================
+bat_room,86,227,4	script	Lieutenant Ator	418,{
+	end;
+OnInit:
+	waitingroom "Battle Station",1,"start#bat_b01::OnReadyCheck",1;
+	end;
+OnEnterBG:
+	set $@FlaviusBG1_id1, waitingroom2bg("bat_b01",10,290,"start#bat_b01::OnGuillaumeQuit","");
+	end;
+}
+
+bat_room,85,204,0	script	Lieutenant Thelokus	414,{
+	end;
+OnInit:
+	waitingroom "Battle Station",1,"start#bat_b01::OnReadyCheck",1;
+	end;
+OnEnterBG:
+	set $@FlaviusBG1_id2, waitingroom2bg("bat_b01",390,10,"start#bat_b01::OnCroixQuit","");
+	end;
+}
+
+bat_room,85,220,0	warp	back_bgroomb02a	1,1,bat_room,154,150
+bat_room,85,211,0	warp	back_bgroomb02b	1,1,bat_room,154,150
+
+bat_room,2,151,3	script	#bat_b01_timer	844,{
+	end;
+
+OnInit:
+OnEnable:
+	initnpctimer;
+	end;
+
+OnStop:
+	stopnpctimer;
+	end;
+
+OnTimer1000:
+	stopnpctimer;
+	initnpctimer;
+	set .@chk_bat_a01,getmapusers("bat_b01");
+	if (.@chk_bat_a01 < 1) {
+		set $@FlaviusBG1, 0;
+		if( $@FlaviusBG1_id1 ) { bg_destroy $@FlaviusBG1_id1; set $@FlaviusBG1_id1, 0; }
+		if( $@FlaviusBG1_id2 ) { bg_destroy $@FlaviusBG1_id2; set $@FlaviusBG1_id2, 0; }
+		donpcevent "start#bat_b01::OnReadyCheck";
+	}
+	end;
+}
+
+
+// Flavius Battleground Engine
+//============================================================
+bat_b01,15,15,3	script	start#bat_b01	844,{
+OnInit:
+	mapwarp "bat_b01","bat_room",154,150;
+	end;
+
+OnReadyCheck:
+	if( $@FlaviusBG1 )
+		end;
+	set .@Guillaume, getwaitingroomstate(0,"Lieutenant Ator");
+	set .@Croix, getwaitingroomstate(0,"Lieutenant Thelokus");
+	if( !.@Guillaume && !.@Croix ) {
+		donpcevent "#bat_b01_timer::OnStop";
+		end;
+	}
+	if( .@Guillaume < 1 || .@Croix < 1 )
+		end;
+	set $@FlaviusBG1, 1;
+	set $@FlaviusBG1_Victory, 0;
+	set $@Croix_ScoreBG1, 0;
+	set $@Guill_ScoreBG1, 0;
+	bg_updatescore "bat_b01",$@Guill_ScoreBG1,$@Croix_ScoreBG1;
+
+	donpcevent "Lieutenant Ator::OnEnterBG";
+	donpcevent "Lieutenant Thelokus::OnEnterBG";
+	donpcevent "OBJ#bat_b01_a::Onkill";
+	donpcevent "OBJ#bat_b01_a::OnEnable";
+	donpcevent "OBJ#bat_b01_b::Onkill";
+	donpcevent "OBJ#bat_b01_b::OnEnable";
+	donpcevent "guardian#bat_b01_a::Onkill";
+	donpcevent "guardian#bat_b01_b::Onkill";
+	donpcevent "guardian#bat_b01_a::OnEnable";
+	donpcevent "guardian#bat_b01_b::OnEnable";
+	donpcevent "cell#bat_b01_a::Onred";
+	donpcevent "cell#bat_b01_b::Onred";
+	donpcevent "time#bat_b01::OnEnable";
+	disablenpc "Guillaume Vintenar#b01_a";
+	disablenpc "Croix Vintenar#b01_b";
+	disablenpc "Vintenar#bat_b01_aover";
+	disablenpc "Vintenar#bat_b01_bover";
+	bg_warp $@FlaviusBG1_id1,"bat_b01",87,75;
+	bg_warp $@FlaviusBG1_id2,"bat_b01",311,224;
+	donpcevent "countdown#bat_b01::OnEnable";
+	initnpctimer;
+	end;
+
+OnReset:
+	donpcevent "OBJ#bat_b01_a::Onkill";
+	donpcevent "OBJ#bat_b01_a::OnEnable";
+	donpcevent "OBJ#bat_b01_b::Onkill";
+	donpcevent "OBJ#bat_b01_b::OnEnable";
+	donpcevent "guardian#bat_b01_a::Onkill";
+	donpcevent "guardian#bat_b01_b::Onkill";
+	donpcevent "guardian#bat_b01_a::OnEnable";
+	donpcevent "guardian#bat_b01_b::OnEnable";
+	donpcevent "cell#bat_b01_a::Onred";
+	donpcevent "cell#bat_b01_b::Onred";
+	donpcevent "time#bat_b01::OnEnable";
+	disablenpc "Guillaume Vintenar#b01_a";
+	disablenpc "Croix Vintenar#b01_b";
+	disablenpc "Vintenar#bat_b01_aover";
+	disablenpc "Vintenar#bat_b01_bover";
+	bg_warp $@FlaviusBG1_id1,"bat_b01",87,75;
+	bg_warp $@FlaviusBG1_id2,"bat_b01",311,224;
+	end;
+
+OnGuillaumeQuit:
+OnCroixQuit:
+	bg_leave;
+	end;
+
+OnTimer10000:
+	stopnpctimer;
+	donpcevent "#bat_b01_timer::OnEnable";
+	end;
+}
+
+bat_b01,1,1,3	script	OBJ#bat_b01_a	844,{
+OnEnable:
+	bg_monster $@FlaviusBG1_id1,"bat_b01",61,150,"Blue Crystal",1915,"OBJ#bat_b01_a::OnMyMobDead";
+	end;
+
+Onkill:
+	killmonster "bat_b01","OBJ#bat_b01_a::OnMyMobDead";
+	end;
+
+OnMyMobDead:
+	if (mobcount("bat_b01","OBJ#bat_b01_a::OnMyMobDead") < 1) {
+		mapannounce "bat_b01", "Guillaume's Crystal has been destroyed.",bc_map,"0xFFCE00";
+		if ($@Croix_ScoreBG1 > 0) {
+			set $@FlaviusBG1_Victory,2;
+			set $@Croix_ScoreBG1,$@Croix_ScoreBG1+1;
+			enablenpc "Guillaume Vintenar#b01_a";
+			enablenpc "Croix Vintenar#b01_b";
+			donpcevent "time#bat_b01::Onstop";
+		}
+		else {
+			set $@Croix_ScoreBG1,1;
+			donpcevent "time#bat_b01::OnEnable";
+			donpcevent "start#bat_b01::onReset";
+		}
+		donpcevent "#bat_b01_timer::OnStop";
+		bg_updatescore "bat_b01",$@Guill_ScoreBG1,$@Croix_ScoreBG1;
+		bg_warp $@FlaviusBG1_id1,"bat_b01",10,290;
+		bg_warp $@FlaviusBG1_id2,"bat_b01",390,10;
+		donpcevent "#bat_b01_timer::OnEnable";
+	}
+	end;
+}
+
+bat_b01,1,2,3	script	OBJ#bat_b01_b	844,{
+OnEnable:
+	bg_monster $@FlaviusBG1_id2,"bat_b01",328,150,"Blue Crystal",1914,"OBJ#bat_b01_b::OnMyMobDead";
+	end;
+
+Onkill:
+	killmonster "bat_b01","OBJ#bat_b01_b::OnMyMobDead";
+	end;
+
+OnMyMobDead:
+	if (mobcount("bat_b01","OBJ#bat_b01_b::OnMyMobDead") < 1) {
+		mapannounce "bat_b01", "Croix's Crystal has been destroyed.",bc_map,"0xFFCE00";
+		if ($@Guill_ScoreBG1 > 0) {
+			set $@FlaviusBG1_Victory,1;
+			set $@Guill_ScoreBG1,$@Guill_ScoreBG1+1;
+			enablenpc "Guillaume Vintenar#b01_a";
+			enablenpc "Croix Vintenar#b01_b";
+			donpcevent "time#bat_b01::Onstop";
+		}
+		else {
+			set $@Guill_ScoreBG1,1;
+			donpcevent "time#bat_b01::OnEnable";
+			donpcevent "start#bat_b01::onReset";
+		}
+		donpcevent "#bat_b01_timer::OnStop";
+		bg_updatescore "bat_b01",$@Guill_ScoreBG1,$@Croix_ScoreBG1;
+		bg_warp $@FlaviusBG1_id1,"bat_b01",10,290;
+		bg_warp $@FlaviusBG1_id2,"bat_b01",390,10;
+		donpcevent "#bat_b01_timer::OnEnable";
+	}
+	end;
+}
+
+bat_b01,1,3,3	script	guardian#bat_b01_a	844,{
+OnEnable:
+	bg_monster $@FlaviusBG1_id1,"bat_b01",108,159,"Guillaume Camp Guardian",1949,"guardian#bat_b01_a::OnMyMobDead";
+	bg_monster $@FlaviusBG1_id1,"bat_b01",108,141,"Guillaume Camp Guardian",1949,"guardian#bat_b01_a::OnMyMobDead";
+	end;
+
+Onkill:
+	killmonster "bat_b01","guardian#bat_b01_a::OnMyMobDead";
+	end;
+
+OnMyMobDead:
+	if (mobcount("bat_b01","guardian#bat_b01_a::OnMyMobDead") < 1) {
+		donpcevent "cell#bat_b01_a::Ongreen";
+		mapannounce "bat_b01", "The Guardian protecting Guillaume's Crystal has been slain.",bc_map,"0xFFCE00";
+	}
+	end;
+}
+
+bat_b01,1,3,3	script	guardian#bat_b01_b	844,{
+OnEnable:
+	bg_monster $@FlaviusBG1_id2,"bat_b01",307,160,"Croix Camp Guardian",1949,"guardian#bat_b01_b::OnMyMobDead";
+	bg_monster $@FlaviusBG1_id2,"bat_b01",307,138,"Croix Camp Guardian",1949,"guardian#bat_b01_b::OnMyMobDead";
+	end;
+
+Onkill:
+	killmonster "bat_b01","guardian#bat_b01_b::OnMyMobDead";
+	end;
+
+OnMyMobDead:
+	if (mobcount("bat_b01","guardian#bat_b01_b::OnMyMobDead") < 1) {
+		donpcevent "cell#bat_b01_b::Ongreen";
+		mapannounce "bat_b01", "The Guardian protecting Croix's Crystal has been slain.",bc_map,"0xFFCE00";
+	}
+	end;
+}
+
+bat_b01,1,4,3	script	cell#bat_b01_a	844,{
+Onred:
+	setwall "bat_b01",60,149,2,6,0,"Guillaume_wall1-1";
+	setwall "bat_b01",62,149,2,0,0,"Guillaume_wall1-2";
+	setwall "bat_b01",62,151,2,2,0,"Guillaume_wall1-3";
+	setwall "bat_b01",60,151,2,4,0,"Guillaume_wall1-4";
+	end;
+
+Ongreen:
+	delwall "Guillaume_wall1-1";
+	delwall "Guillaume_wall1-2";
+	delwall "Guillaume_wall1-3";
+	delwall "Guillaume_wall1-4";
+	end;
+}
+
+bat_b01,1,5,3	script	cell#bat_b01_b	844,{
+Onred:
+	setwall "bat_b01",327,149,2,6,0,"Croix_wall1-1";
+	setwall "bat_b01",329,149,2,0,0,"Croix_wall1-2";
+	setwall "bat_b01",329,151,2,2,0,"Croix_wall1-3";
+	setwall "bat_b01",327,151,2,4,0,"Croix_wall1-4";
+	end;
+
+Ongreen:
+	delwall "Croix_wall1-1";
+	delwall "Croix_wall1-2";
+	delwall "Croix_wall1-3";
+	delwall "Croix_wall1-4";
+	end;
+}
+
+bat_b01,1,6,1	script	time#bat_b01	844,{
+OnEnable:
+	donpcevent "Battle Therapist#b01_a::OnEnable";
+	donpcevent "Battle Therapist#b01_b::OnEnable";
+	end;
+
+Onstop:
+	donpcevent "Battle Therapist#b01_a::OnStop";
+	donpcevent "Battle Therapist#b01_b::OnStop";
+	end;
+}
+
+bat_b01,10,294,3	script	Battle Therapist#b01_a	95,{
+	specialeffect2 EF_HEAL;
+	mes "[Battle Therapist]";
+	mes "Just close your eyes,";
+	mes "and take a deep breath.";
+	mes "You can be free from pain.";
+	close;
+
+OnTimer25000:
+	specialeffect EF_SANCTUARY;
+	enablenpc "bat_b01_rp1_a_warp";
+	end;
+
+OnTimer26000:
+	disablenpc "bat_b01_rp1_a_warp";
+	end;
+
+OnTimer26500:
+	stopnpctimer;
+	donpcevent "Battle Therapist#b01_a::onEnable";
+	end;
+
+OnEnable:
+	initnpctimer;
+	enablenpc "Battle Therapist#b01_a";
+	end;
+
+Onstop:
+	disablenpc "bat_b01_rp1_a_warp";
+	disablenpc "Battle Therapist#b01_a";
+	stopnpctimer;
+	end;
+}
+
+bat_b01,10,290,0	script	bat_b01_rp1_a_warp	45,10,10,{
+OnInit:
+	disablenpc "bat_b01_rp1_a_warp";
+	end;
+
+OnTouch:
+	percentheal 100,100;
+	warp "bat_b01",87,73;
+	end;
+}
+
+bat_b01,389,14,3	script	Battle Therapist#b01_b	95,{
+	specialeffect2 EF_HEAL;
+	mes "[Battle Therapist]";
+	mes "Just close your eyes,";
+	mes "and take a deep breath.";
+	mes "You can be free from pain.";
+	close;
+
+OnTimer25000:
+	specialeffect EF_SANCTUARY;
+	enablenpc "bat_b01_rp1_b_warp";
+	end;
+
+OnTimer26000:
+	disablenpc "bat_b01_rp1_b_warp";
+	end;
+
+OnTimer26500:
+	stopnpctimer;
+	donpcevent "Battle Therapist#b01_b::OnEnable";
+	end;
+
+OnEnable:
+	initnpctimer;
+	enablenpc "Battle Therapist#b01_b";
+	end;
+
+Onstop:
+	disablenpc "bat_b01_rp1_b_warp";
+	disablenpc "Battle Therapist#b01_b";
+	stopnpctimer;
+	end;
+}
+
+bat_b01,389,10,0	script	bat_b01_rp1_b_warp	45,9,9,{
+OnInit:
+	disablenpc "bat_b01_rp1_a_warp";
+	end;
+
+OnTouch:
+	percentheal 100,100;
+	warp "bat_b01",312,225;
+	end;
+}
+
+bat_b01,87,76,0	script	A_CODE#bat_b01	-1,5,5,{
+OnTouch:
+	if (checkquest(2070) < 0)
+		setquest 2070;
+	end;
+}
+
+bat_b01,312,224,0	script	B_CODE#bat_b01	-1,5,5,{
+OnTouch:
+	if (checkquest(2070) < 0)
+		setquest 2070;
+	end;
+}
+
+bat_b01,10,294,3	script	Guillaume Vintenar#b01_a	934,{
+	if ($@FlaviusBG1_id1 == getcharid(4)) {
+		if ($@FlaviusBG1_Victory == 1) {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 8) {
+				mes "[Axl Rose]";
+				mes "Blessed Guillaume!";
+				mes "Let's enjoy our glorious victory!";
+				mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+				close2;
+				getitem 7829,9; //BF_Badge2
+			}
+			else {
+				mes "[Axl Rose]";
+				mes "Blessed Guillaume!";
+				mes "Let's enjoy our glorious victory!";
+				mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+		else {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 2) {
+				mes "[Axl Rose]";
+				mes "You lost, but you're dedicated to this battle.";
+				mes "This is a reward for your great dedication by Guillaume Marollo!";
+				mes "Just take this defeat as a lesson, next time you will definitely win.";
+				close2;
+				getitem 7829,3; //BF_Badge2
+			}
+			else {
+				mes "[Axl Rose]";
+				mes "You lost, but you're dedicated to this battle.";
+				mes "This is a reward for your great dedication by Guillaume Marollo!";
+				mes "Just take this defeat as a lesson, next time you will definitely win.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+	}
+	bg_leave;
+	warp "bat_room",154,150;
+	end;
+
+OnInit:
+	disablenpc "Guillaume Vintenar#b01_a";
+	end;
+}
+
+bat_b01,389,14,3	script	Croix Vintenar#b01_b	934,{
+	if ($@FlaviusBG1_id2 == getcharid(4)) {
+		if ($@FlaviusBG1_Victory == 2) {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 8) {
+				mes "[Swandery]";
+				mes "Blessed Croix!";
+				mes "Let's enjoy our glorious victory!";
+				mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+				close2;
+				getitem 7829,9; //BF_Badge2
+			}
+			else {
+				mes "[Swandery]";
+				mes "Blessed Croix!";
+				mes "Let's enjoy our glorious victory!";
+				mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+		else {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 2) {
+				mes "[Swandery]";
+				mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+				mes "Even though we didn't win, we did our best.";
+				mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+				close2;
+				getitem 7829,3; //BF_Badge2
+			}
+			else {
+				mes "[Swandery]";
+				mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+				mes "Even though we didn't win, we did our best.";
+				mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+	}
+	bg_leave;
+	warp "bat_room",154,150;
+	end;
+
+OnInit:
+	disablenpc "Croix Vintenar#b01_b";
+	end;
+}
+
+bat_b01,1,5,3	script	countdown#bat_b01	844,{
+OnInit:
+	stopnpctimer;
+	end;
+
+OnEnable:
+	stopnpctimer;
+	initnpctimer;
+	end;
+
+Onstop:
+	stopnpctimer;
+	end;
+
+OnTimer7000:
+	mapannounce "bat_b01", "Guillaume Vintenar Axl Rose : Let's attack to destroy that Crystal!",bc_map,"0xFF9900";
+	end;
+
+OnTimer8000:
+	mapannounce "bat_b01", "Croix Vintenar Swandery : Even though Guillaume is struggling to win against us, the victory is ours. Let's show them our power.",bc_map,"0xFF99CC";
+	end;
+
+OnTimer1800000:
+	mapannounce "bat_b01", "Marollo VII : Guillaume Marollo, Croix Marollo! And their followers!",bc_map,"0x99CC00";
+	end;
+
+OnTimer1803000:
+	mapannounce "bat_b01", "Marollo VII : Both camps are competitive, so it's hard to judge which team is superior.",bc_map,"0x99CC00";
+	end;
+
+OnTimer1808000:
+	mapannounce "bat_b01", "Marollo VII : This battle of Flavian is such a waste of time. I will decide victory and defeat by your progress.",bc_map,"0x99CC00";
+	end;
+
+OnTimer1822000:
+	mapannounce "bat_b01", "Marollo VII : If you can't accept the results, try again in another valley battle!",bc_map,"0x99CC00";
+	end;
+
+OnTimer1825000:
+	mapannounce "bat_b01", "Axl Rose, Swandery : Yes, sir.",bc_map,"0x99CC00";
+	end;
+
+OnTimer1830000:
+	donpcevent "time#bat_b01::Onstop";
+	bg_warp $@FlaviusBG1_id1,"bat_b01",10,290;
+	bg_warp $@FlaviusBG1_id2,"bat_b01",390,10;
+	enablenpc "Vintenar#bat_b01_aover";
+	enablenpc "Vintenar#bat_b01_bover";
+	end;
+
+OnTimer1900000:
+	mapwarp "bat_b01","bat_room",154,150;
+	donpcevent "countdown#bat_b01::Onstop";
+	end;
+}
+
+bat_b01,81,83,3	script	Guillaume Camp#flag21	973,{ end; }
+bat_b01,94,83,3	script	Guillaume Camp#flag22	973,{ end; }
+bat_b01,81,66,3	script	Guillaume Camp#flag23	973,{ end; }
+bat_b01,94,66,3	script	Guillaume Camp#flag24	973,{ end; }
+bat_b01,139,142,3	script	Guillaume Camp#flag25	973,{ end; }
+bat_b01,139,158,3	script	Guillaume Camp#flag26	973,{ end; }
+bat_b01,110,161,3	script	Guillaume Camp#flag27	973,{ end; }
+bat_b01,110,137,3	script	Guillaume Camp#flag28	973,{ end; }
+bat_b01,63,135,3	script	Guillaume Camp#flag29	973,{ end; }
+bat_b01,63,165,3	script	Guillaume Camp#flag30	973,{ end; }
+bat_b01,10,296,3	script	Guillaume Camp#flag31	973,{ end; }
+
+bat_b01,306,233,3	script	Croix Camp#flag21	974,{ end; }
+bat_b01,317,233,3	script	Croix Camp#flag22	974,{ end; }
+bat_b01,306,216,3	script	Croix Camp#flag23	974,{ end; }
+bat_b01,317,216,3	script	Croix Camp#flag24	974,{ end; }
+bat_b01,257,158,3	script	Croix Camp#flag25	974,{ end; }
+bat_b01,257,141,3	script	Croix Camp#flag26	974,{ end; }
+bat_b01,297,164,3	script	Croix Camp#flag27	974,{ end; }
+bat_b01,297,136,3	script	Croix Camp#flag28	974,{ end; }
+bat_b01,336,161,3	script	Croix Camp#flag29	974,{ end; }
+bat_b01,336,139,3	script	Croix Camp#flag30	974,{ end; }
+bat_b01,389,16,3	script	Croix Camp#flag31	974,{ end; }
+
+bat_b01,10,294,3	script	Vintenar#bat_b01_aover	419,{
+	set .@A_B_gap,$@Guill_ScoreBG1 - $@Croix_ScoreBG1;
+	if ($@FlaviusBG1_id1 == getcharid(4)) {
+		if (.@A_B_gap > 0) {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 8) {
+				mes "[Axl Rose]";
+				mes "Blessed Guillaume!";
+				mes "Let's enjoy our glorious victory!";
+				mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+				close2;
+				getitem 7829,9; //BF_Badge2
+			}
+			else {
+				mes "[Axl Rose]";
+				mes "Blessed Guillaume!";
+				mes "Let's enjoy our glorious victory!";
+				mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+		else if (.@A_B_gap == 0) {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 2) {
+				mes "[Axl Rose]";
+				mes "You lost, but you're dedicated to this battle.";
+				mes "This is a reward for your great dedication by Guillaume Marollo!";
+				mes "Just take this defeat as a lesson, next time you will definitely win.";
+				close2;
+				getitem 7829,3; //BF_Badge2
+			}
+			else {
+				mes "[Axl Rose]";
+				mes "You lost, but you're dedicated to this battle.";
+				mes "This is a reward for your great dedication by Guillaume Marollo!";
+				mes "Just take this defeat as a lesson, next time you will definitely win.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+		else {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 2) {
+				mes "[Axl Rose]";
+				mes "You lost, but you're dedicated to this battle.";
+				mes "This is a reward for your great dedication by Guillaume Marollo!";
+				mes "Just take this defeat as a lesson, next time you will definitely win.";
+				close2;
+				getitem 7829,3; //BF_Badge2
+			}
+			else {
+				mes "[Axl Rose]";
+				mes "You lost, but you're dedicated to this battle.";
+				mes "This is a reward for your great dedication by Guillaume Marollo!";
+				mes "Just take this defeat as a lesson, next time you will definitely win.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+	}
+	else {
+		mes "[Axl Rose]";
+		mes "Why are you here, Croix mercenary? I am definitely sure of victory against foolish Croix such as you. Ha!";
+		close;
+	}
+	bg_leave;
+	warp "bat_room",154,150;
+	end;
+
+OnInit:
+	disablenpc "Vintenar#bat_b01_aover";
+	end;
+}
+
+bat_b01,389,14,3	script	Vintenar#bat_b01_bover	415,{
+	set .@A_B_gap,$@Guill_ScoreBG1 - $@Croix_ScoreBG1;
+	if ($@FlaviusBG1_id2 == getcharid(4)) {
+		if (.@A_B_gap > 0) {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 2) {
+				mes "[Swandery]";
+				mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+				mes "Even though we didn't win, we did our best.";
+				mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+				close2;
+				getitem 7829,3; //BF_Badge2
+			}
+			else {
+				mes "[Swandery]";
+				mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+				mes "Even though we didn't win, we did our best.";
+				mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+		else if (.@A_B_gap == 0) {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 2) {
+				mes "[Swandery]";
+				mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+				mes "Even though we didn't win, we did our best.";
+				mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+				close2;
+				getitem 7829,3; //BF_Badge2
+			}
+			else {
+				mes "[Swandery]";
+				mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+				mes "Even though we didn't win, we did our best.";
+				mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+		else {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 8) {
+				mes "[Swandery]";
+				mes "Blessed Croix!";
+				mes "Let's enjoy our glorious victory!";
+				mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+				close2;
+				getitem 7829,9; //BF_Badge2
+			}
+			else {
+				mes "[Swandery]";
+				mes "Blessed Croix!";
+				mes "Let's enjoy our glorious victory!";
+				mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+	}
+	else {
+		mes "[Swandery]";
+		mes "Why do you come here as a Guillaume? You will be sent to where you should be!";
+		close;
+	}
+	bg_leave;
+	warp "bat_room",154,150;
+	end;
+
+OnInit:
+	disablenpc "Vintenar#bat_b01_bover";
+	end;
+}
+
+/*
+bat_b01,1,10,3	script	Release all#b01	81,{
+	input .@input,0,2000;
+	if (.@input == 0) {
+		mes "Cancelled.";
+		close;
+	}
+	else if (.@input == 1854) {
+		mes "May I help you?";
+		next;
+		switch(select("Release all.:Cancel.")) {
+		case 1:
+			mes "Bye.";
+			close2;
+			mapwarp "bat_b01","bat_room",154,150;
+			end;
+		case 2:
+			mes "Cancelled.";
+			close;
+		}
+	}
+}
+*/
\ No newline at end of file
diff --git a/npc/battleground/flavius/flavius02.txt b/npc/battleground/flavius/flavius02.txt
new file mode 100644
index 0000000000..4aabbc839c
--- /dev/null
+++ b/npc/battleground/flavius/flavius02.txt
@@ -0,0 +1,759 @@
+//===== eAthena Script ======================================= 
+// BattleGround System - Flavius Second
+//===== By: ================================================== 
+//= L0ne_W0lf
+//===== Current Version: ===================================== 
+//= 1.0
+//===== Compatible With: ===================================== 
+//= eAthena 1.0
+//===== Description: ========================================= 
+//= [AEGIS Conversion]
+//= Flavius Battleground.
+//= - Winning Team: 9 badges
+//= - Losing Team: 3 badge
+//===== Additional Comments: ================================= 
+//= 1.0 First Version.
+//============================================================
+
+// Waiting Room NPCs
+//============================================================
+bat_room,142,227,4	script	Lieutenant Huvas	418,{
+	end;
+OnInit:
+	waitingroom "Battle Station",1,"start#bat_b02::OnReadyCheck",1;
+	end;
+OnEnterBG:
+	set $@FlaviusBG2_id1, waitingroom2bg("bat_b02",10,290,"start#bat_b02::OnGuillaumeQuit","");
+	end;
+}
+
+bat_room,142,204,0	script	Lieutenant Yukon	414,{
+	end;
+OnInit:
+	waitingroom "Battle Station",1,"start#bat_b02::OnReadyCheck",1;
+	end;
+OnEnterBG:
+	set $@FlaviusBG2_id2, waitingroom2bg("bat_b02",390,10,"start#bat_b02::OnCroixQuit","");
+	end;
+}
+
+bat_room,141,220,0	warp	back_bgroomb02a	1,1,bat_room,154,150
+bat_room,141,211,0	warp	back_bgroomb02b	1,1,bat_room,154,150
+
+bat_room,2,151,3	script	#bat_b02_timer	844,{
+	end;
+
+OnInit:
+OnEnable:
+	initnpctimer;
+	end;
+
+OnStop:
+	stopnpctimer;
+	end;
+
+OnTimer1000:
+	stopnpctimer;
+	initnpctimer;
+	set .@chk_bat_a01,getmapusers("bat_b02");
+	if (.@chk_bat_a01 < 1) {
+		set $@FlaviusBG2, 0;
+		if( $@FlaviusBG2_id1 ) { bg_destroy $@FlaviusBG2_id1; set $@FlaviusBG2_id1, 0; }
+		if( $@FlaviusBG2_id2 ) { bg_destroy $@FlaviusBG2_id2; set $@FlaviusBG2_id2, 0; }
+		donpcevent "start#bat_b02::OnReadyCheck";
+	}
+	end;
+}
+
+
+// Flavius Battleground Engine
+//============================================================
+bat_b02,15,15,3	script	start#bat_b02	844,{
+OnInit:
+	mapwarp "bat_b02","bat_room",154,150;
+	end;
+
+OnReadyCheck:
+	if( $@FlaviusBG2 )
+		end;
+	set .@Guillaume, getwaitingroomstate(0,"Lieutenant Ator");
+	set .@Croix, getwaitingroomstate(0,"Lieutenant Thelokus");
+	if( !.@Guillaume && !.@Croix ) {
+		donpcevent "#bat_b02_timer::OnStop";
+		end;
+	}
+	if( .@Guillaume < 1 || .@Croix < 1 )
+		end;
+	set $@FlaviusBG2, 1;
+	set $@FlaviusBG2_Victory, 0;
+	set $@Croix_ScoreBG2, 0;
+	set $@Guill_ScoreBG2, 0;
+
+	bg_updatescore "bat_b02",$@Guill_ScoreBG2,$@Croix_ScoreBG2;
+	donpcevent "Lieutenant Ator::OnEnterBG";
+	donpcevent "Lieutenant Thelokus::OnEnterBG";
+	donpcevent "OBJ#bat_b02_a::Onkill";
+	donpcevent "OBJ#bat_b02_a::OnEnable";
+	donpcevent "OBJ#bat_b02_b::Onkill";
+	donpcevent "OBJ#bat_b02_b::OnEnable";
+	donpcevent "guardian#bat_b02_a::Onkill";
+	donpcevent "guardian#bat_b02_b::Onkill";
+	donpcevent "guardian#bat_b02_a::OnEnable";
+	donpcevent "guardian#bat_b02_b::OnEnable";
+	donpcevent "cell#bat_b02_a::Onred";
+	donpcevent "cell#bat_b02_b::Onred";
+	donpcevent "time#bat_b02::OnEnable";
+	disablenpc "Guillaume Vintenar#b02_a";
+	disablenpc "Croix Vintenar#b02_b";
+	disablenpc "Vintenar#bat_b02_aover";
+	disablenpc "Vintenar#bat_b02_bover";
+	bg_warp $@FlaviusBG2_id1,"bat_b02",87,75;
+	bg_warp $@FlaviusBG2_id2,"bat_b02",311,224;
+	donpcevent "countdown#bat_b02::OnEnable";
+	initnpctimer;
+	end;
+
+OnReset:
+	donpcevent "OBJ#bat_b02_a::Onkill";
+	donpcevent "OBJ#bat_b02_a::OnEnable";
+	donpcevent "OBJ#bat_b02_b::Onkill";
+	donpcevent "OBJ#bat_b02_b::OnEnable";
+	donpcevent "guardian#bat_b02_a::Onkill";
+	donpcevent "guardian#bat_b02_b::Onkill";
+	donpcevent "guardian#bat_b02_a::OnEnable";
+	donpcevent "guardian#bat_b02_b::OnEnable";
+	donpcevent "cell#bat_b02_a::Onred";
+	donpcevent "cell#bat_b02_b::Onred";
+	donpcevent "time#bat_b02::OnEnable";
+	disablenpc "Guillaume Vintenar#b02_a";
+	disablenpc "Croix Vintenar#b02_b";
+	disablenpc "Vintenar#bat_b02_aover";
+	disablenpc "Vintenar#bat_b02_bover";
+	bg_warp $@FlaviusBG2_id1,"bat_b02",87,75;
+	bg_warp $@FlaviusBG2_id2,"bat_b02",311,224;
+	end;
+
+OnGuillaumeQuit:
+OnCroixQuit:
+	bg_leave;
+	end;
+
+OnTimer10000:
+	stopnpctimer;
+	donpcevent "#bat_b02_timer::OnEnable";
+	end;
+}
+
+bat_b02,1,1,3	script	OBJ#bat_b02_a	844,{
+OnEnable:
+	bg_monster $@FlaviusBG2_id1,"bat_b02",61,150,"Blue Crystal",1915,"OBJ#bat_b02_a::OnMyMobDead";
+	end;
+
+Onkill:
+	killmonster "bat_b02","OBJ#bat_b02_a::OnMyMobDead";
+	end;
+
+OnMyMobDead:
+	if (mobcount("bat_b02","OBJ#bat_b02_a::OnMyMobDead") < 1) {
+		mapannounce "bat_b02", "Guillaume's Crystal has been destroyed.",bc_map,"0xFFCE00";
+		if ($@Croix_ScoreBG2 > 0) {
+			set $@FlaviusBG2_Victory,2;
+			set $@Croix_ScoreBG2,$@Croix_ScoreBG2+1;
+			enablenpc "Guillaume Vintenar#b02_a";
+			enablenpc "Croix Vintenar#b02_b";
+			donpcevent "time#bat_b02::Onstop";
+		}
+		else {
+			set $@Croix_ScoreBG2,1;
+			donpcevent "time#bat_b02::OnEnable";
+			donpcevent "start#bat_b02::onReset";
+		}
+		donpcevent "#bat_b02_timer::OnStop";
+		bg_updatescore "bat_b02",$@Guill_ScoreBG2,$@Croix_ScoreBG2;
+		bg_warp $@FlaviusBG2_id1,"bat_b02",10,290;
+		bg_warp $@FlaviusBG2_id2,"bat_b02",390,10;
+		donpcevent "#bat_b02_timer::OnEnable";
+	}
+	end;
+}
+
+bat_b02,1,2,3	script	OBJ#bat_b02_b	844,{
+OnEnable:
+	bg_monster $@FlaviusBG2_id2,"bat_b02",328,150,"Blue Crystal",1914,"OBJ#bat_b02_b::OnMyMobDead";
+	end;
+
+Onkill:
+	killmonster "bat_b02","OBJ#bat_b02_b::OnMyMobDead";
+	end;
+
+OnMyMobDead:
+	if (mobcount("bat_b02","OBJ#bat_b02_b::OnMyMobDead") < 1) {
+		mapannounce "bat_b02", "Croix's Crystal has been destroyed.",bc_map,"0xFFCE00";
+		if ($@Guill_ScoreBG2 > 0) {
+			set $@FlaviusBG2_Victory,1;
+			set $@Guill_ScoreBG2,$@Guill_ScoreBG2+1;
+			enablenpc "Guillaume Vintenar#b02_a";
+			enablenpc "Croix Vintenar#b02_b";
+			donpcevent "time#bat_b02::Onstop";
+		}
+		else {
+			set $@Guill_ScoreBG2,1;
+			donpcevent "time#bat_b02::OnEnable";
+			donpcevent "start#bat_b02::onReset";
+		}
+		donpcevent "#bat_b02_timer::OnStop";
+		bg_updatescore "bat_b02",$@Guill_ScoreBG2,$@Croix_ScoreBG2;
+		bg_warp $@FlaviusBG2_id1,"bat_b02",10,290;
+		bg_warp $@FlaviusBG2_id2,"bat_b02",390,10;
+		donpcevent "#bat_b02_timer::OnEnable";
+	}
+	end;
+}
+
+bat_b02,1,3,3	script	guardian#bat_b02_a	844,{
+OnEnable:
+	bg_monster $@FlaviusBG2_id1,"bat_b02",108,159,"Guillaume Camp Guardian",1949,"guardian#bat_b02_a::OnMyMobDead";
+	bg_monster $@FlaviusBG2_id1,"bat_b02",108,141,"Guillaume Camp Guardian",1949,"guardian#bat_b02_a::OnMyMobDead";
+	end;
+
+Onkill:
+	killmonster "bat_b02","guardian#bat_b02_a::OnMyMobDead";
+	end;
+
+OnMyMobDead:
+	if (mobcount("bat_b02","guardian#bat_b02_a::OnMyMobDead") < 1) {
+		donpcevent "cell#bat_b02_a::Ongreen";
+		mapannounce "bat_b02", "The Guardian protecting Guillaume's Crystal has been slain.",bc_map,"0xFFCE00";
+	}
+	end;
+}
+
+bat_b02,1,3,3	script	guardian#bat_b02_b	844,{
+OnEnable:
+	bg_monster $@FlaviusBG2_id2,"bat_b02",307,160,"Croix Camp Guardian",1949,"guardian#bat_b02_b::OnMyMobDead";
+	bg_monster $@FlaviusBG2_id2,"bat_b02",307,138,"Croix Camp Guardian",1949,"guardian#bat_b02_b::OnMyMobDead";
+	end;
+
+Onkill:
+	killmonster "bat_b02","guardian#bat_b02_b::OnMyMobDead";
+	end;
+
+OnMyMobDead:
+	if (mobcount("bat_b02","guardian#bat_b02_b::OnMyMobDead") < 1) {
+		donpcevent "cell#bat_b02_b::Ongreen";
+		mapannounce "bat_b02", "The Guardian protecting Croix's Crystal has been slain.",bc_map,"0xFFCE00";
+	}
+	end;
+}
+
+bat_b02,1,4,3	script	cell#bat_b02_a	844,{
+Onred:
+	setwall "bat_b02",60,149,2,6,0,"Guillaume_wall1-1";
+	setwall "bat_b02",62,149,2,0,0,"Guillaume_wall1-2";
+	setwall "bat_b02",62,151,2,2,0,"Guillaume_wall1-3";
+	setwall "bat_b02",60,151,2,4,0,"Guillaume_wall1-4";
+	end;
+
+Ongreen:
+	delwall "Guillaume_wall1-1";
+	delwall "Guillaume_wall1-2";
+	delwall "Guillaume_wall1-3";
+	delwall "Guillaume_wall1-4";
+	end;
+}
+
+bat_b02,1,5,3	script	cell#bat_b02_b	844,{
+Onred:
+	setwall "bat_b02",327,149,2,6,0,"Croix_wall1-1";
+	setwall "bat_b02",329,149,2,0,0,"Croix_wall1-2";
+	setwall "bat_b02",329,151,2,2,0,"Croix_wall1-3";
+	setwall "bat_b02",327,151,2,4,0,"Croix_wall1-4";
+	end;
+
+Ongreen:
+	delwall "Croix_wall1-1";
+	delwall "Croix_wall1-2";
+	delwall "Croix_wall1-3";
+	delwall "Croix_wall1-4";
+	end;
+}
+
+bat_b02,1,6,1	script	time#bat_b02	844,{
+OnEnable:
+	donpcevent "Battle Therapist#b02_a::OnEnable";
+	donpcevent "Battle Therapist#b02_b::OnEnable";
+	end;
+
+Onstop:
+	donpcevent "Battle Therapist#b02_a::OnStop";
+	donpcevent "Battle Therapist#b02_b::OnStop";
+	end;
+}
+
+bat_b02,10,294,3	script	Battle Therapist#b02_a	95,{
+	specialeffect2 EF_HEAL;
+	mes "[Battle Therapist]";
+	mes "Just close your eyes,";
+	mes "and take a deep breath.";
+	mes "You can be free from pain.";
+	close;
+
+OnTimer25000:
+	specialeffect EF_SANCTUARY;
+	enablenpc "bat_b02_rp1_a_warp";
+	end;
+
+OnTimer26000:
+	disablenpc "bat_b02_rp1_a_warp";
+	end;
+
+OnTimer26500:
+	stopnpctimer;
+	donpcevent "Battle Therapist#b02_a::onEnable";
+	end;
+
+OnEnable:
+	initnpctimer;
+	enablenpc "Battle Therapist#b02_a";
+	end;
+
+Onstop:
+	disablenpc "bat_b02_rp1_a_warp";
+	disablenpc "Battle Therapist#b02_a";
+	stopnpctimer;
+	end;
+}
+
+bat_b02,10,290,0	script	bat_b02_rp1_a_warp	45,10,10,{
+OnInit:
+	disablenpc "bat_b02_rp1_a_warp";
+	end;
+
+OnTouch:
+	percentheal 100,100;
+	warp "bat_b02",87,73;
+	end;
+}
+
+bat_b02,389,14,3	script	Battle Therapist#b02_b	95,{
+	specialeffect2 EF_HEAL;
+	mes "[Battle Therapist]";
+	mes "Just close your eyes,";
+	mes "and take a deep breath.";
+	mes "You can be free from pain.";
+	close;
+
+OnTimer25000:
+	specialeffect EF_SANCTUARY;
+	enablenpc "bat_b02_rp1_b_warp";
+	end;
+
+OnTimer26000:
+	disablenpc "bat_b02_rp1_b_warp";
+	end;
+
+OnTimer26500:
+	stopnpctimer;
+	donpcevent "Battle Therapist#b02_b::OnEnable";
+	end;
+
+OnEnable:
+	initnpctimer;
+	enablenpc "Battle Therapist#b02_b";
+	end;
+
+Onstop:
+	disablenpc "bat_b02_rp1_b_warp";
+	disablenpc "Battle Therapist#b02_b";
+	stopnpctimer;
+	end;
+}
+
+bat_b02,389,10,0	script	bat_b02_rp1_b_warp	45,9,9,{
+OnInit:
+	disablenpc "bat_b02_rp1_a_warp";
+	end;
+
+OnTouch:
+	percentheal 100,100;
+	warp "bat_b02",312,225;
+	end;
+}
+
+bat_b02,87,76,0	script	A_CODE#bat_b02	-1,5,5,{
+OnTouch:
+	if (checkquest(2070) < 0)
+		//setquest 2070;
+	end;
+}
+
+bat_b02,312,224,0	script	B_CODE#bat_b02	-1,5,5,{
+OnTouch:
+	if (checkquest(2070) < 0)
+		//setquest 2070;
+	end;
+}
+
+bat_b02,10,294,3	script	Guillaume Vintenar#b02_a	934,{
+	if ($@FlaviusBG2_id1 == getcharid(4)) {
+		if ($@FlaviusBG2_Victory == 1) {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 8) {
+				mes "[Axl Rose]";
+				mes "Blessed Guillaume!";
+				mes "Let's enjoy our glorious victory!";
+				mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+				close2;
+				getitem 7829,9; //BF_Badge2
+			}
+			else {
+				mes "[Axl Rose]";
+				mes "Blessed Guillaume!";
+				mes "Let's enjoy our glorious victory!";
+				mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+		else {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 2) {
+				mes "[Axl Rose]";
+				mes "You lost, but you're dedicated to this battle.";
+				mes "This is a reward for your great dedication by Guillaume Marollo!";
+				mes "Just take this defeat as a lesson, next time you will definitely win.";
+				close2;
+				getitem 7829,3; //BF_Badge2
+			}
+			else {
+				mes "[Axl Rose]";
+				mes "You lost, but you're dedicated to this battle.";
+				mes "This is a reward for your great dedication by Guillaume Marollo!";
+				mes "Just take this defeat as a lesson, next time you will definitely win.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+	}
+	bg_leave;
+	warp "bat_room",154,150;
+	end;
+
+OnInit:
+	disablenpc "Guillaume Vintenar#b02_a";
+	end;
+}
+
+bat_b02,389,14,3	script	Croix Vintenar#b02_b	934,{
+	if ($@FlaviusBG2_id2 == getcharid(4)) {
+		if ($@FlaviusBG2_Victory == 2) {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 8) {
+				mes "[Swandery]";
+				mes "Blessed Croix!";
+				mes "Let's enjoy our glorious victory!";
+				mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+				close2;
+				getitem 7829,9; //BF_Badge2
+			}
+			else {
+				mes "[Swandery]";
+				mes "Blessed Croix!";
+				mes "Let's enjoy our glorious victory!";
+				mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+		else {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 2) {
+				mes "[Swandery]";
+				mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+				mes "Even though we didn't win, we did our best.";
+				mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+				close2;
+				getitem 7829,3; //BF_Badge2
+			}
+			else {
+				mes "[Swandery]";
+				mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+				mes "Even though we didn't win, we did our best.";
+				mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+	}
+	bg_leave;
+	warp "bat_room",154,150;
+	end;
+
+OnInit:
+	disablenpc "Croix Vintenar#b02_b";
+	end;
+}
+
+bat_b02,1,5,3	script	countdown#bat_b02	844,{
+OnInit:
+	stopnpctimer;
+	end;
+
+OnEnable:
+	stopnpctimer;
+	initnpctimer;
+	end;
+
+Onstop:
+	stopnpctimer;
+	end;
+
+OnTimer7000:
+	mapannounce "bat_b02", "Guillaume Vintenar Axl Rose : Let's attack to destroy that Crystal!",bc_map,"0xFF9900";
+	end;
+
+OnTimer8000:
+	mapannounce "bat_b02", "Croix Vintenar Swandery : Even though Guillaume is struggling to win against us, the victory is ours. Let's show them our power.",bc_map,"0xFF99CC";
+	end;
+
+OnTimer1800000:
+	mapannounce "bat_b02", "Marollo VII : Guillaume Marollo, Croix Marollo! And their followers!",bc_map,"0x99CC00";
+	end;
+
+OnTimer1803000:
+	mapannounce "bat_b02", "Marollo VII : Both camps are competitive, so it's hard to judge which team is superior.",bc_map,"0x99CC00";
+	end;
+
+OnTimer1808000:
+	mapannounce "bat_b02", "Marollo VII : This battle of Flavian is such a waste of time. I will decide victory and defeat by your progress.",bc_map,"0x99CC00";
+	end;
+
+OnTimer1822000:
+	mapannounce "bat_b02", "Marollo VII : If you can't accept the results, try again in another valley battle!",bc_map,"0x99CC00";
+	end;
+
+OnTimer1825000:
+	mapannounce "bat_b02", "Axl Rose, Swandery : Yes, sir.",bc_map,"0x99CC00";
+	end;
+
+OnTimer1830000:
+	donpcevent "time#bat_b02::Onstop";
+	bg_warp $@FlaviusBG2_id1,"bat_b02",10,290;
+	bg_warp $@FlaviusBG2_id2,"bat_b02",390,10;
+	enablenpc "Vintenar#bat_b02_aover";
+	enablenpc "Vintenar#bat_b02_bover";
+	end;
+
+OnTimer1900000:
+	mapwarp "bat_b02","bat_room",154,150;
+	donpcevent "countdown#bat_b02::Onstop";
+	end;
+}
+
+bat_b02,81,83,3	script	Guillaume Camp#flag32	973,{ end; }
+bat_b02,94,83,3	script	Guillaume Camp#flag33	973,{ end; }
+bat_b02,81,66,3	script	Guillaume Camp#flag34	973,{ end; }
+bat_b02,94,66,3	script	Guillaume Camp#flag35	973,{ end; }
+bat_b02,139,142,3	script	Guillaume Camp#flag36	973,{ end; }
+bat_b02,139,158,3	script	Guillaume Camp#flag37	973,{ end; }
+bat_b02,110,161,3	script	Guillaume Camp#flag38	973,{ end; }
+bat_b02,110,137,3	script	Guillaume Camp#flag39	973,{ end; }
+bat_b02,63,135,3	script	Guillaume Camp#flag40	973,{ end; }
+bat_b02,63,165,3	script	Guillaume Camp#flag41	973,{ end; }
+bat_b02,10,296,3	script	Guillaume Camp#flag42	973,{ end; }
+
+bat_b02,306,233,3	script	Croix Camp#flag32	974,{ end; }
+bat_b02,317,233,3	script	Croix Camp#flag33	974,{ end; }
+bat_b02,306,216,3	script	Croix Camp#flag34	974,{ end; }
+bat_b02,317,216,3	script	Croix Camp#flag35	974,{ end; }
+bat_b02,257,158,3	script	Croix Camp#flag36	974,{ end; }
+bat_b02,257,141,3	script	Croix Camp#flag37	974,{ end; }
+bat_b02,297,164,3	script	Croix Camp#flag38	974,{ end; }
+bat_b02,297,136,3	script	Croix Camp#flag39	974,{ end; }
+bat_b02,336,161,3	script	Croix Camp#flag40	974,{ end; }
+bat_b02,336,139,3	script	Croix Camp#flag41	974,{ end; }
+bat_b02,389,16,3	script	Croix Camp#flag42	974,{ end; }
+
+bat_b02,10,294,3	script	Vintenar#bat_b02_aover	419,{
+	set .@A_B_gap,$@Guill_ScoreBG2 - $@Croix_ScoreBG2;
+	if ($@FlaviusBG2_id1 == getcharid(4)) {
+		if (.@A_B_gap > 0) {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 8) {
+				mes "[Axl Rose]";
+				mes "Blessed Guillaume!";
+				mes "Let's enjoy our glorious victory!";
+				mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+				close2;
+				getitem 7829,9; //BF_Badge2
+			}
+			else {
+				mes "[Axl Rose]";
+				mes "Blessed Guillaume!";
+				mes "Let's enjoy our glorious victory!";
+				mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+		else if (.@A_B_gap == 0) {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 2) {
+				mes "[Axl Rose]";
+				mes "You lost, but you're dedicated to this battle.";
+				mes "This is a reward for your great dedication by Guillaume Marollo!";
+				mes "Just take this defeat as a lesson, next time you will definitely win.";
+				close2;
+				getitem 7829,3; //BF_Badge2
+			}
+			else {
+				mes "[Axl Rose]";
+				mes "You lost, but you're dedicated to this battle.";
+				mes "This is a reward for your great dedication by Guillaume Marollo!";
+				mes "Just take this defeat as a lesson, next time you will definitely win.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+		else {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 2) {
+				mes "[Axl Rose]";
+				mes "You lost, but you're dedicated to this battle.";
+				mes "This is a reward for your great dedication by Guillaume Marollo!";
+				mes "Just take this defeat as a lesson, next time you will definitely win.";
+				close2;
+				getitem 7829,3; //BF_Badge2
+			}
+			else {
+				mes "[Axl Rose]";
+				mes "You lost, but you're dedicated to this battle.";
+				mes "This is a reward for your great dedication by Guillaume Marollo!";
+				mes "Just take this defeat as a lesson, next time you will definitely win.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+	}
+	else {
+		mes "[Axl Rose]";
+		mes "Why are you here, Croix mercenary? I am definitely sure of victory against foolish Croix such as you. Ha!";
+		close;
+	}
+	bg_leave;
+	warp "bat_room",154,150;
+	end;
+
+OnInit:
+	disablenpc "Vintenar#bat_b02_aover";
+	end;
+}
+
+bat_b02,389,14,3	script	Vintenar#bat_b02_bover	415,{
+	set .@A_B_gap,$@Guill_ScoreBG2 - $@Croix_ScoreBG2;
+	if ($@FlaviusBG2_id2 == getcharid(4)) {
+		if (.@A_B_gap > 0) {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 2) {
+				mes "[Swandery]";
+				mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+				mes "Even though we didn't win, we did our best.";
+				mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+				close2;
+				getitem 7829,3; //BF_Badge2
+			}
+			else {
+				mes "[Swandery]";
+				mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+				mes "Even though we didn't win, we did our best.";
+				mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+		else if (.@A_B_gap == 0) {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 2) {
+				mes "[Swandery]";
+				mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+				mes "Even though we didn't win, we did our best.";
+				mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+				close2;
+				getitem 7829,3; //BF_Badge2
+			}
+			else {
+				mes "[Swandery]";
+				mes "Oh, "+strcharinfo(0)+". Don't be sad.";
+				mes "Even though we didn't win, we did our best.";
+				mes "This is a Royal gift from Croix, and please don't forget this battle. We will win the next one.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+		else {
+			set .@your_medal,countitem(7829);
+			set .@medal_gap,500 - .@your_medal;
+			if (.@medal_gap > 8) {
+				mes "[Swandery]";
+				mes "Blessed Croix!";
+				mes "Let's enjoy our glorious victory!";
+				mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+				close2;
+				getitem 7829,9; //BF_Badge2
+			}
+			else {
+				mes "[Swandery]";
+				mes "Blessed Croix!";
+				mes "Let's enjoy our glorious victory!";
+				mes ""+strcharinfo(0)+", it's a sign reflecting victory.";
+				close2;
+				getitem 7829,.@medal_gap; //BF_Badge2
+			}
+		}
+	}
+	else {
+		mes "[Swandery]";
+		mes "Why do you come here as a Guillaume? You will be sent to where you should be!";
+		close;
+	}
+	bg_leave;
+	warp "bat_room",154,150;
+	end;
+
+OnInit:
+	disablenpc "Vintenar#bat_b02_bover";
+	end;
+}
+
+/*
+bat_b02,1,10,3	script	Release all#b02	81,{
+	input .@input,0,2000;
+	if (.@input == 0) {
+		mes "Cancelled.";
+		close;
+	}
+	else if (.@input == 1854) {
+		mes "May I help you?";
+		next;
+		switch(select("Release all.:Cancel.")) {
+		case 1:
+			mes "Bye.";
+			close2;
+			mapwarp "bat_b02","bat_room",154,150;
+			end;
+		case 2:
+			mes "Cancelled.";
+			close;
+		}
+	}
+}
+*/
\ No newline at end of file
diff --git a/npc/battleground/kvm/kvm01.txt b/npc/battleground/kvm/kvm01.txt
index 27f01d47dc..1b8f3cb6c7 100644
--- a/npc/battleground/kvm/kvm01.txt
+++ b/npc/battleground/kvm/kvm01.txt
@@ -60,23 +60,23 @@ OnKvM01Two:
 	end;
 }
 
-bat_c01,54,124,3	duplicate(CellEffect)	#RedcellA1-1	111
-bat_c01,55,124,3	duplicate(CellEffect)	#RedcellA2-1	111
-bat_c01,56,124,3	duplicate(CellEffect)	#RedcellA3-1	111
-bat_c01,57,124,3	duplicate(CellEffect)	#RedcellA4-1	111
-bat_c01,57,125,3	duplicate(CellEffect)	#RedcellA5-1	111
-bat_c01,57,126,3	duplicate(CellEffect)	#RedcellA6-1	111
-bat_c01,57,127,3	duplicate(CellEffect)	#RedcellA7-1	111
+bat_c01,54,124,3	duplicate(CellEffect)	#RedcellA1-1	139
+bat_c01,55,124,3	duplicate(CellEffect)	#RedcellA2-1	139
+bat_c01,56,124,3	duplicate(CellEffect)	#RedcellA3-1	139
+bat_c01,57,124,3	duplicate(CellEffect)	#RedcellA4-1	139
+bat_c01,57,125,3	duplicate(CellEffect)	#RedcellA5-1	139
+bat_c01,57,126,3	duplicate(CellEffect)	#RedcellA6-1	139
+bat_c01,57,127,3	duplicate(CellEffect)	#RedcellA7-1	139
 
-bat_c01,145,59,3	duplicate(CellEffect)	#RedcellB1-1	111
-bat_c01,144,59,3	duplicate(CellEffect)	#RedcellB2-1	111
-bat_c01,143,59,3	duplicate(CellEffect)	#RedcellB3-1	111
-bat_c01,142,59,3	duplicate(CellEffect)	#RedcellB4-1	111
-bat_c01,142,56,3	duplicate(CellEffect)	#RedcellB5-1	111
-bat_c01,142,57,3	duplicate(CellEffect)	#RedcellB6-1	111
-bat_c01,142,58,3	duplicate(CellEffect)	#RedcellB7-1	111
+bat_c01,145,59,3	duplicate(CellEffect)	#RedcellB1-1	139
+bat_c01,144,59,3	duplicate(CellEffect)	#RedcellB2-1	139
+bat_c01,143,59,3	duplicate(CellEffect)	#RedcellB3-1	139
+bat_c01,142,59,3	duplicate(CellEffect)	#RedcellB4-1	139
+bat_c01,142,56,3	duplicate(CellEffect)	#RedcellB5-1	139
+bat_c01,142,57,3	duplicate(CellEffect)	#RedcellB6-1	139
+bat_c01,142,58,3	duplicate(CellEffect)	#RedcellB7-1	139
 
-bat_c01,54,128,3	script	#A_camp_start01	111,4,4,{
+bat_c01,54,128,3	script	#A_camp_start01	139,4,4,{
 	end;
 
 OnInit:
@@ -97,7 +97,7 @@ OnTouch:
 	end;
 }
 
-bat_c01,146,56,3	script	#B_camp_start01	111,4,4,{
+bat_c01,146,56,3	script	#B_camp_start01	139,4,4,{
 	end;
 
 OnInit:
@@ -146,6 +146,10 @@ OnGuillaumeDie:
 		set .Croix_Score, .Croix_Score + 1;
 		bg_updatescore "bat_c01",.Guillaume_Score,.Croix_Score;
 		if( .Guillaume_Count < 1 ) donpcevent "KvM01_BG::OnCroixWin";
+		else {
+			mapannounce "bat_c01", "NUmber of Guillaume survivors "+.Guillaume_Count+".",bc_map,"0x00ff00";
+			mapannounce "bat_c01", "NUmber of Croix survivors "+.Croix_Count+".",bc_map,"0x00ff00";
+		}
 	}
 	end;
 
@@ -158,6 +162,10 @@ OnCroixDie:
 		set .Guillaume_Score, .Guillaume_Score + 1;
 		bg_updatescore "bat_c01",.Guillaume_Score,.Croix_Score;
 		if( .Croix_Count < 1 ) donpcevent "KvM01_BG::OnGuillaumeWin";
+		else {
+			mapannounce "bat_c01", "NUmber of Guillaume survivors "+.Guillaume_Count+".",bc_map,"0x00ff00";
+			mapannounce "bat_c01", "NUmber of Croix survivors "+.Croix_Count+".",bc_map,"0x00ff00";
+		}
 	}
 	end;
 
@@ -426,12 +434,3 @@ bat_c01,148,53,1	script	KVM Officer#KVM01B	415,{
 // MapFlags
 //============================================================
 
-bat_c01	mapflag	battleground	2
-bat_c01	mapflag	nomemo
-bat_c01	mapflag	nosave	SavePoint
-bat_c01	mapflag	noteleport
-bat_c01	mapflag	nowarp
-bat_c01	mapflag	nowarpto
-bat_c01	mapflag	noreturn
-bat_c01	mapflag	nobranch
-bat_c01	mapflag	nopenalty
diff --git a/npc/battleground/kvm/kvm02.txt b/npc/battleground/kvm/kvm02.txt
index 063f34ba6b..11a1c3d474 100644
--- a/npc/battleground/kvm/kvm02.txt
+++ b/npc/battleground/kvm/kvm02.txt
@@ -60,23 +60,23 @@ OnKvM02Two:
 	end;
 }
 
-bat_c02,54,124,3	duplicate(CellEffect2)	#RedcellA1-2	111
-bat_c02,55,124,3	duplicate(CellEffect2)	#RedcellA2-2	111
-bat_c02,56,124,3	duplicate(CellEffect2)	#RedcellA3-2	111
-bat_c02,57,124,3	duplicate(CellEffect2)	#RedcellA4-2	111
-bat_c02,57,125,3	duplicate(CellEffect2)	#RedcellA5-2	111
-bat_c02,57,126,3	duplicate(CellEffect2)	#RedcellA6-2	111
-bat_c02,57,127,3	duplicate(CellEffect2)	#RedcellA7-2	111
+bat_c02,54,124,3	duplicate(CellEffect2)	#RedcellA1-2	139
+bat_c02,55,124,3	duplicate(CellEffect2)	#RedcellA2-2	139
+bat_c02,56,124,3	duplicate(CellEffect2)	#RedcellA3-2	139
+bat_c02,57,124,3	duplicate(CellEffect2)	#RedcellA4-2	139
+bat_c02,57,125,3	duplicate(CellEffect2)	#RedcellA5-2	139
+bat_c02,57,126,3	duplicate(CellEffect2)	#RedcellA6-2	139
+bat_c02,57,127,3	duplicate(CellEffect2)	#RedcellA7-2	139
 
-bat_c02,145,59,3	duplicate(CellEffect2)	#RedcellB1-2	111
-bat_c02,144,59,3	duplicate(CellEffect2)	#RedcellB2-2	111
-bat_c02,143,59,3	duplicate(CellEffect2)	#RedcellB3-2	111
-bat_c02,142,59,3	duplicate(CellEffect2)	#RedcellB4-2	111
-bat_c02,142,56,3	duplicate(CellEffect2)	#RedcellB5-2	111
-bat_c02,142,57,3	duplicate(CellEffect2)	#RedcellB6-2	111
-bat_c02,142,58,3	duplicate(CellEffect2)	#RedcellB7-2	111
+bat_c02,145,59,3	duplicate(CellEffect2)	#RedcellB1-2	139
+bat_c02,144,59,3	duplicate(CellEffect2)	#RedcellB2-2	139
+bat_c02,143,59,3	duplicate(CellEffect2)	#RedcellB3-2	139
+bat_c02,142,59,3	duplicate(CellEffect2)	#RedcellB4-2	139
+bat_c02,142,56,3	duplicate(CellEffect2)	#RedcellB5-2	139
+bat_c02,142,57,3	duplicate(CellEffect2)	#RedcellB6-2	139
+bat_c02,142,58,3	duplicate(CellEffect2)	#RedcellB7-2	139
 
-bat_c02,54,128,3	script	#A_camp_start02	111,4,4,{
+bat_c02,54,128,3	script	#A_camp_start02	139,4,4,{
 	end;
 
 OnInit:
@@ -97,7 +97,7 @@ OnTouch:
 	end;
 }
 
-bat_c02,146,56,3	script	#B_camp_start02	111,4,4,{
+bat_c02,146,56,3	script	#B_camp_start02	139,4,4,{
 	end;
 
 OnInit:
@@ -146,6 +146,10 @@ OnGuillaumeDie:
 		set .Croix_Score, .Croix_Score + 1;
 		bg_updatescore "bat_c02",.Guillaume_Score,.Croix_Score;
 		if( .Guillaume_Count < 1 ) donpcevent "KvM02_BG::OnCroixWin";
+		else {
+			mapannounce "bat_c02", "NUmber of Guillaume survivors "+.Guillaume_Count+".",bc_map,"0x00ff00";
+			mapannounce "bat_c02", "NUmber of Croix survivors "+.Croix_Count+".",bc_map,"0x00ff00";
+		}
 	}
 	end;
 
@@ -158,6 +162,10 @@ OnCroixDie:
 		set .Guillaume_Score, .Guillaume_Score + 1;
 		bg_updatescore "bat_c02",.Guillaume_Score,.Croix_Score;
 		if( .Croix_Count < 1 ) donpcevent "KvM02_BG::OnGuillaumeWin";
+		else {
+			mapannounce "bat_c02", "NUmber of Guillaume survivors "+.Guillaume_Count+".",bc_map,"0x00ff00";
+			mapannounce "bat_c02", "NUmber of Croix survivors "+.Croix_Count+".",bc_map,"0x00ff00";
+		}
 	}
 	end;
 
@@ -423,12 +431,3 @@ bat_c02,148,53,1	script	KVM Officer#KVM02B	415,{
 // MapFlags
 //============================================================
 
-bat_c02	mapflag	battleground	2
-bat_c02	mapflag	nomemo
-bat_c02	mapflag	nosave	SavePoint
-bat_c02	mapflag	noteleport
-bat_c02	mapflag	nowarp
-bat_c02	mapflag	nowarpto
-bat_c02	mapflag	noreturn
-bat_c02	mapflag	nobranch
-bat_c02	mapflag	nopenalty
diff --git a/npc/battleground/kvm/kvm03.txt b/npc/battleground/kvm/kvm03.txt
index 245fefc7dc..ab30a67087 100644
--- a/npc/battleground/kvm/kvm03.txt
+++ b/npc/battleground/kvm/kvm03.txt
@@ -60,23 +60,23 @@ OnKvM03Two:
 	end;
 }
 
-bat_c03,54,124,3	duplicate(CellEffect3)	#RedcellA1-3	111
-bat_c03,55,124,3	duplicate(CellEffect3)	#RedcellA2-3	111
-bat_c03,56,124,3	duplicate(CellEffect3)	#RedcellA3-3	111
-bat_c03,57,124,3	duplicate(CellEffect3)	#RedcellA4-3	111
-bat_c03,57,125,3	duplicate(CellEffect3)	#RedcellA5-3	111
-bat_c03,57,126,3	duplicate(CellEffect3)	#RedcellA6-3	111
-bat_c03,57,127,3	duplicate(CellEffect3)	#RedcellA7-3	111
+bat_c03,54,124,3	duplicate(CellEffect3)	#RedcellA1-3	139
+bat_c03,55,124,3	duplicate(CellEffect3)	#RedcellA2-3	139
+bat_c03,56,124,3	duplicate(CellEffect3)	#RedcellA3-3	139
+bat_c03,57,124,3	duplicate(CellEffect3)	#RedcellA4-3	139
+bat_c03,57,125,3	duplicate(CellEffect3)	#RedcellA5-3	139
+bat_c03,57,126,3	duplicate(CellEffect3)	#RedcellA6-3	139
+bat_c03,57,127,3	duplicate(CellEffect3)	#RedcellA7-3	139
 
-bat_c03,145,59,3	duplicate(CellEffect3)	#RedcellB1-3	111
-bat_c03,144,59,3	duplicate(CellEffect3)	#RedcellB2-3	111
-bat_c03,143,59,3	duplicate(CellEffect3)	#RedcellB3-3	111
-bat_c03,142,59,3	duplicate(CellEffect3)	#RedcellB4-3	111
-bat_c03,142,56,3	duplicate(CellEffect3)	#RedcellB5-3	111
-bat_c03,142,57,3	duplicate(CellEffect3)	#RedcellB6-3	111
-bat_c03,142,58,3	duplicate(CellEffect3)	#RedcellB7-3	111
+bat_c03,145,59,3	duplicate(CellEffect3)	#RedcellB1-3	139
+bat_c03,144,59,3	duplicate(CellEffect3)	#RedcellB2-3	139
+bat_c03,143,59,3	duplicate(CellEffect3)	#RedcellB3-3	139
+bat_c03,142,59,3	duplicate(CellEffect3)	#RedcellB4-3	139
+bat_c03,142,56,3	duplicate(CellEffect3)	#RedcellB5-3	139
+bat_c03,142,57,3	duplicate(CellEffect3)	#RedcellB6-3	139
+bat_c03,142,58,3	duplicate(CellEffect3)	#RedcellB7-3	139
 
-bat_c03,54,128,3	script	#A_camp_start03	111,4,4,{
+bat_c03,54,128,3	script	#A_camp_start03	139,4,4,{
 	end;
 
 OnInit:
@@ -97,7 +97,7 @@ OnTouch:
 	end;
 }
 
-bat_c03,146,56,3	script	#B_camp_start03	111,4,4,{
+bat_c03,146,56,3	script	#B_camp_start03	139,4,4,{
 	end;
 
 OnInit:
@@ -146,6 +146,10 @@ OnGuillaumeDie:
 		set .Croix_Score, .Croix_Score + 1;
 		bg_updatescore "bat_c03",.Guillaume_Score,.Croix_Score;
 		if( .Guillaume_Count < 1 ) donpcevent "KvM03_BG::OnCroixWin";
+		else {
+			mapannounce "bat_c03", "NUmber of Guillaume survivors "+.Guillaume_Count+".",bc_map,"0x00ff00";
+			mapannounce "bat_c03", "NUmber of Croix survivors "+.Croix_Count+".",bc_map,"0x00ff00";
+		}
 	}
 	end;
 
@@ -158,6 +162,10 @@ OnCroixDie:
 		set .Guillaume_Score, .Guillaume_Score + 1;
 		bg_updatescore "bat_c03",.Guillaume_Score,.Croix_Score;
 		if( .Croix_Count < 1 ) donpcevent "KvM03_BG::OnGuillaumeWin";
+		else {
+			mapannounce "bat_c03", "NUmber of Guillaume survivors "+.Guillaume_Count+".",bc_map,"0x00ff00";
+			mapannounce "bat_c03", "NUmber of Croix survivors "+.Croix_Count+".",bc_map,"0x00ff00";
+		}
 	}
 	end;
 
@@ -425,12 +433,3 @@ bat_c03,148,53,1	script	KVM Officer#KVM03B	415,{
 // MapFlags
 //============================================================
 
-bat_c03	mapflag	battleground	2
-bat_c03	mapflag	nomemo
-bat_c03	mapflag	nosave	SavePoint
-bat_c03	mapflag	noteleport
-bat_c03	mapflag	nowarp
-bat_c03	mapflag	nowarpto
-bat_c03	mapflag	noreturn
-bat_c03	mapflag	nobranch
-bat_c03	mapflag	nopenalty
diff --git a/npc/battleground/kvm/kvm_enter.txt b/npc/battleground/kvm/kvm_enter.txt
index 544438534f..c6d50e87a2 100644
--- a/npc/battleground/kvm/kvm_enter.txt
+++ b/npc/battleground/kvm/kvm_enter.txt
@@ -17,14 +17,22 @@
 // KvM Officer - Guillaume
 //============================================================
 bat_room,164,178,5	script	KVM Mercenary Officer#1	418,{
-	set .@permit,checkquest(6026,PLAYTIME);
+	/*
+	set .@kvm,checkquest(6027,PLAYTIME);
+	if ((.@kvm == 0) || (.@kvm == 1)) {
+		mes "[Croix Mercenary Officer]";
+		mes "It seems you ahve recently participated in a KVM battle. You must wait 5 minutes before signing up again.";
+		close;
+	}
+	*/
+	set .@permit,checkquest(6025,PLAYTIME);
 	if ((.@permit == 0) || (.@permit == 1)) {
 		mes "[Guillaume Mercenary Officer]";
 		mes "I know that you've already signed with the Croix. Go back and join their team. We will not accept traitors to fight for us.";
 		close;
 	}
 	else {
-		if (checkquest(6025) >= 0) erasequest 6026;
+		if (checkquest(6025) >= 0) erasequest 6025;
 	}
 	mes "[Guillaume Mercenary Officer]";
 	mes "Let them know the real might of Guillaume!";
@@ -115,6 +123,14 @@ bat_room,167,178,5	script	Guillaume Knight#kvm	417,{
 // KvM Officer - Croix
 //============================================================
 bat_room,164,121,1	script	KVM Mercenary Officer#2	414,{
+	/*
+	set .@kvm,checkquest(6027,PLAYTIME);
+	if ((.@kvm == 0) || (.@kvm == 1)) {
+		mes "[Croix Mercenary Officer]";
+		mes "It seems you ahve recently participated in a KVM battle. You must wait 5 minutes before signing up again.";
+		close;
+	}
+	*/
 	set .@permit,checkquest(6025,PLAYTIME);
 	if ((.@permit == 0) || (.@permit == 1)) {
 		mes "[Croix Mercenary Officer]";
diff --git a/npc/battleground/tierra/tierra01.txt b/npc/battleground/tierra/tierra01.txt
index bdd089d251..6795a23003 100644
--- a/npc/battleground/tierra/tierra01.txt
+++ b/npc/battleground/tierra/tierra01.txt
@@ -44,6 +44,7 @@ OnEnterBG:
 bat_room,1,151,3	script	#bat_a01_timer	844,{
 	end;
 
+onInit:
 OnEnable:
 	initnpctimer;
 	end;
@@ -129,7 +130,7 @@ OnReadyCheck:
 		donpcevent "#bat_a01_timer::OnStop";
 		end;
 	}
-	if( .@Guillaume < 10 || .@Croix < 10 )
+	else if( .@Guillaume < 10 || .@Croix < 10 )
 		end;
 	set $@TierraBG1,1;
 	donpcevent "Lieutenant Kalos::OnEnterBG";
@@ -196,7 +197,7 @@ bat_a01,15,18,3	script	barricade#bat_a01_a	844,{
 OnEnable:
 	for( set .@i,185; .@i < 202; set .@i,.@i+1 )
 		bg_monster $@TierraBG1_id1,"bat_a01",.@i,266,"Barricade",1906,"barricade#bat_a01_a::OnMyMobDead";
-	setwall "bat_a01",185,266,16,6,1,"bat_a01_c1";
+	setwall "bat_a01",185,265,16,6,1,"bat_a01_c1";
 	end;
 
 Onkill:
@@ -218,7 +219,7 @@ bat_a01,15,19,3	script	barricade#bat_a01_b	844,{
 OnEnable:
 	for( set .@i,169; .@i < 186; set .@i,.@i+1 )
 		bg_monster $@TierraBG1_id2,"bat_a01",.@i,129,"Barricade",1906,"barricade#bat_a01_b::OnMyMobDead";
-	setwall "bat_a01",169,129,16,6,1,"bat_a01_g1";
+	setwall "bat_a01",169,130,16,6,1,"bat_a01_g1";
 	end;
 
 Onkill:
diff --git a/npc/battleground/tierra/tierra02.txt b/npc/battleground/tierra/tierra02.txt
index f3b8bc2cd7..fad2e1266a 100644
--- a/npc/battleground/tierra/tierra02.txt
+++ b/npc/battleground/tierra/tierra02.txt
@@ -44,6 +44,7 @@ OnEnterBG:
 bat_room,1,151,3	script	#bat_a02_timer	844,{
 	end;
 
+onInit:
 OnEnable:
 	initnpctimer;
 	end;
@@ -129,7 +130,7 @@ OnReadyCheck:
 		donpcevent "#bat_a02_timer::OnStop";
 		end;
 	}
-	if( .@Guillaume < 10 || .@Croix < 10 )
+	else if( .@Guillaume < 10 || .@Croix < 10 )
 		end;
 	set $@TierraBG2,1;
 	donpcevent "Lieutenant Rundel::OnEnterBG";
@@ -196,7 +197,7 @@ bat_a02,15,18,3	script	barricade#bat_a02_a	844,{
 OnEnable:
 	for( set .@i,185; .@i < 202; set .@i,.@i+1 )
 		bg_monster $@TierraBG2_id1,"bat_a02",.@i,266,"Barricade",1906,"barricade#bat_a02_a::OnMyMobDead";
-	setwall "bat_a02",185,266,16,6,1,"bat_a02_c1";
+	setwall "bat_a02",185,265,16,6,1,"bat_a02_c1";
 	end;
 
 Onkill:
@@ -218,7 +219,7 @@ bat_a02,15,19,3	script	barricade#bat_a02_b	844,{
 OnEnable:
 	for( set .@i,169; .@i < 186; set .@i,.@i+1 )
 		bg_monster $@TierraBG2_id2,"bat_a02",.@i,129,"Barricade",1906,"barricade#bat_a02_b::OnMyMobDead";
-	setwall "bat_a02",169,129,16,6,1,"bat_a02_g1";
+	setwall "bat_a02",169,130,16,6,1,"bat_a02_g1";
 	end;
 
 Onkill:
diff --git a/npc/custom/battleground/bg_common.txt b/npc/custom/battleground/bg_common.txt
new file mode 100644
index 0000000000..db99198946
--- /dev/null
+++ b/npc/custom/battleground/bg_common.txt
@@ -0,0 +1,1327 @@
+// ==============================================================================
+// BattleGround System - Common NPCs
+// ==============================================================================
+
+// BattleGround Warper - Entrance
+// *********************************************************************
+
+payon,189,104,3	script	Maroll Battle Recruiter::BatRecruit	728,{
+	mes "[Maroll Battle Recruiter]";
+	mes "Good day, adventurer.";
+	mes "I'm a knight from a far country called Maroll Kingdom.";
+	next;
+	mes "[Maroll Battle Recruiter]";
+	mes "The two princes of the kingdom are now battling for the throne of Maroll, and are in need of experienced soldiers like you. How would you like to lend your power to one of the princes in the Maroll Kingdom?";
+	next;
+	if( select("Join:Don't Join") == 2 )
+	{
+		mes "[Maroll Battle Recruiter]";
+		mes "I'll always be stationed here for more soldiers. Feel free to come back whenever you're interested.";
+		close;
+	}
+	mes "[Maroll Battle Recruiter]";
+	mes "May the war god bless you.";
+	close2;
+	warp "bat_room",155,150;
+	end;
+}
+
+prontera,123,83,5	duplicate(BatRecruit)	Maroll Battle Recruiter::BatRecruit2	728
+rachel,149,138,5	duplicate(BatRecruit)	Maroll Battle Recruiter::BatRecruit3	728
+moc_ruins,75,162,5	duplicate(BatRecruit)	Maroll Battle Recruiter::BatRecruit4	728
+aldebaran,146,109,5	duplicate(BatRecruit)	Maroll Battle Recruiter::BatRecruit5	728
+lighthalzen,153,86,5	duplicate(BatRecruit)	Maroll Battle Recruiter::BatRecruit6	728
+
+// BattleGround Warper - Exit
+// *********************************************************************
+
+bat_room,148,150,4	script	Teleporter#bat	124,{
+	mes "[Teleporter]";
+	mes "Do you wish to leave the battlefield? Use my service to return to town.";
+	next;
+	if( select("Leave:Don't Leave") == 2 )
+	{
+		mes "[Teleporter]";
+		mes "I'll be here whenever you're in need of my service.";
+		close;
+	}
+
+	set .@spoint$, getsavepoint(0);
+	set .@x, getsavepoint(1);
+	set .@y, getsavepoint(2);
+	mes "[Teleporter]";
+	mes "You will be sent back to " + .@spoint$ + ".";
+	close2;
+	warp .@spoint$, .@x, .@y;
+	end;
+}
+
+// Kafra
+// *********************************************************************
+bat_room,148,147,4	script	Kafra Staff::kaf_bat	861,{
+	cutin "kafra_09",2;
+	callfunc "F_Kafra",0,2,1,150,0;
+}
+
+// General Guillaume
+// *********************************************************************
+bat_room,160,159,3	script	General Guillaume	420,{
+	cutin "bat_kiyom2",2;
+	mes "[General Guillaume]";
+	mes "Hot-blooded adventurer, we need your ability to win this battle.";
+	next;
+	cutin "bat_kiyom1",2;
+	mes "[General Guillaume]";
+	mes "Our great king, Marcel Marollo VII, is very sick lately. His Majesty has declared that he chosen either me or Prince Croix as the next king amongst his 9 sons.";
+	next;
+	mes "[General Guillaume]";
+	mes "Two kings can't share a nation!";
+	mes "Only the one victorious from His Majesty's appointed battle will be enthroned.";
+	next;
+	mes "[General Guillaume]";
+	mes "This is however, not just a battle between us. This battle will determine the future of this country. I pledge on my honor to prove that I'm the one who can protect this Maroll from outside threats.";
+	next;
+	if( select("Yes, I want to join you.:End Conversation") == 2 )
+	{
+		mes "[General Guillaume]";
+		mes "I'll be the one who will capture the flag!";
+		close2;
+		cutin "",255;
+		end;
+	}
+	cutin "bat_kiyom2",2;
+	mes "[General Guillaume]";
+	mes "Welcome to my army, comrade.";
+	mes "Your eyes tell me that you're a soldier that I can trust.";
+	set Bat_Team,1;
+	next;
+	mes "[General Guillaume]";
+	mes "Now, go upstairs and apply for battle with your comrades. I'm sure they'll welcome you whole-heartedly!";
+	close2;
+	cutin "",255;
+	end;
+}
+
+// General Croix
+// *********************************************************************
+bat_room,160,140,3	script	Prince Croix	416,{
+	cutin "bat_crua1",2;
+	mes "[Prince Croix]";
+	mes "Wise adventurer, why don't you lend us your power for victory?";
+	next;
+	cutin "bat_crua2",2;
+	mes "[Prince Croix]";
+	mes "I do not wish to shed blood, but I have no choice but to fight for the possibility of peace and for the sake of my people.";
+	next;
+	mes "[Prince Croix]";
+	mes "General Guillaume may have an advantage in this battle as he is the great general of Maroll, but that doesn't automatically mean he'll win. I want to win this battle so that I can grant a better future for my people.";
+	next;
+	if( select("Yes, I want to join you!:End Conversation") == 2 )
+	{
+		mes "[Prince Croix]";
+		mes "For Maroll!";
+		close2;
+		cutin "",255;
+		end;
+	}
+	mes "[Prince Croix]";
+	mes "Thank you so much. I feel like I can win with the help of adventurers like you. Now, please go downstairs and join your comrades in sharpening their skills to fight the enemy!";
+	set Bat_Team,2;
+	close2;
+	cutin "",255;
+	end;
+}
+
+// Time calculation Function
+// *********************************************************************
+function	script	Time2Str	{
+	set .@Time_Left, getarg(0) - gettimetick(2);
+	
+	set .@Days, .@Time_Left / 86400;
+	set .@Time_Left, .@Time_Left - (.@Days * 86400);
+	set .@Hours, .@Time_Left / 3600;
+	set .@Time_Left, .@Time_Left - (.@Hours * 3600);
+	set .@Minutes, .@Time_Left / 60;
+	set .@Time_Left, .@Time_Left - (.@Minutes * 60);
+	
+	set .@Time$, "";
+	if( .@Days > 1 )
+		set .@Time$, .@Time$ + .@Days + " days, ";
+	else if( .@Days > 0 )
+		set .@Time$, .@Time$ + .@Days + " day, ";
+
+	if( .@Hours > 1 )
+		set .@Time$, .@Time$ + .@Hours + " hours, ";
+	else if( .@Hours > 0 )
+		set .@Time$, .@Time$ + .@Hours + " hour, ";
+
+	if( .@Minutes > 1 )
+		set .@Time$, .@Time$ + .@Minutes + " minutes, ";
+	else if( .@Minutes > 0 )
+		set .@Time$, .@Time$ + .@Minutes + " minute, ";
+
+	if( .@Time_Left > 1 || .@Time_Left == 0 )
+		set .@Time$, .@Time$ + .@Time_Left + " seconds.";
+	else if( .@Time_Left == 1 )
+		set .@Time$, .@Time$ + .@Time_Left + " second.";
+	
+	return .@Time$;
+}
+
+// Guillaume Knight - Tierra Valley
+// *********************************************************************
+bat_room,159,178,5	script	Guillaume Knight#1	417,{
+	mes "[Guillaume Knight]";
+	mes "Tierra Gorge is a very steep canyon with two forts residing in the north and south ends of the map.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "There is a ration depot for the Guillaume and Croix armies at the 11 and 8 o'clock directions.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "The battle starts at your army's ship, and the goal is to advance and destroy your enemy's rations depot faster than they can destroy yours.";
+	mes "";
+	mes "The army that captures the neutral flag in the center of the battlefield will be rewarded with extra regeneration points, meaning their soldiers will resurrect more than the other side, giving them an advantage.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "Are you ready for battle? Then apply with the recruiter next to me!";
+	close;
+}
+
+// Tierra Officer - Guillaume
+// *********************************************************************
+bat_room,156,178,5	script	Tierra Valley Officer#1	418,{
+	mes "[Tierra Officer]";
+	if( Bat_Team == 2 )
+	{
+		mes "Get out of here you stinky Croix!";
+		close;
+	}
+
+	if( Bat_Team == 0 )
+	{
+		mes "Please sign up for an army with Prince Croix or General Guillaume!";
+		close;
+	}
+	
+	mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!";
+	next;
+	if( select("I want to join your army!:End Conversation") == 2 )
+		close;
+
+	mes "[Tierra Officer]";
+	if( BG_Delay_Tick >= gettimetick(2) )
+	{
+		mes "You are a Deserter!!";
+		mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
+		close;
+	}
+
+	if( checkquest(2069,PLAYTIME) == 2 ) erasequest 2069;
+	if( checkquest(2069,PLAYTIME) != -1 )
+	{
+		mes "You have received an indicator showing that you've participated in the Battle at Tierra Gorge. I can't let you participate in any other battles until the indicator goes off.";
+		next;
+		mes "[Tierra Officer]";
+		mes "Stand-by for Tierra Gorge Battle until the time limit passes.";
+		close;
+	}
+	
+	if( BaseLevel < 80 )
+	{
+		mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield";
+		close;
+	}
+
+	mes "Good luck!";
+	close2;
+	warp "bat_room",85,224;
+	end;
+}
+
+// Croix Knight - Tierra Valley
+// *********************************************************************
+bat_room,159,121,1	script	Croix Knight#1	413,{
+	mes "[Croix Knight]";
+	mes "Tierra Gorge is a very steep canyon with two forts residing in the north and south ends of the map.";
+	next;
+	mes "[Croix Knight]";
+	mes "There is a ration depot for the Guillaume and Croix armies at the 11 and 8 o'clock directions.";
+	next;
+	mes "[Croix Knight]";
+	mes "The battle starts at your army's ship, and the goal is to advance and destroy your enemy's rations depot faster than they can destroy yours.";
+	mes "";
+	mes "The army that captures the neutral flag in the center of the battlefield will be rewarded with extra regeneration points, meaning their soldiers will resurrect more than the other side, giving them an advantage.";
+	next;
+	mes "[Croix Knight]";
+	mes "Are you ready for battle? Then apply with the recruiter next to me!";
+	close;
+}
+
+// Tierra Officer - Croix
+// *********************************************************************
+bat_room,156,121,1	script	Tierra Valley Officer#2	414,{
+	mes "[Tierra Officer]";
+	if( Bat_Team == 1 )
+	{
+		mes "Get out of here you stupid Guillaume!";
+		close;
+	}
+
+	if( Bat_Team == 0 )
+	{
+		mes "Please sign up for an army with Prince Croix or General Guillaume!";
+		close;
+	}
+
+	mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!";
+	next;
+	if( select("I want to join your army!:End Conversation") == 2 )
+		close;
+
+	mes "[Tierra Officer]";
+	if( BG_Delay_Tick >= gettimetick(2) )
+	{
+		mes "You are a Deserter!!";
+		mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
+		close;
+	}
+
+	if( checkquest(2069,PLAYTIME) == 2 ) erasequest 2069;
+	if( checkquest(2069,PLAYTIME) != -1 )
+	{
+		mes "You have received an indicator showing that you've participated in the Battle at Tierra Gorge. I can't let you participate in any other battles until the indicator goes off.";
+		next;
+		mes "[Tierra Officer]";
+		mes "Stand-by for Tierra Gorge Battle until the time limit passes.";
+		close;
+	}
+
+	if( BaseLevel < 80 )
+	{
+		mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield";
+		close;
+	}
+
+	mes "Good luck!";
+	close2;
+	warp "bat_room",85,208;
+	end;
+}
+
+// Guillaume Knight - Tierra
+// *********************************************************************
+bat_room,167,178,5	script	Guillaume Knight#2	417,{
+	mes "[Guillaume Knight]";
+	mes "Tierra Gorge is a very steep canyon with two forts residing in the north and south ends of the map.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "There is a ration depot for the Guillaume and Croix armies at the 11 and 8 o'clock directions.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "The battle starts at your army's ship, and the goal is to advance and destroy your enemy's rations depot faster than they can destroy yours.";
+	mes "";
+	mes "The army that captures the neutral flag in the center of the battlefield will be rewarded with extra regeneration points, meaning their soldiers will resurrect more than the other side, giving them an advantage.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "Are you ready for battle? Then apply with the recruiter next to me!";
+	close;
+}
+
+// Tierra Officer - Guillaume
+// *********************************************************************
+bat_room,164,178,5	script	Tierra Valley Officer#3	418,{
+	mes "[Tierra Officer]";
+	if( Bat_Team == 2 )
+	{
+		mes "Get out of here you stinky Croix!";
+		close;
+	}
+
+	if( Bat_Team == 0 )
+	{
+		mes "Please sign up for an army with Prince Croix or General Guillaume!";
+		close;
+	}
+	
+	mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!";
+	next;
+	if( select("I want to join your army!:End Conversation") == 2 )
+		close;
+
+	mes "[Tierra Officer]";
+	if( BG_Delay_Tick >= gettimetick(2) )
+	{
+		mes "You are a Deserter!!";
+		mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
+		close;
+	}
+
+	if( checkquest(2069,PLAYTIME) == 2 ) erasequest 2069;
+	if( checkquest(2069,PLAYTIME) != -1 )
+	{
+		mes "You have received an indicator showing that you've participated in the Battle at Tierra Gorge. I can't let you participate in any other battles until the indicator goes off.";
+		next;
+		mes "[Tierra Officer]";
+		mes "Stand-by for Tierra Gorge Battle until the time limit passes.";
+		close;
+	}
+
+	if( BaseLevel < 80 )
+	{
+		mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield";
+		close;
+	}
+
+	mes "Good luck!";
+	close2;
+	warp "bat_room",57,94;
+	end;
+}
+
+// Croix Knight - Tierra
+// *********************************************************************
+bat_room,167,121,1	script	Croix Knight#2	413,{
+	mes "[Croix Knight]";
+	mes "Tierra Gorge is a very steep canyon with two forts residing in the north and south ends of the map.";
+	next;
+	mes "[Croix Knight]";
+	mes "There is a ration depot for the Guillaume and Croix armies at the 11 and 8 o'clock directions.";
+	next;
+	mes "[Croix Knight]";
+	mes "The battle starts at your army's ship, and the goal is to advance and destroy your enemy's rations depot faster than they can destroy yours.";
+	mes "";
+	mes "The army that captures the neutral flag in the center of the battlefield will be rewarded with extra regeneration points, meaning their soldiers will resurrect more than the other side, giving them an advantage.";
+	next;
+	mes "[Croix Knight]";
+	mes "Are you ready for battle? Then apply with the recruiter next to me!";
+	close;
+}
+
+// Tierra Officer - Croix
+// *********************************************************************
+bat_room,164,121,1	script	Tierra Valley Officer#4	414,{
+	mes "[Tierra Officer]";
+	if( Bat_Team == 1 )
+	{
+		mes "Get out of here you stupid Guillaume!";
+		close;
+	}
+
+	if( Bat_Team == 0 )
+	{
+		mes "Please sign up for an army with Prince Croix or General Guillaume!";
+		close;
+	}
+
+	mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!";
+	next;
+	if( select("I want to join your army!:End Conversation") == 2 )
+		close;
+
+	mes "[Tierra Officer]";
+	if( BG_Delay_Tick >= gettimetick(2) )
+	{
+		mes "You are a Deserter!!";
+		mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
+		close;
+	}
+
+	if( checkquest(2069,PLAYTIME) == 2 ) erasequest 2069;
+	if( checkquest(2069,PLAYTIME) != -1 )
+	{
+		mes "You have received an indicator showing that you've participated in the Battle at Tierra Gorge. I can't let you participate in any other battles until the indicator goes off.";
+		next;
+		mes "[Tierra Officer]";
+		mes "Stand-by for Tierra Gorge Battle until the time limit passes.";
+		close;
+	}
+
+	if( BaseLevel < 80 )
+	{
+		mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield";
+		close;
+	}
+
+	mes "Good luck!";
+	close2;
+	warp "bat_room",57,77;
+	end;
+}
+
+// Guillaune Knight - Flavius
+// *********************************************************************
+bat_room,175,178,5	script	Guillaume Knight#3	417,{
+	mes "[Guillaume Knight]";
+	mes "The objective of the Flavius Battle is to score 2 points before your enemy by destroying their crystal.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "The crystals for both armies are protected by special barricades that cannot be destroyed by direct attacks.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "But they can be removed by destroying the Guardians that protect the enemy army base.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "The crystals are immune to every type of skill; your physical attacks are the only choice for destroying your enemy's crystal.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "Are you ready for battle? Then apply with the recruiter next to me!";
+	close;
+}
+
+// Flavius Officer - Guillaume
+// *********************************************************************
+bat_room,172,178,5	script	Flavius Officer#1	418,{
+	mes "[Flavius Officer]";
+	if( Bat_Team == 2 )
+	{
+		mes "Get out of here you stupid Croix!";
+		close;
+	}
+
+	if( Bat_Team == 0 )
+	{
+		mes "Please sign up for an army with Prince Croix or General Guillaume!";
+		close;
+	}
+
+	mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!";
+	next;
+	if( select("I want to join your army!:End Conversation") == 2 )
+		close;
+
+	mes "[Flavius Officer]";
+	if( BG_Delay_Tick >= gettimetick(2) )
+	{
+		mes "You are a Deserter!!";
+		mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
+		close;
+	}
+
+	if( checkquest(2070,PLAYTIME) == 2 ) erasequest 2070;
+	if( checkquest(2070,PLAYTIME) != -1 )
+	{
+		mes "You have received an indicator showing that you've participated in the Battle at Flavius. I can't let you participate in any other battles until the indicator goes off.";
+		next;
+		mes "[Flavius Officer]";
+		mes "Stand-by for Flavius Battle until the time limit passes.";
+		close;
+	}
+
+	if( BaseLevel < 80 )
+	{
+		mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield";
+		close;
+	}
+
+	mes "Good luck!";
+	close2;
+	warp "bat_room",85,94;
+	end;
+}
+
+// Croix Knight - Flavius
+// *********************************************************************
+bat_room,175,121,1	script	Croix Knight#3	413,{
+	mes "[Croix Knight]";
+	mes "The objective of the Flavius Battle is to score 2 points before your enemy by destroying their crystal.";
+	next;
+	mes "[Croix Knight]";
+	mes "The crystals for both armies are protected by special barricades that cannot be destroyed by direct attacks.";
+	next;
+	mes "[Croix Knight]";
+	mes "But they can be removed by destroying the Guardians that protect the enemy army base.";
+	next;
+	mes "[Croix Knight]";
+	mes "The crystals are immune to every type of skill; your physical attacks are the only choice for destroying your enemy's crystal.";
+	next;
+	mes "[Croix Knight]";
+	mes "Are you ready for battle? Then apply with the recruiter next to me!";
+	close;
+}
+
+// Flavius Officerer - Croix
+// *********************************************************************
+bat_room,172,121,1	script	Flavius Officer#2	414,{
+	mes "[Flavius Officer]";
+	if( Bat_Team == 1 )
+	{
+		mes "Get out of here you stupid Guillaume!";
+		close;
+	}
+
+	if( Bat_Team == 0 )
+	{
+		mes "Please sign up for an army with Prince Croix or General Guillaume!";
+		close;
+	}
+
+	mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!";
+	next;
+	if( select("I want to join your army!:End Conversation") == 2 )
+		close;
+
+	mes "[Flavius Officer]";
+	if( BG_Delay_Tick >= gettimetick(2) )
+	{
+		mes "You are a Deserter!!";
+		mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
+		close;
+	}
+
+	if( checkquest(2070,PLAYTIME) == 2 ) erasequest 2070;
+	if( checkquest(2070,PLAYTIME) != -1 )
+	{
+		mes "You have received an indicator showing that you've participated in the Battle at Flavius. I can't let you participate in any other battles until the indicator goes off.";
+		next;
+		mes "[Flavius Officer]";
+		mes "Stand-by for Flavius Battle until the time limit passes.";
+		close;
+	}
+
+	if( BaseLevel < 80 )
+	{
+		mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield";
+		close;
+	}
+
+	mes "Good luck!";
+	close2;
+	warp "bat_room",85,77;
+	end;
+}
+
+// Guillaune Knight - Flavius
+// *********************************************************************
+bat_room,151,178,5	script	Guillaume Knight#4	417,{
+	mes "[Guillaume Knight]";
+	mes "The objective of the Flavius Battle is to score 2 points before your enemy by destroying their crystal.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "The crystals for both armies are protected by special barricades that cannot be destroyed by direct attacks.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "But they can be removed by destroying the Guardians that protect the enemy army base.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "The crystals are immune to every type of skill; your physical attacks are the only choice for destroying your enemy's crystal.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "Are you ready for battle? Then apply with the recruiter next to me!";
+	close;
+}
+
+// Flavius Officerer - Guillaume
+// *********************************************************************
+bat_room,148,178,5	script	Flavius Officer#3	418,{
+	mes "[Flavius Officer]";
+	if( Bat_Team == 2 )
+	{
+		mes "Get out of here you stupid Croix!";
+		close;
+	}
+
+	if( Bat_Team == 0 )
+	{
+		mes "Please sign up for an army with Prince Croix or General Guillaume!";
+		close;
+	}
+
+	mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!";
+	next;
+	if( select("I want to join your army!:End Conversation") == 2 )
+		close;
+
+	mes "[Flavius Officer]";
+	if( BG_Delay_Tick >= gettimetick(2) )
+	{
+		mes "You are a Deserter!!";
+		mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
+		close;
+	}
+
+	if( checkquest(2070,PLAYTIME) == 2 ) erasequest 2070;
+	if( checkquest(2070,PLAYTIME) != -1 )
+	{
+		mes "You have received an indicator showing that you've participated in the Battle at Flavius. I can't let you participate in any other battles until the indicator goes off.";
+		next;
+		mes "[Flavius Officer]";
+		mes "Stand-by for Flavius Battle until the time limit passes.";
+		close;
+	}
+
+	if( BaseLevel < 80 )
+	{
+		mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield";
+		close;
+	}
+
+	mes "Good luck!";
+	close2;
+	warp "bat_room",253,94;
+	end;
+}
+
+// Croix Knight - Flavius
+// *********************************************************************
+bat_room,151,121,1	script	Croix Knight#4	413,{
+	mes "[Croix Knight]";
+	mes "The objective of the Flavius Battle is to score 2 points before your enemy by destroying their crystal.";
+	next;
+	mes "[Croix Knight]";
+	mes "The crystals for both armies are protected by special barricades that cannot be destroyed by direct attacks.";
+	next;
+	mes "[Croix Knight]";
+	mes "But they can be removed by destroying the Guardians that protect the enemy army base.";
+	next;
+	mes "[Croix Knight]";
+	mes "The crystals are immune to every type of skill; your physical attacks are the only choice for destroying your enemy's crystal.";
+	next;
+	mes "[Croix Knight]";
+	mes "Are you ready for battle? Then apply with the recruiter next to me!";
+	close;
+}
+
+// Flavius Officerer - Croix
+// *********************************************************************
+bat_room,148,121,1	script	Flavius Officer#4	414,{
+	mes "[Flavius Officer]";
+	if( Bat_Team == 1 )
+	{
+		mes "Get out of here you stupid Guillaume!";
+		close;
+	}
+
+	if( Bat_Team == 0 )
+	{
+		mes "Please sign up for an army with Prince Croix or General Guillaume!";
+		close;
+	}
+
+	mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!";
+	next;
+	if( select("I want to join your army!:End Conversation") == 2 )
+		close;
+
+	mes "[Flavius Officer]";
+	if( BG_Delay_Tick >= gettimetick(2) )
+	{
+		mes "You are a Deserter!!";
+		mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
+		close;
+	}
+
+	if( checkquest(2070,PLAYTIME) == 2 ) erasequest 2070;
+	if( checkquest(2070,PLAYTIME) != -1 )
+	{
+		mes "You have received an indicator showing that you've participated in the Battle at Flavius. I can't let you participate in any other battles until the indicator goes off.";
+		next;
+		mes "[Flavius Officer]";
+		mes "Stand-by for Flavius Battle until the time limit passes.";
+		close;
+	}
+
+	if( BaseLevel < 80 )
+	{
+		mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield";
+		close;
+	}
+
+	mes "Good luck!";
+	close2;
+	warp "bat_room",253,77;
+	end;
+}
+
+// Guillaume Knight - KvM
+// *********************************************************************
+bat_room,143,178,5	script	Guillaume Knight#5	417,{
+	mes "[Guillaume Knight]";
+	mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "The first team to lose all their soldiers loses.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "Are you ready for battle? Then apply with the recruiter next to me!";
+	close;
+}
+
+// KvM Officerer - Guillaume
+// *********************************************************************
+bat_room,140,178,5	script	KVM [80-99] Officer#1	418,{
+	mes "[KVM Officer]";
+	if( Bat_Team == 2 )
+	{
+		mes "Get out of here you stinky Croix!";
+		close;
+	}
+
+	if( Bat_Team == 0 )
+	{
+		mes "Please sign up for an army with Prince Croix or General Guillaume!";
+		close;
+	}
+
+	mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!";
+	next;
+	if( select("I want to join your army!:End Conversation") == 2 )
+		close;
+
+	mes "[KVM Officer]";
+	if( BG_Delay_Tick >= gettimetick(2) )
+	{
+		mes "You are a Deserter!!";
+		mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
+		close;
+	}
+
+	if( checkquest(6025,PLAYTIME) == 2 ) erasequest 6025;
+	if( checkquest(6025,PLAYTIME) != -1 )
+	{
+		mes "You have received an indicator showing that you've participated in the Battle at KvM. I can't let you participate in any other battles until the indicator goes off.";
+		next;
+		mes "[KVM Officer]";
+		mes "Stand-by for KvM Battle until the time limit passes.";
+		close;
+	}
+
+	if( BaseLevel < 80 )
+	{
+		mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 80 to 99.";
+		close;
+	}
+
+	mes "Good luck!";
+	close2;
+	warp "bat_room",253,224;
+	end;
+}
+
+// Croix Knight - KvM
+// *********************************************************************
+bat_room,143,121,1	script	Croix Knight#5	413,{
+	mes "[Croix Knight]";
+	mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die.";
+	next;
+	mes "[Croix Knight]";
+	mes "The first team to lose all their soldiers loses.";
+	next;
+	mes "[Croix Knight]";
+	mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential.";
+	next;
+	mes "[Croix Knight]";
+	mes "Are you ready for battle? Then apply with the recruiter next to me!";
+	close;
+}
+
+// KvM Officer - Croix
+// *********************************************************************
+bat_room,140,121,1	script	KVM [80-99] Officer#2	414,{
+	mes "[KVM Officer]";
+	if( Bat_Team == 1 )
+	{
+		mes "Get out of here you stupid Guillaume!";
+		close;
+	}
+
+	if( Bat_Team == 0 )
+	{
+		mes "Please sign up for an army with Prince Croix or General Guillaume!";
+		close;
+	}
+
+	mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!";
+	next;
+	if( select("I want to join your army!:End Conversation") == 2 )
+		close;
+
+	mes "[KVM Officer]";
+	if( BG_Delay_Tick >= gettimetick(2) )
+	{
+		mes "You are a Deserter!!";
+		mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
+		close;
+	}
+
+	if( checkquest(6025,PLAYTIME) == 2 ) erasequest 6025;
+	if( checkquest(6025,PLAYTIME) != -1 )
+	{
+		mes "You have received an indicator showing that you've participated in the Battle at KvM. I can't let you participate in any other battles until the indicator goes off.";
+		next;
+		mes "[KVM Officer]";
+		mes "Stand-by for KvM Battle until the time limit passes.";
+		close;
+	}
+
+	if( BaseLevel < 80 )
+	{
+		mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 80 to 99.";
+		close;
+	}
+
+	mes "Good luck!";
+	close2;
+	warp "bat_room",253,208;
+	end;
+}
+
+// Guillaume Knight - KvM
+// *********************************************************************
+bat_room,135,178,5	script	Guillaume Knight#6	417,{
+	mes "[Guillaume Knight]";
+	mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "The first team to lose all their soldiers loses.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "Are you ready for battle? Then apply with the recruiter next to me!";
+	close;
+}
+
+// KvM Officerer - Guillaume
+// *********************************************************************
+bat_room,132,178,5	script	KVM [60-79] Officer#1	418,{
+	mes "[KVM Officer]";
+	if( Bat_Team == 2 )
+	{
+		mes "Get out of here you stinky Croix!";
+		close;
+	}
+
+	if( Bat_Team == 0 )
+	{
+		mes "Please sign up for an army with Prince Croix or General Guillaume!";
+		close;
+	}
+
+	mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!";
+	next;
+	if( select("I want to join your army!:End Conversation") == 2 )
+		close;
+
+	mes "[KVM Officer]";
+	if( BG_Delay_Tick >= gettimetick(2) )
+	{
+		mes "You are a Deserter!!";
+		mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
+		close;
+	}
+
+	if( checkquest(6025,PLAYTIME) == 2 ) erasequest 6025;
+	if( checkquest(6025,PLAYTIME) != -1 )
+	{
+		mes "You have received an indicator showing that you've participated in the Battle at KvM. I can't let you participate in any other battles until the indicator goes off.";
+		next;
+		mes "[KVM Officer]";
+		mes "Stand-by for KvM Battle until the time limit passes.";
+		close;
+	}
+
+	if( BaseLevel < 60 || BaseLevel > 79 )
+	{
+		mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 60 to 79.";
+		close;
+	}
+
+	mes "Good luck!";
+	close2;
+	warp "bat_room",225,224;
+	end;
+}
+
+// Croix Knight - KvM
+// *********************************************************************
+bat_room,135,121,1	script	Croix Knight#6	413,{
+	mes "[Croix Knight]";
+	mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die.";
+	next;
+	mes "[Croix Knight]";
+	mes "The first team to lose all their soldiers loses.";
+	next;
+	mes "[Croix Knight]";
+	mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential.";
+	next;
+	mes "[Croix Knight]";
+	mes "Are you ready for battle? Then apply with the recruiter next to me!";
+	close;
+}
+
+// KvM Officer - Croix
+// *********************************************************************
+bat_room,132,121,1	script	KVM [60-79] Officer#2	414,{
+	mes "[KVM Officer]";
+	if( Bat_Team == 1 )
+	{
+		mes "Get out of here you stupid Guillaume!";
+		close;
+	}
+
+	if( Bat_Team == 0 )
+	{
+		mes "Please sign up for an army with Prince Croix or General Guillaume!";
+		close;
+	}
+
+	mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!";
+	next;
+	if( select("I want to join your army!:End Conversation") == 2 )
+		close;
+
+	mes "[KVM Officer]";
+	if( BG_Delay_Tick >= gettimetick(2) )
+	{
+		mes "You are a Deserter!!";
+		mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
+		close;
+	}
+
+	if( checkquest(6025,PLAYTIME) == 2 ) erasequest 6025;
+	if( checkquest(6025,PLAYTIME) != -1 )
+	{
+		mes "You have received an indicator showing that you've participated in the Battle at KvM. I can't let you participate in any other battles until the indicator goes off.";
+		next;
+		mes "[KVM Officer]";
+		mes "Stand-by for KvM Battle until the time limit passes.";
+		close;
+	}
+
+	if( BaseLevel < 60 || BaseLevel > 79 )
+	{
+		mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 60 to 79.";
+		close;
+	}
+
+	mes "Good luck!";
+	close2;
+	warp "bat_room",225,208;
+	end;
+}
+
+// Guillaume Knight - KvM
+// *********************************************************************
+bat_room,127,178,5	script	Guillaume Knight#7	417,{
+	mes "[Guillaume Knight]";
+	mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "The first team to lose all their soldiers loses.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential.";
+	next;
+	mes "[Guillaume Knight]";
+	mes "Are you ready for battle? Then apply with the recruiter next to me!";
+	close;
+}
+
+// KvM Officerer - Guillaume
+// *********************************************************************
+bat_room,124,178,5	script	KVM [1-59] Officer#1	418,{
+	mes "[KVM Officer]";
+	if( Bat_Team == 2 )
+	{
+		mes "Get out of here you stinky Croix!";
+		close;
+	}
+
+	if( Bat_Team == 0 )
+	{
+		mes "Please sign up for an army with Prince Croix or General Guillaume!";
+		close;
+	}
+
+	mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!";
+	next;
+	if( select("I want to join your army!:End Conversation") == 2 )
+		close;
+
+	mes "[KVM Officer]";
+	if( BG_Delay_Tick >= gettimetick(2) )
+	{
+		mes "You are a Deserter!!";
+		mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
+		close;
+	}
+
+	if( checkquest(6025,PLAYTIME) == 2 ) erasequest 6025;
+	if( checkquest(6025,PLAYTIME) != -1 )
+	{
+		mes "You have received an indicator showing that you've participated in the Battle at KvM. I can't let you participate in any other battles until the indicator goes off.";
+		next;
+		mes "[KVM Officer]";
+		mes "Stand-by for KvM Battle until the time limit passes.";
+		close;
+	}
+
+	if( BaseLevel > 59 )
+	{
+		mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 1 to 59.";
+		close;
+	}
+
+	mes "Good luck!";
+	close2;
+	warp "bat_room",197,224;
+	end;
+}
+
+// Croix Knight - KvM
+// *********************************************************************
+bat_room,127,121,1	script	Croix Knight#7	413,{
+	mes "[Croix Knight]";
+	mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die.";
+	next;
+	mes "[Croix Knight]";
+	mes "The first team to lose all their soldiers loses.";
+	next;
+	mes "[Croix Knight]";
+	mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential.";
+	next;
+	mes "[Croix Knight]";
+	mes "Are you ready for battle? Then apply with the recruiter next to me!";
+	close;
+}
+
+// KvM Officer - Croix
+// *********************************************************************
+bat_room,124,121,1	script	KVM [1-59] Officer#2	414,{
+	mes "[KVM Officer]";
+	if( Bat_Team == 1 )
+	{
+		mes "Get out of here you stupid Guillaume!";
+		close;
+	}
+
+	if( Bat_Team == 0 )
+	{
+		mes "Please sign up for an army with Prince Croix or General Guillaume!";
+		close;
+	}
+
+	mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!";
+	next;
+	if( select("I want to join your army!:End Conversation") == 2 )
+		close;
+
+	mes "[KVM Officer]";
+	if( BG_Delay_Tick >= gettimetick(2) )
+	{
+		mes "You are a Deserter!!";
+		mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
+		close;
+	}
+
+	if( checkquest(6025,PLAYTIME) == 2 ) erasequest 6025;
+	if( checkquest(6025,PLAYTIME) != -1 )
+	{
+		mes "You have received an indicator showing that you've participated in the Battle at KvM. I can't let you participate in any other battles until the indicator goes off.";
+		next;
+		mes "[KVM Officer]";
+		mes "Stand-by for KvM Battle until the time limit passes.";
+		close;
+	}
+
+	if( BaseLevel > 59 )
+	{
+		mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 1 to 59.";
+		close;
+	}
+
+	mes "Good luck!";
+	close2;
+	warp "bat_room",197,208;
+	end;
+}
+
+// Guard Dummy
+// *********************************************************************
+
+bat_room,161,141,3	script	Prince Croix's Aid::bat_aid	415,{ end; }
+bat_room,161,139,3	duplicate(bat_aid)	Prince Croix's Aid::bat_aid2	415
+bat_room,161,160,3	duplicate(bat_aid)	General Guillaume's Aid::bat_aid3	419
+bat_room,161,158,3	duplicate(bat_aid)	General Guillaume's Aid::bat_aid4	419
+
+// Flags
+// *********************************************************************
+
+-	script	Guillaume camp#bat	973,{ end; }
+-	script	Croix camp#bat	974,{ end; }
+
+// Exit from Registration
+// *********************************************************************
+-	script	warp2bat_room	-1,{
+	end;
+
+OnTouch:
+	set BG_Delay_Tick, gettimetick(2) + 30;
+	warp "bat_room",154,149;
+	end;
+}
+
+// Flavius bat_b02
+bat_room,57,81,0	duplicate(warp2bat_room)	bat1	45,1,1
+bat_room,57,90,0	duplicate(warp2bat_room)	bat2	45,1,1
+// Free BG
+bat_room,57,220,0	duplicate(warp2bat_room)	bat3	45,1,1
+bat_room,57,211,0	duplicate(warp2bat_room)	bat4	45,1,1
+// Tierra Valley bat_a02
+bat_room,85,81,0	duplicate(warp2bat_room)	bat5	45,1,1
+bat_room,85,90,0	duplicate(warp2bat_room)	bat6	45,1,1
+// Tierra Valley bat_a01
+bat_room,85,220,0	duplicate(warp2bat_room)	bat7	45,1,1
+bat_room,85,211,0	duplicate(warp2bat_room)	bat8	45,1,1
+// Free BG
+bat_room,113,81,0	duplicate(warp2bat_room)	bat9	45,1,1
+bat_room,113,90,0	duplicate(warp2bat_room)	bat10	45,1,1
+// Free BG
+bat_room,113,220,0	duplicate(warp2bat_room)	bat11	45,1,1
+bat_room,113,211,0	duplicate(warp2bat_room)	bat12	45,1,1
+// Free BG
+bat_room,141,81,0	duplicate(warp2bat_room)	bat13	45,1,1
+bat_room,141,90,0	duplicate(warp2bat_room)	bat14	45,1,1
+// Free BG
+bat_room,141,220,0	duplicate(warp2bat_room)	bat15	45,1,1
+bat_room,141,211,0	duplicate(warp2bat_room)	bat16	45,1,1
+// Free BG
+bat_room,169,81,0	duplicate(warp2bat_room)	bat17	45,1,1
+bat_room,169,90,0	duplicate(warp2bat_room)	bat18	45,1,1
+// Free BG
+bat_room,169,220,0	duplicate(warp2bat_room)	bat19	45,1,1
+bat_room,169,211,0	duplicate(warp2bat_room)	bat20	45,1,1
+// Free BG
+bat_room,197,81,0	duplicate(warp2bat_room)	bat21	45,1,1
+bat_room,197,90,0	duplicate(warp2bat_room)	bat22	45,1,1
+// KvM bat_c03
+bat_room,197,220,0	duplicate(warp2bat_room)	bat23	45,1,1
+bat_room,197,211,0	duplicate(warp2bat_room)	bat24	45,1,1
+// Free BG
+bat_room,225,81,0	duplicate(warp2bat_room)	bat25	45,1,1
+bat_room,225,90,0	duplicate(warp2bat_room)	bat26	45,1,1
+// KvM bat_c02
+bat_room,225,220,0	duplicate(warp2bat_room)	bat27	45,1,1
+bat_room,225,211,0	duplicate(warp2bat_room)	bat28	45,1,1
+// Flavius bat_b01
+bat_room,253,81,0	duplicate(warp2bat_room)	bat29	45,1,1
+bat_room,253,90,0	duplicate(warp2bat_room)	bat30	45,1,1
+// KvM bat_c01
+bat_room,253,220,0	duplicate(warp2bat_room)	bat31	45,1,1
+bat_room,253,211,0	duplicate(warp2bat_room)	bat32	45,1,1
+
+// Badges Repairman
+// *********************************************************************
+
+bat_room,138,144,5	script	Repairman#bg	99,{
+	callfunc "repairmain","Repairman";
+	end;
+}
+
+// Badges Exchange
+// *********************************************************************
+
+bat_room,160,150,3	script	Erundek	109,{
+	mes "[Erundek]";
+	mes "Welcome, mighty warrior.";
+	mes "What can I do for you today ?";
+	next;
+	switch( select("Check the Catalog","Exchange Bravery Badges","Exchange Valor Badges","Exchange Heroism Badges","Hmm, nothing I guess.") )
+	{
+		case 1:
+			mes "[Erundek]";
+			mes "We have many items, so please take a look and purchase deliberately.";
+			close2;
+			Readbook 11010,1;
+			end;
+		case 5:
+			mes "[Erundek]";
+			mes "As you wish.";
+			mes "See you later.";
+			close;
+		case 2: // Bravery Badges
+			mes "[Erundek]";
+			mes "So you want to exchange ^0000FFBravery Badges^000000 from the Battle of Tierra Valley.";
+			mes "What kind of item do you want to exchange?";
+			next;
+			deletearray .@Item_DB[0],127;
+			set .@Badge, 7828;
+
+			switch( select("Weapons:Garment:Footgear:Armor:Accessory") )
+			{
+				case 1: setarray .@Item_DB[0],13036,13411,1425,1632,1634,1543,1924,1978,1574,1824,1183,1380,13305,1279,1739,13108,13172; set .@Value, 100; break;
+				case 2: setarray .@Item_DB[0],2538,2539,2540; set .@Value, 50; break;
+				case 3: setarray .@Item_DB[0],2435,2436,2437; set .@Value, 50; break;
+				case 4: setarray .@Item_DB[0],2376,2377,2378,2379,2380,2381,2382; set .@Value, 80; break;
+				case 5: setarray .@Item_DB[0],2720,2721,2722,2723,2724,2725,2733; set .@Value, 500; break;
+			}
+			
+			break;
+		case 3: // Valor Badges
+			mes "[Erundek]";
+			mes "So you want to exchange ^FF0000Valor Badges^000000 from the Battle of Flavius.";
+			mes "What kind of item do you want to exchange?";
+			next;
+			deletearray .@Item_DB[0],127;
+			set .@Badge, 7829;
+
+			switch( select("Weapons:Garment:Footgear:Armor:Accessory") )
+			{
+				case 1: setarray .@Item_DB[0],13037,13410,1633,1635,1542,1923,1977,1575,1823,1184,1482,1379,13306,1280,1738,13171,13173,13174; set .@Value, 100; break;
+				case 2: setarray .@Item_DB[0],2538,2539,2540; set .@Value, 50; break;
+				case 3: setarray .@Item_DB[0],2435,2436,2437; set .@Value, 50; break;
+				case 4: setarray .@Item_DB[0],2376,2377,2378,2379,2380,2381,2382; set .@Value, 80; break;
+				case 5: setarray .@Item_DB[0],2720,2721,2722,2723,2724,2725,2733; set .@Value, 500; break;
+			}
+			
+			break;
+		case 4: // Heroism Badge
+			mes "[Erundek]";
+			mes "So you want to exchange ^FFA500Heroism Badges^000000 from the Battle of Kriger Von Midgard.";
+			mes "This shop is not available at the moment.";
+			close;
+	}
+	
+	mes "[Erundek]";
+	mes "What item do you want to exchange?";
+	mes "If you are not sure, check the catalog.";
+	next;
+
+	set .@Menu$, "";
+	set .@Count, getarraysize(.@Item_DB);
+	for( set .@i, 0; .@i < .@Count; set .@i, .@i + 1 )
+		set .@Menu$, .@Menu$ + getitemname(.@Item_DB[.@i]) + ":";
+
+	set .@Item_ID, .@Item_DB[select(.@Menu$) - 1];
+
+	mes "[Erundek]";
+	mes "Would you like to exchange ^FF0000" + .@Value + " " + getitemname(.@Badge) + "^000000 for a ^0000FF" + getitemname(.@Item_ID) + "^000000?";
+	next;
+	mes "Remember, Battleground Reward Items are ^FF0000Character Bound^000000.";
+	mes "Are you sure you want this item?";
+	next;
+	
+	if( select("Yes:No") == 2 )
+	{
+		mes "[Erundek]";
+		mes "Do you need more time to check the items?";
+		close;
+	}
+	
+	if( countitem(.@Badge) < .@Value )
+	{
+		mes "[Erundek]";
+		mes "I'm sorry, but you don't have enough badges to exchange.";
+		close;
+	}
+	
+	delitem .@Badge,.@Value;
+	getitem .@Item_ID,1;
+	mes "[Erundek]";
+	mes "Thank you for exchanging.";
+	close;
+}
diff --git a/npc/battleground/bg_flavius_01.txt b/npc/custom/battleground/bg_flavius_01.txt
similarity index 97%
rename from npc/battleground/bg_flavius_01.txt
rename to npc/custom/battleground/bg_flavius_01.txt
index 1a61b42559..871780800b 100644
--- a/npc/battleground/bg_flavius_01.txt
+++ b/npc/custom/battleground/bg_flavius_01.txt
@@ -438,16 +438,3 @@ bat_b01,110,162,1	duplicate(Croix camp#bat)	Croix camp#bat18	974
 bat_b01,110,137,1	duplicate(Croix camp#bat)	Croix camp#bat19	974
 bat_b01,152,120,1	duplicate(Croix camp#bat)	Croix camp#bat20	974
 bat_b01,158,114,1	duplicate(Croix camp#bat)	Croix camp#bat21	974
-
-// MapFlags
-// *********************************************************************
-
-bat_b01	mapflag	battleground	2
-bat_b01	mapflag	nomemo
-bat_b01	mapflag	nosave	SavePoint
-bat_b01	mapflag	noteleport
-bat_b01	mapflag	nowarp
-bat_b01	mapflag	nowarpto
-bat_b01	mapflag	noreturn
-bat_b01	mapflag	nobranch
-bat_b01	mapflag	nopenalty
diff --git a/npc/battleground/bg_flavius_02.txt b/npc/custom/battleground/bg_flavius_02.txt
similarity index 97%
rename from npc/battleground/bg_flavius_02.txt
rename to npc/custom/battleground/bg_flavius_02.txt
index c4e51fcea3..255f96a0a0 100644
--- a/npc/battleground/bg_flavius_02.txt
+++ b/npc/custom/battleground/bg_flavius_02.txt
@@ -438,16 +438,3 @@ bat_b02,110,162,1	duplicate(Croix camp#bat)	Croix camp#bat39	974
 bat_b02,110,137,1	duplicate(Croix camp#bat)	Croix camp#bat40	974
 bat_b02,152,120,1	duplicate(Croix camp#bat)	Croix camp#bat41	974
 bat_b02,158,114,1	duplicate(Croix camp#bat)	Croix camp#bat42	974
-
-// MapFlags
-// *********************************************************************
-
-bat_b02	mapflag	battleground
-bat_b02	mapflag	nomemo
-bat_b02	mapflag	nosave	SavePoint
-bat_b02	mapflag	noteleport
-bat_b02	mapflag	nowarp
-bat_b02	mapflag	nowarpto
-bat_b02	mapflag	noreturn
-bat_b02	mapflag	nobranch
-bat_b02	mapflag	nopenalty
diff --git a/npc/custom/battleground/bg_kvm01.txt b/npc/custom/battleground/bg_kvm01.txt
new file mode 100644
index 0000000000..36c758f373
--- /dev/null
+++ b/npc/custom/battleground/bg_kvm01.txt
@@ -0,0 +1,378 @@
+// ==============================================================================
+// BattleGround System - KvM 80~99
+// ==============================================================================
+
+// Registration NPC's
+// *********************************************************************
+
+bat_room,253,227,4	script	Registration::KvM01R_Guillaume	418,{ // KvM Guillaume
+	end;
+
+OnInit:
+	waitingroom "Battle Station 5 Players",5,"KvM01_BG::OnGuillaumeJoin",1;
+	end;
+	
+OnEnterBG:
+	set $@KvM01BG_id1, waitingroom2bg("bat_c01",53,128,"KvM01_BG::OnGuillaumeQuit","KvM01_BG::OnGuillaumeDie");
+	end;
+}
+
+bat_room,253,204,0	script	Registration::KvM01R_Croix	414,{ // KvM Croix
+	end;
+
+OnInit:
+	waitingroom "Battle Station 5 Players",5,"KvM01_BG::OnCroixJoin",1;
+	end;
+
+OnEnterBG:
+	set $@KvM01BG_id2, waitingroom2bg("bat_c01",146,55,"KvM01_BG::OnCroixQuit","KvM01_BG::OnCroixDie");
+	end;
+}
+
+// Light Effects
+// *********************************************************************
+
+bat_c01,54,123,0	script	#bat_c01a	111,{
+	end;
+
+OnKvM01LightA: misceffect 54; end;
+OnKvM01LightB: misceffect 55; end;
+OnKvM01LightC: misceffect 56; end;
+}
+
+bat_c01,56,125,0	duplicate(#bat_c01a)	#bat_c01b	111
+bat_c01,58,127,0	duplicate(#bat_c01a)	#bat_c01c	111
+bat_c01,141,56,0	duplicate(#bat_c01a)	#bat_c01d	111
+bat_c01,143,58,0	duplicate(#bat_c01a)	#bat_c01e	111
+bat_c01,145,60,0	duplicate(#bat_c01a)	#bat_c01f	111
+
+// Battleground Engine
+// *********************************************************************
+
+-	script	KvM01_BG	-1,{
+	end;
+
+OnInit:
+	setwall "bat_c01",54,122,6,7,0,"batc01wall_a";
+	setwall "bat_c01",55,122,5,7,0,"batc01wall_b";
+	setwall "bat_c01",140,56,6,7,0,"batc01wall_c";
+	setwall "bat_c01",140,57,5,7,0,"batc01wall_d";
+	disablenpc "TherapistKvM01a";
+	disablenpc "TherapistKvM01b";
+	disablenpc "VintenarKvM01a";
+	disablenpc "VintenarKvM01b";
+	end;
+
+OnGuillaumeJoin:
+OnCroixJoin:
+	donpcevent "KvM01_BG::OnReadyCheck";
+	end;
+
+OnGuillaumeQuit:
+	set BG_Delay_Tick, gettimetick(2) + 1200;
+OnGuillaumeDie:
+	if( $@KvM01BG == 2 )
+	{
+		set .Guillaume_Count, .Guillaume_Count - 1;
+		set .Croix_Score, .Croix_Score + 1;
+		bg_updatescore "bat_c01",.Guillaume_Score,.Croix_Score;
+		if( .Guillaume_Count < 1 ) donpcevent "KvM01_BG::OnCroixWin";
+	}
+	end;
+
+OnCroixQuit:
+	set BG_Delay_Tick, gettimetick(2) + 1200;
+OnCroixDie:
+	if( $@KvM01BG == 2 )
+	{
+		set .Croix_Count, .Croix_Count - 1;
+		set .Guillaume_Score, .Guillaume_Score + 1;
+		bg_updatescore "bat_c01",.Guillaume_Score,.Croix_Score;
+		if( .Croix_Count < 1 ) donpcevent "KvM01_BG::OnGuillaumeWin";
+	}
+	end;
+
+OnReadyCheck:
+	if( $@KvM01BG )
+		end;
+	set .@Guillaume, getwaitingroomstate(0,"KvM01R_Guillaume");
+	set .@Croix, getwaitingroomstate(0,"KvM01R_Croix");
+
+	if( .@Guillaume < 5 || .@Croix < 5 )
+	{
+		if( .@Guillaume > 3 && .@Croix > 3 && !agitcheck() && !agitcheck2() && $@KvM_Flood < gettimetick(2) )
+		{
+			announce "Battleground -- Kreiger Von Midgard [80-99] G: " + .@Guillaume + "/5, C: " + .@Croix + "/5",0,0x696969;
+			set $@KvM_Flood, gettimetick(2) + 15;
+		}
+		else
+			mapannounce "bat_room","Battleground -- Kreiger Von Midgard [80-99] G: " + .@Guillaume + "/5, C: " + .@Croix + "/5",1,0x696969;
+		end;
+	}
+
+	set $@KvM01BG, 1; // Starting
+	donpcevent "KvM01R_Croix::OnEnterBG";
+	donpcevent "KvM01R_Guillaume::OnEnterBG";
+	donpcevent "KvM01_BG::OnStart";
+	end;
+
+OnStart:
+	announce "Battleground -- Kreiger Von Midgard [80-99] has started!",0,0x696969;
+	enablenpc "TherapistKvM01a";
+	enablenpc "TherapistKvM01b";
+	disablenpc "VintenarKvM01a";
+	disablenpc "VintenarKvM01b";
+	set $@KvM01BG_Victory, 0;
+	sleep 2000;
+	// Warp Teams
+	bg_warp $@KvM01BG_id1,"bat_c01",53,128;
+	bg_warp $@KvM01BG_id2,"bat_c01",146,55;
+	// ScoreBoard
+	set .Guillaume_Score, 0;
+	set .Croix_Score, 0;
+	initnpctimer;
+	end;
+
+OnTimer5000:
+	areapercentheal "bat_c01",50,123,58,131,100,100;
+	areapercentheal "bat_c01",141,52,149,60,100,100;
+	mapannounce "bat_c01","The Battle will start in 25 seconds!!",1,0x696969;
+	end;
+
+OnTimer26000:
+	mapannounce "bat_c01","The Battle will start in 4 seconds!!",1,0x696969;
+	end;
+
+OnTimer27000:
+	donpcevent "::OnKvM01LightA";
+	end;
+
+OnTimer28000:
+	donpcevent "::OnKvM01LightB";
+	end;
+	
+OnTimer29000:
+	donpcevent "::OnKvM01LightC";
+	end;
+
+OnTimer30000:
+	// Team Members
+	set .Guillaume_Count, bg_get_data($@KvM01BG_id1, 0);
+	set .Croix_Count, bg_get_data($@KvM01BG_id2, 0);
+	if( .Guillaume_Count < 5 || .Croix_Count < 5 )
+	{
+		set $@KvM01BG_Victory, 3;
+		set $@KvM01BG, 3;
+		mapannounce "bat_c01","There are not enough players to start the battle",1,0x696969;
+		stopnpctimer;
+		sleep 2000;
+		donpcevent "KvM01_BG::OnStop";
+		end;
+	}
+
+	set $@KvM01BG, 2; // Playing
+	areapercentheal "bat_c01",50,123,58,131,100,100;
+	bg_warp $@KvM01BG_id1,"bat_c01",62,119;
+	areapercentheal "bat_c01",141,52,149,60,100,100;
+	bg_warp $@KvM01BG_id2,"bat_c01",137,64;
+	end;
+
+OnTimer32000:
+	mapannounce "bat_c01","The Battle of Kreiger Von Midgard has begun!!",1,0x696969;
+	end;
+
+OnTimer300000:
+	mapannounce "bat_c01","The Battle will ends in 30 seconds!!",1,0x696969;
+	end;
+
+OnTimer330000:
+	if( .Croix_Count > .Guillaume_Count )
+		donpcevent "KvM01_BG::OnCroixWin";
+	else if( .Croix_Count < .Guillaume_Count )
+		donpcevent "KvM01_BG::OnGuillaumeWin";
+	else
+	{ // Draw Game
+		set $@KvM01BG, 3;
+		set $@KvM01BG_Victory, 3;
+
+		stopnpctimer;
+		sleep 2000;
+		mapannounce "bat_c01","The time is out! This is a Tie...",1,0x696969;
+		donpcevent "KvM01_BG::OnStop";
+	}
+	end;
+
+OnGuillaumeWin:
+	set $@KvM01BG, 3;
+	set $@KvM01BG_Victory, 1;
+	
+	stopnpctimer;
+	sleep 2000;
+	mapannounce "bat_c01","The Guillaume Army has won the Battle of Kreiger Von Midgard",1,0x0000FF;
+	donpcevent "KvM01_BG::OnStop";
+	end;
+
+OnCroixWin:
+	set $@KvM01BG, 3;
+	set $@KvM01BG_Victory, 2;
+
+	stopnpctimer;
+	sleep 2000;
+	mapannounce "bat_c01","The Croix Army has won the Battle of Kreiger Von Midgard",1,0xFF0000;
+	donpcevent "KvM01_BG::OnStop";
+	end;
+
+OnStop:
+	disablenpc "TherapistKvM01a";
+	disablenpc "TherapistKvM01b";
+	enablenpc "VintenarKvM01a";
+	enablenpc "VintenarKvM01b";
+	// Warp Teams
+	bg_warp $@KvM01BG_id1,"bat_c01",53,128;
+	bg_warp $@KvM01BG_id2,"bat_c01",146,55;
+	donpcevent "KvM01_BG_Out::OnBegin";
+	end;
+
+OnReset:
+	stopnpctimer;
+	stopnpctimer "KvM01_BG_Out";
+	set .Croix_Count, 0;
+	set .Guillaume_Count, 0;
+	set .Croix_Score, 0;
+	set .Guillaume_Score, 0;
+	set $@KvM01BG_Victory, 0;
+	if( $@KvM01BG_id1 ) { bg_destroy $@KvM01BG_id1; set $@KvM01BG_id1, 0; }
+	if( $@KvM01BG_id2 ) { bg_destroy $@KvM01BG_id2; set $@KvM01BG_id2, 0; }
+	disablenpc "TherapistKvM01a";
+	disablenpc "TherapistKvM01b";
+	disablenpc "VintenarKvM01a";
+	disablenpc "VintenarKvM01b";
+	sleep 1000;
+	mapwarp "bat_c01","bat_room",155,150;
+	sleep 2000;
+	maprespawnguildid "bat_c01",0,3; // Just in case someone else
+	bg_updatescore "bat_c01",0,0;
+	sleep 2000;
+	set $@KvM01BG, 0;
+	donpcevent "KvM01_BG::OnReadyCheck"; // Maybe a game is ready to start
+	end;
+}
+
+-	script	KvM01_BG_Out	-1,{
+	end;
+
+OnBegin:
+	initnpctimer;
+	end;
+
+OnTimer3000:
+	mapannounce "bat_c01","Battle of Kreiger Von Midgard will close in 1 minute!",1,0x696969;
+	end;
+OnTimer30000:
+	mapannounce "bat_c01","Battle of Kreiger Von Midgard will close in 30 seconds!",1,0x696969;
+	end;
+OnTimer50000:
+	mapannounce "bat_c01","Battle of Kreiger Von Midgard will close in 10 seconds!",1,0x696969;
+	end;
+OnTimer60000:
+	donpcevent "KvM01_BG::OnReset";
+	end;
+}
+
+// Battleground Therapist
+// *********************************************************************
+
+bat_c01,51,130,5	script	Therapist in battle::TherapistKvM01a	95,{
+	mes "[Therapist in battle]";
+	mes "Just close your eyes, and take a deep breathe.";
+	mes "You can be free from pain.";
+	specialeffect2 312;
+	close;
+}
+
+bat_c01,148,53,1	script	Therapist in battle::TherapistKvM01b	95,{
+	mes "[Therapist in battle]";
+	mes "Just close your eyes, and take a deep breathe.";
+	mes "You can be free from pain.";
+	specialeffect2 312;
+	close;
+}
+
+// Battleground rewards
+// *********************************************************************
+
+bat_c01,51,130,5	script	Guillaume Vintenar::VintenarKvM01a	419,{
+	if( $@KvM01BG_Victory )
+	{
+		if( $@KvM01BG_Victory == 3 )
+		{
+			setquest 6025;
+			bg_leave;
+			warp "bat_room",155,150;
+			end;
+		}
+		else if( $@KvM01BG_Victory == Bat_Team )
+		{ // Victory
+			set .@Reward, 5;
+			mes "[Swandery]";
+			mes "Blessed Guillaume!!";
+			mes "Let's enjoy our glorious victory!";
+			mes "" + strcharinfo(0) + ", its a sign reflecting victory";
+			close2;
+		}
+		else
+		{ // 
+			set .@Reward, 1;
+			mes "[Swandery]";
+			mes "You lost, but you're dedicated to this battle.";
+			mes "This is a reward for your great dedication by Guillaume Marollo!";
+			mes "Just take this defeat a lesson, and later you would definitely learn.";
+			close2;
+		}
+
+		setquest 6025;
+		getitem 7773, .@Reward;
+		bg_leave;
+		warp "bat_room",155,150;
+		end;
+	}
+	end;
+}
+
+bat_c01,148,53,1	script	Croix Vintenar::VintenarKvM01b	415,{
+	if( $@KvM01BG_Victory )
+	{
+		if( $@KvM01BG_Victory == 3 )
+		{
+			setquest 6025;
+			bg_leave;
+			warp "bat_room",155,150;
+			end;
+		}
+		else if( $@KvM01BG_Victory == Bat_Team )
+		{ // Victory
+			set .@Reward, 5;
+			mes "[Swandery]";
+			mes "Blessed Croax!!";
+			mes "Let's enjoy our glorious victory!";
+			mes "" + strcharinfo(0) + ", its a sign reflecting victory";
+			close2;
+		}
+		else
+		{ // 
+			set .@Reward, 1;
+			mes "[Swandery]";
+			mes "Oh, " + strcharinfo(0) + ". Don't be sad.";
+			mes "Even though we didn't win, we did our best.";
+			mes "This is a Royal gift from Croix, and please don't forget this battle. We can win the next.";
+			close2;
+		}
+
+		setquest 6025;
+		getitem 7773, .@Reward;
+		bg_leave;
+		warp "bat_room",155,150;
+		end;
+	}
+	end;
+}
diff --git a/npc/custom/battleground/bg_kvm02.txt b/npc/custom/battleground/bg_kvm02.txt
new file mode 100644
index 0000000000..5bfbba3288
--- /dev/null
+++ b/npc/custom/battleground/bg_kvm02.txt
@@ -0,0 +1,378 @@
+// ==============================================================================
+// BattleGround System - KvM 60~79
+// ==============================================================================
+
+// Registration NPC's
+// *********************************************************************
+
+bat_room,225,227,4	script	Registration::KvM02R_Guillaume	418,{ // KvM Guillaume
+	end;
+
+OnInit:
+	waitingroom "Battle Station 5 Players",5,"KvM02_BG::OnGuillaumeJoin",1;
+	end;
+	
+OnEnterBG:
+	set $@KvM02BG_id1, waitingroom2bg("bat_c02",53,128,"KvM02_BG::OnGuillaumeQuit","KvM02_BG::OnGuillaumeDie");
+	end;
+}
+
+bat_room,225,204,0	script	Registration::KvM02R_Croix	414,{ // KvM Croix
+	end;
+
+OnInit:
+	waitingroom "Battle Station 5 Players",5,"KvM02_BG::OnCroixJoin",1;
+	end;
+
+OnEnterBG:
+	set $@KvM02BG_id2, waitingroom2bg("bat_c02",146,55,"KvM02_BG::OnCroixQuit","KvM02_BG::OnCroixDie");
+	end;
+}
+
+// Light Effects
+// *********************************************************************
+
+bat_c02,54,123,0	script	#bat_c02a	111,{
+	end;
+
+OnKvM02LightA: misceffect 54; end;
+OnKvM02LightB: misceffect 55; end;
+OnKvM02LightC: misceffect 56; end;
+}
+
+bat_c02,56,125,0	duplicate(#bat_c02a)	#bat_c02b	111
+bat_c02,58,127,0	duplicate(#bat_c02a)	#bat_c02c	111
+bat_c02,141,56,0	duplicate(#bat_c02a)	#bat_c02d	111
+bat_c02,143,58,0	duplicate(#bat_c02a)	#bat_c02e	111
+bat_c02,145,60,0	duplicate(#bat_c02a)	#bat_c02f	111
+
+// Battleground Engine
+// *********************************************************************
+
+-	script	KvM02_BG	-1,{
+	end;
+
+OnInit:
+	setwall "bat_c02",54,122,6,7,0,"batc02wall_a";
+	setwall "bat_c02",55,122,5,7,0,"batc02wall_b";
+	setwall "bat_c02",140,56,6,7,0,"batc02wall_c";
+	setwall "bat_c02",140,57,5,7,0,"batc02wall_d";
+	disablenpc "TherapistKvM02a";
+	disablenpc "TherapistKvM02b";
+	disablenpc "VintenarKvM02a";
+	disablenpc "VintenarKvM02b";
+	end;
+
+OnGuillaumeJoin:
+OnCroixJoin:
+	donpcevent "KvM02_BG::OnReadyCheck";
+	end;
+
+OnGuillaumeQuit:
+	set BG_Delay_Tick, gettimetick(2) + 1200;
+OnGuillaumeDie:
+	if( $@KvM02BG == 2 )
+	{
+		set .Guillaume_Count, .Guillaume_Count - 1;
+		set .Croix_Score, .Croix_Score + 1;
+		bg_updatescore "bat_c02",.Guillaume_Score,.Croix_Score;
+		if( .Guillaume_Count < 1 ) donpcevent "KvM02_BG::OnCroixWin";
+	}
+	end;
+
+OnCroixQuit:
+	set BG_Delay_Tick, gettimetick(2) + 1200;
+OnCroixDie:
+	if( $@KvM02BG == 2 )
+	{
+		set .Croix_Count, .Croix_Count - 1;
+		set .Guillaume_Score, .Guillaume_Score + 1;
+		bg_updatescore "bat_c02",.Guillaume_Score,.Croix_Score;
+		if( .Croix_Count < 1 ) donpcevent "KvM02_BG::OnGuillaumeWin";
+	}
+	end;
+
+OnReadyCheck:
+	if( $@KvM02BG )
+		end;
+	set .@Guillaume, getwaitingroomstate(0,"KvM02R_Guillaume");
+	set .@Croix, getwaitingroomstate(0,"KvM02R_Croix");
+
+	if( .@Guillaume < 5 || .@Croix < 5 )
+	{
+		if( .@Guillaume > 3 && .@Croix > 3 && !agitcheck() && !agitcheck2() && $@KvM_Flood < gettimetick(2) )
+		{
+			announce "Battleground -- Kreiger Von Midgard [60-79] G: " + .@Guillaume + "/5, C: " + .@Croix + "/5",0,0x808080;
+			set $@KvM_Flood, gettimetick(2) + 15;
+		}
+		else
+			mapannounce "bat_room","Battleground -- Kreiger Von Midgard [60-79] G: " + .@Guillaume + "/5, C: " + .@Croix + "/5",1,0x808080;
+		end;
+	}
+
+	set $@KvM02BG, 1; // Starting
+	donpcevent "KvM02R_Croix::OnEnterBG";
+	donpcevent "KvM02R_Guillaume::OnEnterBG";
+	donpcevent "KvM02_BG::OnStart";
+	end;
+
+OnStart:
+	announce "Battleground -- Kreiger Von Midgard [60-79] has started!",0,0x808080;
+	enablenpc "TherapistKvM02a";
+	enablenpc "TherapistKvM02b";
+	disablenpc "VintenarKvM02a";
+	disablenpc "VintenarKvM02b";
+	set $@KvM02BG_Victory, 0;
+	sleep 2000;
+	// Warp Teams
+	bg_warp $@KvM02BG_id1,"bat_c02",53,128;
+	bg_warp $@KvM02BG_id2,"bat_c02",146,55;
+	// ScoreBoard
+	set .Guillaume_Score, 0;
+	set .Croix_Score, 0;
+	initnpctimer;
+	end;
+
+OnTimer5000:
+	areapercentheal "bat_c02",50,123,58,131,100,100;
+	areapercentheal "bat_c02",141,52,149,60,100,100;
+	mapannounce "bat_c02","The Battle will start in 25 seconds!!",1,0x808080;
+	end;
+
+OnTimer26000:
+	mapannounce "bat_c02","The Battle will start in 4 seconds!!",1,0x808080;
+	end;
+
+OnTimer27000:
+	donpcevent "::OnKvM02LightA";
+	end;
+
+OnTimer28000:
+	donpcevent "::OnKvM02LightB";
+	end;
+	
+OnTimer29000:
+	donpcevent "::OnKvM02LightC";
+	end;
+
+OnTimer30000:
+	// Team Members
+	set .Guillaume_Count, bg_get_data($@KvM02BG_id1, 0);
+	set .Croix_Count, bg_get_data($@KvM02BG_id2, 0);
+	if( .Guillaume_Count < 5 || .Croix_Count < 5 )
+	{
+		set $@KvM02BG_Victory, 3;
+		set $@KvM02BG, 3;
+		mapannounce "bat_c02","There are not enough players to start the battle",1,0x808080;
+		stopnpctimer;
+		sleep 2000;
+		donpcevent "KvM02_BG::OnStop";
+		end;
+	}
+
+	set $@KvM02BG, 2; // Playing
+	areapercentheal "bat_c02",50,123,58,131,100,100;
+	bg_warp $@KvM02BG_id1,"bat_c02",62,119;
+	areapercentheal "bat_c02",141,52,149,60,100,100;
+	bg_warp $@KvM02BG_id2,"bat_c02",137,64;
+	end;
+
+OnTimer32000:
+	mapannounce "bat_c02","The Battle of Kreiger Von Midgard has begun!!",1,0x808080;
+	end;
+
+OnTimer300000:
+	mapannounce "bat_c02","The Battle will ends in 30 seconds!!",1,0x808080;
+	end;
+
+OnTimer330000:
+	if( .Croix_Count > .Guillaume_Count )
+		donpcevent "KvM02_BG::OnCroixWin";
+	else if( .Croix_Count < .Guillaume_Count )
+		donpcevent "KvM02_BG::OnGuillaumeWin";
+	else
+	{ // Draw Game
+		set $@KvM02BG, 3;
+		set $@KvM02BG_Victory, 3;
+
+		stopnpctimer;
+		sleep 2000;
+		mapannounce "bat_c02","The time is out! This is a Tie...",1,0x808080;
+		donpcevent "KvM02_BG::OnStop";
+	}
+	end;
+
+OnGuillaumeWin:
+	set $@KvM02BG, 3;
+	set $@KvM02BG_Victory, 1;
+	
+	stopnpctimer;
+	sleep 2000;
+	mapannounce "bat_c02","The Guillaume Army has won the Battle of Kreiger Von Midgard",1,0x0000FF;
+	donpcevent "KvM02_BG::OnStop";
+	end;
+
+OnCroixWin:
+	set $@KvM02BG, 3;
+	set $@KvM02BG_Victory, 2;
+
+	stopnpctimer;
+	sleep 2000;
+	mapannounce "bat_c02","The Croix Army has won the Battle of Kreiger Von Midgard",1,0xFF0000;
+	donpcevent "KvM02_BG::OnStop";
+	end;
+
+OnStop:
+	disablenpc "TherapistKvM02a";
+	disablenpc "TherapistKvM02b";
+	enablenpc "VintenarKvM02a";
+	enablenpc "VintenarKvM02b";
+	// Warp Teams
+	bg_warp $@KvM02BG_id1,"bat_c02",53,128;
+	bg_warp $@KvM02BG_id2,"bat_c02",146,55;
+	donpcevent "KvM02_BG_Out::OnBegin";
+	end;
+
+OnReset:
+	stopnpctimer;
+	stopnpctimer "KvM02_BG_Out";
+	set .Croix_Count, 0;
+	set .Guillaume_Count, 0;
+	set .Croix_Score, 0;
+	set .Guillaume_Score, 0;
+	set $@KvM02BG_Victory, 0;
+	if( $@KvM02BG_id1 ) { bg_destroy $@KvM02BG_id1; set $@KvM02BG_id1, 0; }
+	if( $@KvM02BG_id2 ) { bg_destroy $@KvM02BG_id2; set $@KvM02BG_id2, 0; }
+	disablenpc "TherapistKvM02a";
+	disablenpc "TherapistKvM02b";
+	disablenpc "VintenarKvM02a";
+	disablenpc "VintenarKvM02b";
+	sleep 1000;
+	mapwarp "bat_c02","bat_room",155,150;
+	sleep 2000;
+	maprespawnguildid "bat_c02",0,3; // Just in case someone else
+	bg_updatescore "bat_c02",0,0;
+	sleep 2000;
+	set $@KvM02BG, 0;
+	donpcevent "KvM02_BG::OnReadyCheck"; // Maybe a game is ready to start
+	end;
+}
+
+-	script	KvM02_BG_Out	-1,{
+	end;
+
+OnBegin:
+	initnpctimer;
+	end;
+
+OnTimer3000:
+	mapannounce "bat_c02","Battle of Kreiger Von Midgard will close in 1 minute!",1,0x808080;
+	end;
+OnTimer30000:
+	mapannounce "bat_c02","Battle of Kreiger Von Midgard will close in 30 seconds!",1,0x808080;
+	end;
+OnTimer50000:
+	mapannounce "bat_c02","Battle of Kreiger Von Midgard will close in 10 seconds!",1,0x808080;
+	end;
+OnTimer60000:
+	donpcevent "KvM02_BG::OnReset";
+	end;
+}
+
+// Battleground Therapist
+// *********************************************************************
+
+bat_c02,51,130,5	script	Therapist in battle::TherapistKvM02a	95,{
+	mes "[Therapist in battle]";
+	mes "Just close your eyes, and take a deep breathe.";
+	mes "You can be free from pain.";
+	specialeffect2 312;
+	close;
+}
+
+bat_c02,148,53,1	script	Therapist in battle::TherapistKvM02b	95,{
+	mes "[Therapist in battle]";
+	mes "Just close your eyes, and take a deep breathe.";
+	mes "You can be free from pain.";
+	specialeffect2 312;
+	close;
+}
+
+// Battleground rewards
+// *********************************************************************
+
+bat_c02,51,130,5	script	Guillaume Vintenar::VintenarKvM02a	419,{
+	if( $@KvM02BG_Victory )
+	{
+		if( $@KvM02BG_Victory == 3 )
+		{
+			setquest 6025;
+			bg_leave;
+			warp "bat_room",155,150;
+			end;
+		}
+		else if( $@KvM02BG_Victory == Bat_Team )
+		{ // Victory
+			set .@Reward, 3;
+			mes "[Swandery]";
+			mes "Blessed Guillaume!!";
+			mes "Let's enjoy our glorious victory!";
+			mes "" + strcharinfo(0) + ", its a sign reflecting victory";
+			close2;
+		}
+		else
+		{ // 
+			set .@Reward, 1;
+			mes "[Swandery]";
+			mes "You lost, but you're dedicated to this battle.";
+			mes "This is a reward for your great dedication by Guillaume Marollo!";
+			mes "Just take this defeat a lesson, and later you would definitely learn.";
+			close2;
+		}
+
+		setquest 6025;
+		getitem 7773, .@Reward;
+		bg_leave;
+		warp "bat_room",155,150;
+		end;
+	}
+	end;
+}
+
+bat_c02,148,53,1	script	Croix Vintenar::VintenarKvM02b	415,{
+	if( $@KvM02BG_Victory )
+	{
+		if( $@KvM02BG_Victory == 3 )
+		{
+			setquest 6025;
+			bg_leave;
+			warp "bat_room",155,150;
+			end;
+		}
+		else if( $@KvM02BG_Victory == Bat_Team )
+		{ // Victory
+			set .@Reward, 3;
+			mes "[Swandery]";
+			mes "Blessed Croax!!";
+			mes "Let's enjoy our glorious victory!";
+			mes "" + strcharinfo(0) + ", its a sign reflecting victory";
+			close2;
+		}
+		else
+		{ // 
+			set .@Reward, 1;
+			mes "[Swandery]";
+			mes "Oh, " + strcharinfo(0) + ". Don't be sad.";
+			mes "Even though we didn't win, we did our best.";
+			mes "This is a Royal gift from Croix, and please don't forget this battle. We can win the next.";
+			close2;
+		}
+
+		setquest 6025;
+		getitem 7773, .@Reward;
+		bg_leave;
+		warp "bat_room",155,150;
+		end;
+	}
+	end;
+}
diff --git a/npc/custom/battleground/bg_kvm03.txt b/npc/custom/battleground/bg_kvm03.txt
new file mode 100644
index 0000000000..6efa99e4c3
--- /dev/null
+++ b/npc/custom/battleground/bg_kvm03.txt
@@ -0,0 +1,378 @@
+// ==============================================================================
+// BattleGround System - KvM 1~59
+// ==============================================================================
+
+// Registration NPC's
+// *********************************************************************
+
+bat_room,197,227,4	script	Registration::KvM03R_Guillaume	418,{ // KvM Guillaume
+	end;
+
+OnInit:
+	waitingroom "Battle Station 5 Players",5,"KvM03_BG::OnGuillaumeJoin",1;
+	end;
+	
+OnEnterBG:
+	set $@KvM03BG_id1, waitingroom2bg("bat_c03",53,128,"KvM03_BG::OnGuillaumeQuit","KvM03_BG::OnGuillaumeDie");
+	end;
+}
+
+bat_room,197,204,0	script	Registration::KvM03R_Croix	414,{ // KvM Croix
+	end;
+
+OnInit:
+	waitingroom "Battle Station 5 Players",5,"KvM03_BG::OnCroixJoin",1;
+	end;
+
+OnEnterBG:
+	set $@KvM03BG_id2, waitingroom2bg("bat_c03",146,55,"KvM03_BG::OnCroixQuit","KvM03_BG::OnCroixDie");
+	end;
+}
+
+// Light Effects
+// *********************************************************************
+
+bat_c03,54,123,0	script	#bat_c03a	111,{
+	end;
+
+OnKvM03LightA: misceffect 54; end;
+OnKvM03LightB: misceffect 55; end;
+OnKvM03LightC: misceffect 56; end;
+}
+
+bat_c03,56,125,0	duplicate(#bat_c03a)	#bat_c03b	111
+bat_c03,58,127,0	duplicate(#bat_c03a)	#bat_c03c	111
+bat_c03,141,56,0	duplicate(#bat_c03a)	#bat_c03d	111
+bat_c03,143,58,0	duplicate(#bat_c03a)	#bat_c03e	111
+bat_c03,145,60,0	duplicate(#bat_c03a)	#bat_c03f	111
+
+// Battleground Engine
+// *********************************************************************
+
+-	script	KvM03_BG	-1,{
+	end;
+
+OnInit:
+	setwall "bat_c03",54,122,6,7,0,"batc03wall_a";
+	setwall "bat_c03",55,122,5,7,0,"batc03wall_b";
+	setwall "bat_c03",140,56,6,7,0,"batc03wall_c";
+	setwall "bat_c03",140,57,5,7,0,"batc03wall_d";
+	disablenpc "TherapistKvM03a";
+	disablenpc "TherapistKvM03b";
+	disablenpc "VintenarKvM03a";
+	disablenpc "VintenarKvM03b";
+	end;
+
+OnGuillaumeJoin:
+OnCroixJoin:
+	donpcevent "KvM03_BG::OnReadyCheck";
+	end;
+
+OnGuillaumeQuit:
+	set BG_Delay_Tick, gettimetick(2) + 1200;
+OnGuillaumeDie:
+	if( $@KvM03BG == 2 )
+	{
+		set .Guillaume_Count, .Guillaume_Count - 1;
+		set .Croix_Score, .Croix_Score + 1;
+		bg_updatescore "bat_c03",.Guillaume_Score,.Croix_Score;
+		if( .Guillaume_Count < 1 ) donpcevent "KvM03_BG::OnCroixWin";
+	}
+	end;
+
+OnCroixQuit:
+	set BG_Delay_Tick, gettimetick(2) + 1200;
+OnCroixDie:
+	if( $@KvM03BG == 2 )
+	{
+		set .Croix_Count, .Croix_Count - 1;
+		set .Guillaume_Score, .Guillaume_Score + 1;
+		bg_updatescore "bat_c03",.Guillaume_Score,.Croix_Score;
+		if( .Croix_Count < 1 ) donpcevent "KvM03_BG::OnGuillaumeWin";
+	}
+	end;
+
+OnReadyCheck:
+	if( $@KvM03BG )
+		end;
+	set .@Guillaume, getwaitingroomstate(0,"KvM03R_Guillaume");
+	set .@Croix, getwaitingroomstate(0,"KvM03R_Croix");
+
+	if( .@Guillaume < 5 || .@Croix < 5 )
+	{
+		if( .@Guillaume > 3 && .@Croix > 3 && !agitcheck() && !agitcheck2() && $@KvM_Flood < gettimetick(2) )
+		{
+			announce "Battleground -- Kreiger Von Midgard [1-59] G: " + .@Guillaume + "/5, C: " + .@Croix + "/5",0,0xC0C0C0;
+			set $@KvM_Flood, gettimetick(2) + 15;
+		}
+		else
+			mapannounce "bat_room","Battleground -- Kreiger Von Midgard [1-59] G: " + .@Guillaume + "/5, C: " + .@Croix + "/5",1,0xC0C0C0;
+		end;
+	}
+
+	set $@KvM03BG, 1; // Starting
+	donpcevent "KvM03R_Croix::OnEnterBG";
+	donpcevent "KvM03R_Guillaume::OnEnterBG";
+	donpcevent "KvM03_BG::OnStart";
+	end;
+
+OnStart:
+	announce "Battleground -- Kreiger Von Midgard [1-59] has started!",0,0xC0C0C0;
+	enablenpc "TherapistKvM03a";
+	enablenpc "TherapistKvM03b";
+	disablenpc "VintenarKvM03a";
+	disablenpc "VintenarKvM03b";
+	set $@KvM03BG_Victory, 0;
+	sleep 2000;
+	// Warp Teams
+	bg_warp $@KvM03BG_id1,"bat_c03",53,128;
+	bg_warp $@KvM03BG_id2,"bat_c03",146,55;
+	// ScoreBoard
+	set .Guillaume_Score, 0;
+	set .Croix_Score, 0;
+	initnpctimer;
+	end;
+
+OnTimer5000:
+	areapercentheal "bat_c03",50,123,58,131,100,100;
+	areapercentheal "bat_c03",141,52,149,60,100,100;
+	mapannounce "bat_c03","The Battle will start in 25 seconds!!",1,0xC0C0C0;
+	end;
+
+OnTimer26000:
+	mapannounce "bat_c03","The Battle will start in 4 seconds!!",1,0xC0C0C0;
+	end;
+
+OnTimer27000:
+	donpcevent "::OnKvM03LightA";
+	end;
+
+OnTimer28000:
+	donpcevent "::OnKvM03LightB";
+	end;
+	
+OnTimer29000:
+	donpcevent "::OnKvM03LightC";
+	end;
+
+OnTimer30000:
+	// Team Members
+	set .Guillaume_Count, bg_get_data($@KvM03BG_id1, 0);
+	set .Croix_Count, bg_get_data($@KvM03BG_id2, 0);
+	if( .Guillaume_Count < 5 || .Croix_Count < 5 )
+	{
+		set $@KvM03BG_Victory, 3;
+		set $@KvM03BG, 3;
+		mapannounce "bat_c03","There are not enough players to start the battle",1,0xC0C0C0;
+		stopnpctimer;
+		sleep 2000;
+		donpcevent "KvM03_BG::OnStop";
+		end;
+	}
+
+	set $@KvM03BG, 2; // Playing
+	areapercentheal "bat_c03",50,123,58,131,100,100;
+	bg_warp $@KvM03BG_id1,"bat_c03",62,119;
+	areapercentheal "bat_c03",141,52,149,60,100,100;
+	bg_warp $@KvM03BG_id2,"bat_c03",137,64;
+	end;
+
+OnTimer32000:
+	mapannounce "bat_c03","The Battle of Kreiger Von Midgard has begun!!",1,0xC0C0C0;
+	end;
+
+OnTimer300000:
+	mapannounce "bat_c03","The Battle will ends in 30 seconds!!",1,0xC0C0C0;
+	end;
+
+OnTimer330000:
+	if( .Croix_Count > .Guillaume_Count )
+		donpcevent "KvM03_BG::OnCroixWin";
+	else if( .Croix_Count < .Guillaume_Count )
+		donpcevent "KvM03_BG::OnGuillaumeWin";
+	else
+	{ // Draw Game
+		set $@KvM03BG, 3;
+		set $@KvM03BG_Victory, 3;
+
+		stopnpctimer;
+		sleep 2000;
+		mapannounce "bat_c03","The time is out! This is a Tie...",1,0xC0C0C0;
+		donpcevent "KvM03_BG::OnStop";
+	}
+	end;
+
+OnGuillaumeWin:
+	set $@KvM03BG, 3;
+	set $@KvM03BG_Victory, 1;
+	
+	stopnpctimer;
+	sleep 2000;
+	mapannounce "bat_c03","The Guillaume Army has won the Battle of Kreiger Von Midgard",1,0x0000FF;
+	donpcevent "KvM03_BG::OnStop";
+	end;
+
+OnCroixWin:
+	set $@KvM03BG, 3;
+	set $@KvM03BG_Victory, 2;
+
+	stopnpctimer;
+	sleep 2000;
+	mapannounce "bat_c03","The Croix Army has won the Battle of Kreiger Von Midgard",1,0xFF0000;
+	donpcevent "KvM03_BG::OnStop";
+	end;
+
+OnStop:
+	disablenpc "TherapistKvM03a";
+	disablenpc "TherapistKvM03b";
+	enablenpc "VintenarKvM03a";
+	enablenpc "VintenarKvM03b";
+	// Warp Teams
+	bg_warp $@KvM03BG_id1,"bat_c03",53,128;
+	bg_warp $@KvM03BG_id2,"bat_c03",146,55;
+	donpcevent "KvM03_BG_Out::OnBegin";
+	end;
+
+OnReset:
+	stopnpctimer;
+	stopnpctimer "KvM03_BG_Out";
+	set .Croix_Count, 0;
+	set .Guillaume_Count, 0;
+	set .Croix_Score, 0;
+	set .Guillaume_Score, 0;
+	set $@KvM03BG_Victory, 0;
+	if( $@KvM03BG_id1 ) { bg_destroy $@KvM03BG_id1; set $@KvM03BG_id1, 0; }
+	if( $@KvM03BG_id2 ) { bg_destroy $@KvM03BG_id2; set $@KvM03BG_id2, 0; }
+	disablenpc "TherapistKvM03a";
+	disablenpc "TherapistKvM03b";
+	disablenpc "VintenarKvM03a";
+	disablenpc "VintenarKvM03b";
+	sleep 1000;
+	mapwarp "bat_c03","bat_room",155,150;
+	sleep 2000;
+	maprespawnguildid "bat_c03",0,3; // Just in case someone else
+	bg_updatescore "bat_c03",0,0;
+	sleep 2000;
+	set $@KvM03BG, 0;
+	donpcevent "KvM03_BG::OnReadyCheck"; // Maybe a game is ready to start
+	end;
+}
+
+-	script	KvM03_BG_Out	-1,{
+	end;
+
+OnBegin:
+	initnpctimer;
+	end;
+
+OnTimer3000:
+	mapannounce "bat_c03","Battle of Kreiger Von Midgard will close in 1 minute!",1,0xC0C0C0;
+	end;
+OnTimer30000:
+	mapannounce "bat_c03","Battle of Kreiger Von Midgard will close in 30 seconds!",1,0xC0C0C0;
+	end;
+OnTimer50000:
+	mapannounce "bat_c03","Battle of Kreiger Von Midgard will close in 10 seconds!",1,0xC0C0C0;
+	end;
+OnTimer60000:
+	donpcevent "KvM03_BG::OnReset";
+	end;
+}
+
+// Battleground Therapist
+// *********************************************************************
+
+bat_c03,51,130,5	script	Therapist in battle::TherapistKvM03a	95,{
+	mes "[Therapist in battle]";
+	mes "Just close your eyes, and take a deep breathe.";
+	mes "You can be free from pain.";
+	specialeffect2 312;
+	close;
+}
+
+bat_c03,148,53,1	script	Therapist in battle::TherapistKvM03b	95,{
+	mes "[Therapist in battle]";
+	mes "Just close your eyes, and take a deep breathe.";
+	mes "You can be free from pain.";
+	specialeffect2 312;
+	close;
+}
+
+// Battleground rewards
+// *********************************************************************
+
+bat_c03,51,130,5	script	Guillaume Vintenar::VintenarKvM03a	419,{
+	if( $@KvM03BG_Victory )
+	{
+		if( $@KvM03BG_Victory == 3 )
+		{
+			setquest 6025;
+			bg_leave;
+			warp "bat_room",155,150;
+			end;
+		}
+		else if( $@KvM03BG_Victory == Bat_Team )
+		{ // Victory
+			set .@Reward, 1;
+			mes "[Swandery]";
+			mes "Blessed Guillaume!!";
+			mes "Let's enjoy our glorious victory!";
+			mes "" + strcharinfo(0) + ", its a sign reflecting victory";
+			close2;
+		}
+		else
+		{ // 
+			set .@Reward, 0;
+			mes "[Swandery]";
+			mes "You lost, but you're dedicated to this battle.";
+			mes "This is a reward for your great dedication by Guillaume Marollo!";
+			mes "Just take this defeat a lesson, and later you would definitely learn.";
+			close2;
+		}
+
+		setquest 6025;
+		getitem 7773, .@Reward;
+		bg_leave;
+		warp "bat_room",155,150;
+		end;
+	}
+	end;
+}
+
+bat_c03,148,53,1	script	Croix Vintenar::VintenarKvM03b	415,{
+	if( $@KvM03BG_Victory )
+	{
+		if( $@KvM03BG_Victory == 3 )
+		{
+			setquest 6025;
+			bg_leave;
+			warp "bat_room",155,150;
+			end;
+		}
+		else if( $@KvM03BG_Victory == Bat_Team )
+		{ // Victory
+			set .@Reward, 1;
+			mes "[Swandery]";
+			mes "Blessed Croax!!";
+			mes "Let's enjoy our glorious victory!";
+			mes "" + strcharinfo(0) + ", its a sign reflecting victory";
+			close2;
+		}
+		else
+		{ // 
+			set .@Reward, 0;
+			mes "[Swandery]";
+			mes "Oh, " + strcharinfo(0) + ". Don't be sad.";
+			mes "Even though we didn't win, we did our best.";
+			mes "Please don't forget this battle. We can win the next.";
+			close2;
+		}
+
+		setquest 6025;
+		getitem 7773, .@Reward;
+		bg_leave;
+		warp "bat_room",155,150;
+		end;
+	}
+	end;
+}
diff --git a/npc/custom/battleground/bg_tierra_01.txt b/npc/custom/battleground/bg_tierra_01.txt
index e65a2424c8..4c65d0462d 100644
--- a/npc/custom/battleground/bg_tierra_01.txt
+++ b/npc/custom/battleground/bg_tierra_01.txt
@@ -238,19 +238,6 @@ OnReset:
 	end;
 }
 
-// MapFlags
-// *********************************************************************
-
-bat_a01	mapflag	battleground
-bat_a01	mapflag	nomemo
-bat_a01	mapflag	nosave	SavePoint
-bat_a01	mapflag	noteleport
-bat_a01	mapflag	nowarp
-bat_a01	mapflag	nowarpto
-bat_a01	mapflag	noreturn
-bat_a01	mapflag	nobranch
-bat_a01	mapflag	nopenalty
-
 // Other Flags
 // *********************************************************************
 
diff --git a/npc/custom/battleground/bg_tierra_02.txt b/npc/custom/battleground/bg_tierra_02.txt
index a669b06dd9..7f72cdb3d3 100644
--- a/npc/custom/battleground/bg_tierra_02.txt
+++ b/npc/custom/battleground/bg_tierra_02.txt
@@ -238,19 +238,6 @@ OnReset:
 	end;
 }
 
-// MapFlags
-// *********************************************************************
-
-bat_a02	mapflag	battleground
-bat_a02	mapflag	nomemo
-bat_a02	mapflag	nosave	SavePoint
-bat_a02	mapflag	noteleport
-bat_a02	mapflag	nowarp
-bat_a02	mapflag	nowarpto
-bat_a02	mapflag	noreturn
-bat_a02	mapflag	nobranch
-bat_a02	mapflag	nopenalty
-
 // Other Flags
 // *********************************************************************
 
diff --git a/npc/events/halloween_2008.txt b/npc/events/halloween_2008.txt
index 778cd0d810..33f54b411e 100644
--- a/npc/events/halloween_2008.txt
+++ b/npc/events/halloween_2008.txt
@@ -267,15 +267,6 @@ payon,162,176,4	script	Halloween Magician#iRO08	704,{
 	
 // --------------- MapFlags ---------------
 
-evt_zombie	mapflag	nightenabled
-evt_zombie	mapflag	nobranch
-evt_zombie	mapflag	nomemo
-evt_zombie	mapflag	nopenalty
-evt_zombie	mapflag	pvp	off
-evt_zombie	mapflag	noreturn
-evt_zombie	mapflag	nosave	SavePoint
-evt_zombie	mapflag	noskill
-evt_zombie	mapflag	noteleport
 
 evt_zombie,16,142,1	script	zombiewarp001	45,2,2,{
 	OnTouch:
diff --git a/npc/events/idul_fitri.txt b/npc/events/idul_fitri.txt
index cfc357c22a..1ca2bc36e4 100644
--- a/npc/events/idul_fitri.txt
+++ b/npc/events/idul_fitri.txt
@@ -76,4 +76,3 @@ prontera,146,92,3	script	Cellerb	58,{
 	}
 }
 
-prontera	mapflag	fireworks
diff --git a/npc/jobs/1-1/swordman.txt b/npc/jobs/1-1/swordman.txt
index dce01d9b65..7f8793f0c0 100644
--- a/npc/jobs/1-1/swordman.txt
+++ b/npc/jobs/1-1/swordman.txt
@@ -398,10 +398,10 @@ job_sword1,193,168,0	script	Test Hall Staff#swd_9	45,1,3,{
 
 // Pitfalls (Set 1)
 //============================================================ 
-job_sword1,65,117,0	warp	����01-01	1,1,job_sword1,10,245
-job_sword1,98,27,0	warp	����02-01	1,1,job_sword1,11,207
-job_sword1,161,27,0	warp	����02-02	1,1,job_sword1,11,207
-job_sword1,239,117,0	warp	����03-01	1,1,job_sword1,11,169
+job_sword1,65,117,0	warp	����01-01	1,1,job_sword1,10,245
+job_sword1,98,27,0	warp	����02-01	1,1,job_sword1,11,207
+job_sword1,161,27,0	warp	����02-02	1,1,job_sword1,11,207
+job_sword1,239,117,0	warp	����03-01	1,1,job_sword1,11,169
 
 job_sword1,16,251,0	script	1_blank_1_a::SwdTrap1	-1,0,1,{
 OnTouch:
@@ -646,8 +646,3 @@ job_sword1,200,63,0,0	monster	Fabre	1184,2,60000,30000,0
 //============================================================ 
 // mapflag
 //============================================================ 
-job_sword1	mapflag	nomemo
-job_sword1	mapflag	noteleport
-job_sword1	mapflag	nosave	SavePoint
-job_sword1	mapflag	nopenalty
-job_sword1	mapflag	nobranch
diff --git a/npc/jobs/1-1/thief.txt b/npc/jobs/1-1/thief.txt
index 6ac5b9911e..088c14f08c 100644
--- a/npc/jobs/1-1/thief.txt
+++ b/npc/jobs/1-1/thief.txt
@@ -537,8 +537,3 @@ job_thief1,0,0,0,0	monster	Spore	1014,30,0,0,0
 //============================================================
 // mapflag
 //============================================================
-job_thief1	mapflag	nomemo
-job_thief1	mapflag	noteleport
-job_thief1	mapflag	nosave	SavePoint
-job_thief1	mapflag	nopenalty
-job_thief1	mapflag	nobranch
diff --git a/npc/jobs/2-2/crusader.txt b/npc/jobs/2-2/crusader.txt
index 295a790097..e7c32988ef 100644
--- a/npc/jobs/2-2/crusader.txt
+++ b/npc/jobs/2-2/crusader.txt
@@ -1461,13 +1461,6 @@ OnStop:
 //============================================================ 
 // mapflag
 //============================================================ 
-job_cru	mapflag	nomemo
-job_cru	mapflag	noteleport
-job_cru	mapflag	nosave	SavePoint
-job_cru	mapflag	nopenalty
-job_cru	mapflag	nobranch
-job_cru	mapflag	noexp
-job_cru	mapflag	noloot
 
 //============================================================ 
 // Old changelog
diff --git a/npc/jobs/2-2/monk.txt b/npc/jobs/2-2/monk.txt
index b3c5121b72..be224b989f 100644
--- a/npc/jobs/2-2/monk.txt
+++ b/npc/jobs/2-2/monk.txt
@@ -2609,13 +2609,6 @@ job_monk,0,0,0,0	monster	Thief Bug Larva	1051,20,0,0,0
 //============================================================ 
 // mapflag
 //============================================================ 
-monk_test	mapflag	nomemo
-monk_test	mapflag	noteleport
-monk_test	mapflag	nosave	SavePoint
-monk_test	mapflag	nopenalty
-monk_test	mapflag	nobranch
-monk_test	mapflag	noexp
-monk_test	mapflag	noloot
 
 //============================================================ 
 // Old changelog
diff --git a/npc/jobs/2-2/rogue.txt b/npc/jobs/2-2/rogue.txt
index 43d8bebbc5..8598a42b12 100644
--- a/npc/jobs/2-2/rogue.txt
+++ b/npc/jobs/2-2/rogue.txt
@@ -2015,11 +2015,6 @@ in_rogue,399,286,1	script	switch#rogreset	88,{
 //============================================================ 
 // mapflag
 //============================================================ 
-in_rogue	mapflag	nomemo
-in_rogue	mapflag	noteleport
-in_rogue	mapflag	nosave	SavePoint
-in_rogue	mapflag	nopenalty
-in_rogue	mapflag	nobranch
 
 //============================================================ 
 // Old changelog
diff --git a/npc/jobs/2-2/sage.txt b/npc/jobs/2-2/sage.txt
index 0a4ed575a3..6320e60d98 100644
--- a/npc/jobs/2-2/sage.txt
+++ b/npc/jobs/2-2/sage.txt
@@ -2893,11 +2893,6 @@ OnTimer9000:
 //============================================================ 
 // Mapflag
 //============================================================ 
-job_sage	mapflag	nomemo
-job_sage	mapflag	noteleport
-job_sage	mapflag	nosave	SavePoint
-job_sage	mapflag	nopenalty
-job_sage	mapflag	nobranch
 
 //============================================================ 
 // Old changelog
diff --git a/npc/other/Global_Functions.txt b/npc/other/Global_Functions.txt
index cd18b3a220..18c3847717 100644
--- a/npc/other/Global_Functions.txt
+++ b/npc/other/Global_Functions.txt
@@ -310,3 +310,39 @@ function	script	F_GetArmorType	{
 	}
 	end;
 }
+
+// Time calculation Function
+// *********************************************************************
+function	script	Time2Str	{
+	set .@Time_Left, getarg(0) - gettimetick(2);
+	
+	set .@Days, .@Time_Left / 86400;
+	set .@Time_Left, .@Time_Left - (.@Days * 86400);
+	set .@Hours, .@Time_Left / 3600;
+	set .@Time_Left, .@Time_Left - (.@Hours * 3600);
+	set .@Minutes, .@Time_Left / 60;
+	set .@Time_Left, .@Time_Left - (.@Minutes * 60);
+	
+	set .@Time$, "";
+	if( .@Days > 1 )
+		set .@Time$, .@Time$ + .@Days + " days, ";
+	else if( .@Days > 0 )
+		set .@Time$, .@Time$ + .@Days + " day, ";
+
+	if( .@Hours > 1 )
+		set .@Time$, .@Time$ + .@Hours + " hours, ";
+	else if( .@Hours > 0 )
+		set .@Time$, .@Time$ + .@Hours + " hour, ";
+
+	if( .@Minutes > 1 )
+		set .@Time$, .@Time$ + .@Minutes + " minutes, ";
+	else if( .@Minutes > 0 )
+		set .@Time$, .@Time$ + .@Minutes + " minute, ";
+
+	if( .@Time_Left > 1 || .@Time_Left == 0 )
+		set .@Time$, .@Time$ + .@Time_Left + " seconds.";
+	else if( .@Time_Left == 1 )
+		set .@Time$, .@Time$ + .@Time_Left + " second.";
+	
+	return .@Time$;
+}
diff --git a/npc/other/mail.txt b/npc/other/mail.txt
index 0ca900727f..626efcb0b9 100644
--- a/npc/other/mail.txt
+++ b/npc/other/mail.txt
@@ -21,27 +21,6 @@
 
 // Allow Mail Inbox reading from
 //============================================================
-prontera	mapflag	town
-izlude	mapflag	town
-moc_ruins	mapflag	town
-geffen	mapflag	town
-payon	mapflag	town
-pay_arche	mapflag	town
-alberta	mapflag	town
-aldebaran	mapflag	town
-yuno	mapflag	town
-lighthalzen	mapflag	town
-einbroch	mapflag	town
-einbech	mapflag	town
-comodo	mapflag	town
-umbala	mapflag	town
-amatsu	mapflag	town
-gonryun	mapflag	town
-ayothaya	mapflag	town
-louyang	mapflag	town
-hugel	mapflag	town
-rachel	mapflag	town
-veins	mapflag	town
 
 // Prontera
 //============================================================
diff --git a/npc/scripts_athena.conf b/npc/scripts_athena.conf
index a50ffc15f2..afd0fe4719 100644
--- a/npc/scripts_athena.conf
+++ b/npc/scripts_athena.conf
@@ -327,7 +327,9 @@ npc: npc/battleground/tierra/tierra_enter.txt
 npc: npc/battleground/tierra/tierra01.txt
 npc: npc/battleground/tierra/tierra02.txt
 // Flavius
-//npc: npc/battleground/flavius/flavius_enter.txt
+npc: npc/battleground/flavius/flavius_enter.txt
+npc: npc/battleground/flavius/flavius01.txt
+npc: npc/battleground/flavius/flavius02.txt
 // Kreiger Von Midgard
 npc: npc/battleground/kvm/kvm_enter.txt
 npc: npc/battleground/kvm/kvm_item_pay.txt
diff --git a/npc/scripts_custom.conf b/npc/scripts_custom.conf
index 9dcaeb012a..91f367cf92 100644
--- a/npc/scripts_custom.conf
+++ b/npc/scripts_custom.conf
@@ -71,10 +71,14 @@
 // BattleGround (please read conf/battle/battleground.conf before
 // uncomment battleground scripts).
 // --------------------------------------------------------------
+//npc: npc/custom/battleground/bg_common.txt
 //npc: npc/custom/battleground/bg_tierra_01.txt
 //npc: npc/custom/battleground/bg_tierra_02.txt
 //npc: npc/battleground/bg_flavius_01.txt
 //npc: npc/battleground/bg_flavius_02.txt
+//npc: npc/custom/battleground/bg_kvm01.txt
+//npc: npc/custom/battleground/bg_kvm02.txt
+//npc: npc/custom/battleground/bg_kvm03.txt
 
 // --------------------------------------------------------------
 // Lance's Scripts (coded before joining eA Dev team)
diff --git a/npc/scripts_mapflags.conf b/npc/scripts_mapflags.conf
index 0f31ec064d..011d9e3a36 100644
--- a/npc/scripts_mapflags.conf
+++ b/npc/scripts_mapflags.conf
@@ -24,4 +24,8 @@ npc: conf/mapflag/pvp_noparty.txt
 npc: conf/mapflag/pvp_noguild.txt
 npc: conf/mapflag/night.txt
 npc: conf/mapflag/restricted.txt
+npc: conf/mapflag/battleground.txt
+npc: conf/mapflag/fireworks.txt
+npc: conf/mapflag/novending.txt
+npc: conf/mapflag/town.txt
 // --------------------------------------------------------------
diff --git a/src/map/clif.c b/src/map/clif.c
index 45b8945c6a..fd2f615225 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -13116,28 +13116,30 @@ void clif_quest_delete(struct map_session_data * sd, int quest_id)
 	WFIFOSET(fd, packet_len(0x02B4));
 }
 
-//* 02b5 <packet_len>.w <mob_num>.w { <quest_id>.d <mob_id>.d <count>.w }.mob_num
+//* 02b5 <packet_len>.w <mob_num>.w { <quest_id>.d <mob_id>.d <count_total>.w <count_partial>.w }.mob_num
 void clif_quest_update_objective(struct map_session_data * sd, struct quest * qd, int index)
 {
-	int fd = sd->fd;
+    int fd = sd->fd;
 	int i;
-	int len = quest_db[index].num_objectives*10+6;
+	int len = quest_db[index].num_objectives*12+6;
 
 	WFIFOHEAD(fd, len);
-	WFIFOW(fd, 0) = 0x02B5;
-	WFIFOW(fd, 2) = len;
-	WFIFOW(fd, 4) = quest_db[index].num_objectives;
+    WFIFOW(fd, 0) = 0x02B5;
+    WFIFOW(fd, 2) = len;
+    WFIFOW(fd, 4) = quest_db[index].num_objectives;
 
 	for( i = 0; i < quest_db[index].num_objectives; i++ )
-	{
-		WFIFOL(fd, i*10+6) = qd->quest_id;
-		WFIFOL(fd, i*10+10) = quest_db[index].mob[i];
-		WFIFOW(fd, i*10+14) = qd->count[i];
-	}
+    {
+        WFIFOL(fd, i*12+6) = qd->quest_id;
+        WFIFOL(fd, i*12+10) = quest_db[index].mob[i];
+        WFIFOW(fd, i*12+14) = quest_db[index].count[i];
+        WFIFOW(fd, i*12+16) = qd->count[i];
+    }
 
 	WFIFOSET(fd, len);
 }
 
+
 //* 02B6 <quest_id>.L <state>.B
 void clif_parse_questStateAck(int fd, struct map_session_data * sd)
 {